字幕格式讲明白:SRT vs VTT vs ASS——什么时候用哪个
字幕格式讲明白:SRT vs VTT vs ASS——什么时候用哪个
字幕本该很简单。有文字,在特定时间出现,你读它。完事。
可它从来没那么简单,对吧?你下了个字幕文件,结果不同步。或者播放器读不了。或者格式显示成一堆乱码。或者字幕出现了,但位置不对。或者——你懂的。
这些问题多数归结为一件事:在你的场景里用错了字幕格式。我们来解决它。
你真正会遇到的三种格式
外面有几十种字幕格式。大多已过时、专有,或冷门到你这辈子见不到。实际上,三种格式占主导:
SRT(SubRip)—— 通用标准。简单、广泛支持、几乎到处能用。
VTT(WebVTT)—— 网页原生版本。为 HTML5 视频设计。
ASS(Advanced SubStation Alpha)—— 功能丰富的那个。支持样式、定位和特效。
逐个来看。
SRT:可靠的主力
SRT 自 1998 年就有了。它活下来是因为把一件事做好了:把文字对到时间戳上。不花哨,就是好用。
SRT 文件长什么样
1
00:00:05,000 --> 00:00:08,500
你好,欢迎观看本视频。
2
00:00:10,200 --> 00:00:14,800
今天我们要聊一些
有意思的东西。
3
00:00:16,000 --> 00:00:19,000
开始吧。
就这样。顺序编号、毫秒精度的时间戳、以及文字本身。人类可读,用任何文本编辑器都能改。
为什么 SRT 好用
通用兼容。 每个播放器——VLC、MX Player、Windows Media Player、IINA、Plex,随便哪个——都支持 SRT。每个操作系统都能处理。每个流媒体平台都接受 SRT 上传。
简单。 没有复杂语法可搞砸。如果字幕不工作,你能用记事本打开文件,一眼看出哪里错了。
易于创建和编辑。 不需要专门软件。任何文本编辑器都行。当你凌晨两点修同步问题时,这点很重要。
SRT 的局限
没有样式。 文字就是文字。你没法指定字体、颜色、字号或位置。由播放器决定字幕长什么样。
没有元数据。 没法在文件内指定语言、作者等信息。
只有基础定位。 字幕居中显示在底部。就这样。如果对白和画面上的文字重叠,那你没辙。
什么时候用 SRT
用 SRT,当:
- 你需要最大兼容性
- 你要上传到 YouTube、Vimeo 等平台
- 你在分发内容、且无法控制播放器
- 简单比美观更重要
别用 SRT,当:
- 你需要特定样式或定位
- 你在做卡拉 OK 那种逐字计时
- 你有多个说话人需要颜色区分
VTT:网页标准
WebVTT(Web Video Text Tracks)由 W3C 专为 HTML5 视频创建。它本质上是加了网页友好特性的 SRT。
VTT 文件长什么样
WEBVTT
00:00:05.000 --> 00:00:08.500
你好,欢迎观看本视频。
00:00:10.200 --> 00:00:14.800
今天我们要聊一些
有意思的东西。
00:00:16.000 --> 00:00:19.000
开始吧。
注意区别:顶部的 WEBVTT 头、时间戳用句点而非逗号、以及可选的提示编号。
VTT 为什么存在
VTT 是为解决网页特有问题设计的:
HTML5 原生支持。 HTML5 视频的 <track> 元素期望 VTT 格式。浏览器无需任何 JavaScript 解析就能理解它。
基础样式。 VTT 支持一些内联格式:<b>粗体</b>、<i>斜体</i>、<u>下划线</u>。更重要的是,你可以为提示定义 CSS 样式。
定位。 你可以控制字幕出现的位置:
00:00:05.000 --> 00:00:08.500 line:0 position:90%
[说话人在右上角]
元数据支持。 VTT 可以包含备注、注释和章节标记——不只是字幕。
VTT 的局限
不如 SRT 通用。 一些老播放器不支持 VTT。桌面应用更偏好 SRT。
样式有限。 虽然 VTT 比 SRT 支持更多样式,但远不及 ASS 强大。复杂特效做不了。
浏览器差异。 不同浏览器渲染 VTT 样式略有不同。样式要紧的话,跨浏览器测一下。
什么时候用 VTT
用 VTT,当:
- 你在网页里嵌入视频
- 你需要多种轨道类型(字幕、隐藏式字幕、描述)
- 你想要 CSS 能控制的基础样式
- 无障碍特性要紧(屏幕阅读器能理解 VTT)
别用 VTT,当:
- 你的受众主要用桌面播放器
- 你需要所有播放器上保证一致的样式
- 需要复杂视觉特效
ASS:高阶用户之选
ASS(Advanced SubStation Alpha)是动漫字幕组钟爱的格式。对多数用途它是杀鸡用牛刀——但当你需要它的能力时,没有别的能比。
ASS 文件长什么样
[Script Info]
Title: Example Subtitle
ScriptType: v4.00+
Collisions: Normal
PlayDepth: 0
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, ...
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,...
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:05.00,0:00:08.50,Default,,0,0,0,,你好,欢迎观看本视频。
是的,它很复杂。这就是灵活性的代价。
ASS 为什么存在
ASS 是为"呈现和内容同样重要"的场景设计的:
完整样式控制。 字体、颜色、字号、描边、阴影、透明度——你控制一切。
精确定位。 把文字放到屏幕任何位置。播放中移动它。叠多个图层。
动画和特效。 淡入淡出、横移、旋转、缩放、颜色渐变。有些 ASS 字幕本质上就是动态图形。
单文件多样式。 不同角色可以有不同颜色的字幕。标牌可以用和对白不同的字体。
ASS 的局限
播放器支持有限。 很多播放器渲染 ASS 时会降级或忽略样式。有些完全不支持。
复杂。 这个格式很难手工编辑。你需要 Aegisub 这类专门软件。
文件体积。 ASS 文件比同等的 SRT/VTT 大,带样式的内容有时大很多。
浏览器支持差。 网页播放器通常无法正确渲染 ASS。样式会被剥掉或弄乱。
什么时候用 ASS
用 ASS,当:
- 样式对观看体验至关重要(比如外语文字叠加)
- 你专门为桌面播放分发文件
- 你需要按角色做视觉区分
- 内容会在 VLC、mpv 等支持 ASS 的播放器里播放
别用 ASS,当:
- 你需要网页兼容
- 通用播放是优先项
- 简单文字显示就够了
常见问题与解决
"字幕不显示"
检查文件名。 多数播放器在字幕文件名和视频文件名完全一致(除扩展名外)时会自动识别。movie.mp4 应配 movie.srt。
检查编码。 SRT 文件通常应为 UTF-8。一些播放器对其他编码吃力,尤其非拉丁字符(中文很常踩这个坑)。
检查格式。 如果你在浏览器里播、而播放器只支持 VTT,那 SRT 文件就不工作。转换它。
"字幕不同步"
这几乎总是字幕文件本身的时间问题。字幕是为另一个版本的视频做的——帧率不同、起点不同,或剪辑有出入。
快速修法:
- 多数播放器允许你实时调整字幕时间(VLC:J/H 键)
- 用 Subtitle Edit 这类工具永久调整时间戳
- 找和你具体视频版本匹配的字幕
预防: 下字幕时,匹配你确切的视频来源/版本。
"文字变成乱码"
字符编码问题。文件大概是老编码(如 Windows-1252、GBK 或 ISO-8859-1),而播放器期望 UTF-8。
修法: 用文本编辑器打开文件,另存为 UTF-8。或用 VLC 的字幕编码选项。
"样式不生效"
如果用 SRT: SRT 不支持样式。所见即所得。
如果用 VTT: 检查你的播放器/浏览器是否真的渲染 VTT 样式。很多没完整实现规范。
如果用 ASS: 确保你的播放器支持 ASS 样式。VLC 支持。很多别的不支持或只部分支持。
格式之间转换
格式转换通常很直接:
SRT ↔ VTT: 这两种格式几乎相同。主要区别是头部和时间戳写法。很多在线工具能即时转换。
SRT/VTT → ASS: 转换容易,而且你什么都没丢,因为原文本来就没样式。
ASS → SRT/VTT: 文字会转过去,但你会丢掉所有样式、定位和特效。只有在你确实需要更简单的格式时才这么做。
工具:
- Subtitle Edit(桌面、免费、什么都能干)
- 在线转换器适合基础的 SRT ↔ VTT
- FFmpeg 能提取和转换内嵌字幕
实用结论
对多数人: 用 SRT。到处能用、易于编辑,样式通常没那么重要。
对网页开发者: 用 VTT。它是 <track> 元素期望的,并启用无障碍特性。
对带样式的外语内容: 用 ASS,但要清楚你的受众需要兼容的播放器。
最好的字幕格式,是在你的目标平台上能正确显示的那个。除非有具体理由,否则从 SRT 开始——你大概率不需要更花哨的东西。
在 OnlinePlayer 里:拖入视频时一并拖入同名字幕文件即可。它在浏览器本地配字幕、不上传;想直接在浏览器里播 MKV 这类带内嵌字幕的容器,见在浏览器里播放 MKV。