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 才是尺寸刚好的工具。

给手头已有的素材做一份字幕文件

每周三十分钟免费。无需安装,文件留在你自己的电脑上。

打开媒体工作室