字幕格式问题大多不是”哪个更好”,而是”平台支持哪个”——选错格式,要么不能上传,要么样式全丢,要么中文乱码。把这四种格式的结构和使用场景搞清楚,90% 的踩坑都能避开。
四种格式速览
SRT — 最通用的纯文本字幕
1
00:00:01,500 --> 00:00:04,200
第一句字幕
2
00:00:05,000 --> 00:00:07,800
第二句字幕
结构:序号 + 时间范围 + 文本 + 空行,循环。
- 时间格式:
时:分:秒,毫秒,逗号分隔毫秒(常见错误:用点号) - 不支持样式(部分播放器识别
<b>、<i>标签但不标准) - 几乎所有平台和播放器都支持
- 首选格式:不确定用哪个,选 SRT
ASS/SSA — 功能最强的本地字幕
[Script Info]
ScriptType: v4.00+
[V4+ Styles]
Format: Name, Fontname, Fontsize, ...
Style: Default,Arial,20,&H00FFFFFF,...
[Events]
Format: Layer, Start, End, Style, Name, ...
Dialogue: 0,0:00:01.50,0:00:04.20,Default,,0,0,0,,第一句字幕
- 支持字体、颜色、描边、阴影、位置、动画、卡拉 OK 效果
- 时间格式:
h:mm:ss.cs(百分之一秒) - 用途:本地播放器(PotPlayer、mpv、IINA)、动漫压制内嵌字幕
- 流媒体平台不支持 ASS 样式,上传会被降级为纯文本
VTT — Web 标准字幕
WEBVTT
1
00:00:01.500 --> 00:00:04.200
第一句字幕
2
00:00:05.000 --> 00:00:07.800 align:right
第二句字幕
- 首行必须是
WEBVTT - 时间分隔符用点号(不是逗号)
- 支持 CSS 类、对齐方向、位置
- 用途:HTML5
<video>的<track>标签、YouTube、Netflix
LRC — 音乐歌词
[ti:歌曲名]
[ar:歌手]
[00:01.50]第一句歌词
[00:05.00]第二句歌词
- 每行只有开始时间,无结束时间
- 用途:网易云、QQ 音乐、Apple Music、本地播放器歌词显示
- 不适合视频字幕(缺结束时间导致显示时机不准确)
平台兼容矩阵
| 平台 / 播放器 | SRT | ASS | VTT | LRC |
|---|---|---|---|---|
| YouTube | ✅ | ❌ | ✅ | ❌ |
| Bilibili 投稿 | ✅ | ❌ | ❌ | ❌ |
| Netflix(内容方) | ✅ | ❌ | ✅ | ❌ |
| PotPlayer | ✅ | ✅ | ✅ | ✅ |
| mpv / VLC | ✅ | ✅ | ✅ | ✅ |
| IINA(macOS) | ✅ | ✅ | ✅ | ❌ |
| Emby / Jellyfin | ✅ | ✅ | ✅ | ❌ |
HTML5 <track> | ✅ | ❌ | ✅ | ❌ |
| 网易云 / QQ 音乐 | ❌ | ❌ | ❌ | ✅ |
编码问题:最常见的踩坑
字幕文件是纯文本,编码错误是乱码的根源。
如何判断当前编码:
用 HEX ↔ 文本工具 看文件前几字节:
| 前缀字节 | 含义 |
|---|---|
EF BB BF | UTF-8 BOM |
FF FE | UTF-16 LE |
FE FF | UTF-16 BE |
| 无特殊前缀 | UTF-8(无 BOM)或 GBK,看中文字节判断 |
各平台要求:
- YouTube / Bilibili:UTF-8 无 BOM
- 老版 Windows 播放器:可能需要 GBK(但现代播放器都支持 UTF-8)
- HTML5
<track>:UTF-8
最安全做法:统一转 UTF-8 无 BOM。转换工具选”目标编码 UTF-8”,勾掉”添加 BOM”选项。
时间轴偏移:转换时常见的第二个坑
ASS 的时间精度是百分之一秒(h:mm:ss.cs),SRT 是毫秒(hh:mm:ss,ms)。
ASS → SRT 转换时,0:00:01.50 变成 00:00:01,500——直接乘 10,精度有损失(百分之一秒 vs 千分之一秒),但对人眼完全无感。
更常见的问题是整体时间轴偏移:字幕比视频早 2 秒或晚 3 秒。这不是格式转换的问题,而是字幕制作者用的视频和你播的视频版本不同(剪辑版 vs 完整版)。转换工具的”时间偏移”输入框可以整体加减毫秒,+2000 = 整体延后 2 秒。
转换建议
| 需求 | 推荐路径 |
|---|---|
| 本地 ASS 字幕上传 YouTube | ASS → SRT,编码 UTF-8 无 BOM |
| SRT 加样式用于本地播放 | SRT → ASS,再用 Aegisub 改样式 |
| HTML5 网页字幕 | SRT → VTT(改时间分隔符 + 加 WEBVTT 头) |
| 歌词文件做视频字幕 | LRC → SRT,确认每条时长合适 |
| 老字幕乱码 | 任意格式 → 重新指定源编码 GBK → UTF-8 输出 |