Friskription → 博客 → SRT 与 VTT
SRT 与 VTT:该用哪一种
它们装的是同样的字句、同样的时间,差别大约三个字符。值得在意的原因是:有那么几个地方,只认其中一种。
简短的回答
- 选 SRT——用于视频剪辑软件、桌面播放器,以及往 YouTube 上传字幕。这是什么都接受的格式。
- 选 VTT——当字幕要放到网页上时,因为 HTML5 的
<track>元素只读 WebVTT,别的一概不读。 - 拿不准就选 SRT。支持面更广,日后转成 VTT 也只是加一行文件头再查找替换一下。
- 真正的差别:VTT 以一行
WEBVTT开头,而它的时间戳在毫秒前用句点,SRT 用逗号。 - VTT 还能携带 SRT 没有的样式和位置信息——多数人从来用不上,而且有些播放器根本会忽略。
同样的三条字幕,两种写法
SRT
1
00:00:01,200 --> 00:00:04,600
So today we are finally opening the
box everyone has been asking about.
2
00:00:04,600 --> 00:00:07,900
I have not looked inside. Not once,
I promise.
3
00:00:08,300 --> 00:00:11,400
Right — let us do this properly.
VTT
WEBVTT
1
00:00:01.200 --> 00:00:04.600
So today we are finally opening the
box everyone has been asking about.
2
00:00:04.600 --> 00:00:07.900
I have not looked inside. Not once,
I promise.
在一份普通文件里,差别真的就这么多:一行文件头,以及逗号变成了句点。两者都是纯 UTF-8 文本,都给每条字幕编号,都在起止时间之间用 -->,也都把正文写在下面几行。
实际存在的差异
| SRT(SubRip) | VTT(WebVTT) | |
|---|---|---|
| 文件头 | 没有 | 第一行 WEBVTT,必需 |
| 毫秒分隔符 | 逗号 — 00:00:01,200 |
句点 — 00:00:01.200 |
| 字幕编号 | 必需 | 可选,而且可以是名称而非数字 |
| 位置 | 不属于该格式 | 每条字幕各自的位置、对齐和尺寸设置 |
| 样式 | 基本的内联标签,支持参差不齐 | 类似 CSS 的 STYLE 块和字幕类名 |
| 注释与元数据 | 没有 | NOTE 块,以及章节和元数据轨道 |
HTML5 <track> |
不支持 | 它唯一能读的格式 |
| 其他一切 | 基本到处都收 | 普遍能收,偶尔不行 |
按用途来选
| 字幕要用到哪里 | 选 | 为什么 |
|---|---|---|
| 视频剪辑软件 — Premiere、DaVinci Resolve、Final Cut、剪映 | SRT | 每个剪辑软件都二话不说就能导入的格式。 |
| 桌面播放器 — VLC、IINA、mpv | SRT | 与视频同名放在一起,它自己就会加载。 |
| 往 YouTube 上传字幕 | SRT | YouTube 两种都收,但 SRT 阻力最小。 |
网页上的 HTML5 <video> |
VTT | <track> 元素只读 WebVTT,别无他选。 |
| HLS 或 DASH 流媒体 | VTT | 两者的规范都把 WebVTT 定为字幕格式。 |
| 社交平台视频 — Instagram、TikTok、LinkedIn | SRT | 凡是能上传字幕的地方,几乎都是 SRT。 |
| 还没想好 | SRT | 支持更广,日后再转也不费事。 |
两者互转
SRT 转 VTT 只有两处改动:在最上面加一行 WEBVTT 和一个空行,再把每个时间戳里的逗号改成句点。别的都不用动。
# SRT → VTT
{ echo -e "WEBVTT\n"; sed 's/,/./g' subtitles.srt; } > subtitles.vtt
sed 故意写得很粗。
它会替换文件里的每一个逗号,包括台词里的逗号——对时间戳没问题,对正文就是错的。要交付的东西,请只转换时间戳那几行;或者干脆一开始就导出你要的格式,那是零成本的。
VTT 转 SRT 就是反过来做一遍,再把 SRT 放不下的东西去掉:NOTE 块、STYLE 块、时间戳后面的字幕设置,以及用名称而非数字的字幕。
拿到任一格式的文件
如果你来这里是因为需要字幕,而不是为了给格式之争下定论:媒体工作室接收视频或音频文件——MP4、WebM、MP3、M4A 或 WAV——在浏览器里读取,把语音转写并翻译,最后给出任一种格式。文件本身始终不离开你的电脑。
每周三十分钟免费,只有有人说话的部分才计费,两种下载里的字句完全相同——所以最后那个选择,恰恰就是这一页讲的事。另有完整的操作说明。
问题
SRT 和 VTT 有什么区别?
在一份普通文件里有两点:VTT 文件以 WEBVTT 一行开头,它的时间戳用句点分隔毫秒,而 SRT 用逗号。此外 VTT 还支持字幕定位、样式、注释和元数据,这些 SRT 都放不下。
YouTube 该用哪种?
SRT。YouTube 两种都收,但它的上传流程对 SRT 最顺,链条上其他工具也都认这个格式。
网站该用哪种?
VTT,而且没得选:HTML5 的 <track> 元素只读 WebVTT。HLS 和 DASH 流媒体的规范同样规定了 WebVTT。
VLC 能播放 VTT 文件吗?
一般可以,但桌面播放器还是选 SRT 更稳妥。把字幕文件命名成和视频一样,放进同一个文件夹,它就会自动加载。
有哪一种更准确吗?
没有。它们只是装同样字句、同样时间的容器。准确度取决于字幕是怎么生成的,而不是你存成了哪种格式。
一个字幕文件能同时装两种语言吗?
不能作为两条独立的轨道,但同一条字幕里可以放两行。生成前打开在译文下方显示原文的选项,每条字幕就会先写译文、下面用括号写原文——这样任何播放器都能同时显示,而不需要两个文件。
ASS 和 SSA 呢?
那是另一类格式,是为繁重的样式、定位和排版而生的——字幕组做的就是那种活儿。当字幕本身承担设计工作时,它们很值。而对于带时间轴的翻译文本,SRT 和 VTT 才是尺寸刚好的工具。