SSubToolDesk
zh

SRT 与 VTT:有什么区别,应该用哪个?

SRT 和 VTT 是最常见的两种字幕格式,但它们并不能互换使用。以下是两者真正的区别,以及该如何选择合适的格式。

如果你曾经下载过一个视频的字幕文件,结果却发现根本用不了,那很可能就是 SRT 和 VTT 不匹配导致的。这两种格式本质上存储的是同一种东西(带时间信息的文本片段,也就是 cue),但它们诞生于 Web 发展的不同阶段,在不同使用场景下的表现也不一样。

什么是 SRT

SRT(SubRip Text)是更早、更简单的格式。它是为桌面视频播放器设计的,而不是为浏览器设计的。一个 cue 看起来是这样的:

1
00:00:01,000 --> 00:00:04,000
大家好,欢迎观看本节目。

只有一个序号、用逗号分隔的起止时间,以及文本内容。没有头部信息,没有样式,没有元数据。正是这种简洁性让 SRT 至今仍随处可见:几乎所有媒体播放器、编辑工具和流媒体平台都能读取它。

什么是 VTT

VTT(WebVTT)是专门为 HTML5 的 <track> 元素设计的,这意味着它是浏览器在网页视频字幕场景下默认期望的格式。VTT 文件必须有一行 WEBVTT 头部信息,并且时间码中使用点号而不是逗号:

WEBVTT

1
00:00:01.000 --> 00:00:04.000
大家好,欢迎观看本节目。

除了头部信息和时间码写法之外,VTT 还支持一些 SRT 从未支持过的功能:cue 的位置控制、基础样式(通过类名实现粗体、斜体、颜色),以及用于区分说话人的 voice 标签。如果你要把字幕直接嵌入网页,几乎总是需要 VTT。

真正容易让人踩坑的实际差异

  • 时间码里的逗号和点号。 这是把 SRT 文件改名为 .vtt(或反过来)之后“不能用”最常见的原因:时间码的分隔符不同,大多数解析器并不会悄悄帮你修正。
  • WEBVTT 头部信息。 即使其他每一行都正确,缺少这行头部信息的 VTT 文件依然是无效的。
  • 各平台的要求。 YouTube、Vimeo 以及大多数视频编辑软件都接受 SRT。浏览器原生的 <track> 元素和许多 JavaScript 视频播放器则需要 VTT。流媒体/HLS 工作流通常也需要 VTT。
  • 样式支持。 如果你需要在屏幕上定位字幕位置,或为特定说话人设置样式,SRT 完全做不到这一点。你需要 VTT(或者更高级的格式,比如 ASS)。

应该用哪一个?

  • 上传字幕到 YouTube、在 Premiere/Final Cut 中剪辑、或使用大多数桌面工具 → SRT。
  • 用 <video>/<track> 元素把字幕嵌入网页,或用于 HLS/网页流媒体 → VTT。
  • 需要高级样式或定位功能 → 这两者都不够,考虑 ASS。

如果你手头有一种格式,需要另一种,其实完全不用手动重写:转换过程纯粹是机械性的(时间码格式、头部信息、cue 编号)。我们的SRT 转 VTT 转换器可以完全在你的浏览器里完成这项工作,无需上传、无需注册账号,你的文件也永远不会离开你的设备。

将 SRT 转换为 VTT