You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决Safari中HLS字幕不同步:计算WebVtt的MPEGTS值方法

HLS WebVtt 对应MPEGTS时间戳计算方法

核心基准

MPEGTS时间戳采用90kHz时间基准,即1个MPEGTS单位 = 1/90000秒,所有计算都基于这个基准。

直接计算(基于WebVTT字幕绝对时间)

如果WebVTT字幕时间是相对于整个视频的绝对起始点,按以下步骤计算:

  1. 转换WebVTT时间为总秒数:
    WebVTT时间格式为 HH:MM:SS.mmm,将其转换为以秒为单位的浮点数。
    示例:00:02:15.300 → 2*60 + 15 + 0.3 = 135.3秒
  2. 计算MPEGTS值:
    将总秒数乘以90000,取整数结果(MPEGTS时间戳为整数)。
    示例:135.3 * 90000 = 12177000 → 这就是对应MPEGTS值

基于视频片段起始PTS的精准计算

如果字幕和HLS视频片段绑定,需结合视频片段的起始PTS(从视频流提取的MPEGTS时间戳)计算:

  1. 获取视频片段的起始PTS:
    可通过工具(如ffmpeg)从TS流中提取,比如执行命令 ffprobe -show_packets -select_streams v:0 input.ts 查看
  2. 计算字幕相对于片段的偏移秒数:
    比如字幕在视频片段开始后3.5秒出现,偏移秒数即为3.5
  3. 计算最终MPEGTS值:
    视频起始PTS + (偏移秒数 * 90000)
    示例:视频起始PTS为5400000,偏移3.5秒 → 5400000 + (3.5*90000) = 5715000

关键注意事项

  • 确保WebVTT时间精度与视频流一致,毫秒级误差都可能导致Safari中字幕不同步
  • X-TIMESTAMP-MAP格式需严格符合HLS规范:#EXT-X-TIMESTAMP-MAP=MPEGTS:<计算值>,LOCAL:<对应WebVTT时间>
  • 分段字幕需为每个字幕段单独计算对应视频分段的MPEGTS值,不能全局复用一个映射

内容的提问来源于stack exchange,提问作者Mangaleswaran Selvam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:05:19