字幕格式全解:SRT / ASS / VTT / LRC 怎么选,平台兼容踩坑指南
字幕格式问题大多不是”哪个更好”,而是”平台支持哪个”——选错格式,要么不能上传,要么样式全丢,要么中文乱码。把这四种格式的结构和使用场景搞清楚,90% 的踩坑都能避开。
四种格式速览
SRT — 最通用的纯文本字幕
1
00:00:01,500 --> 00:00:04,200
第一句字幕
2
00:00:05,000 --> 00:00:07,800
第二句字幕
结构:序号 + 时间范围 + 文本 + 空行,循环。
时间格式:时:分:秒,毫秒,逗号分隔毫秒(常见错误:用点号)
不支持样式(部分播放器识别 、 标签但不标准)
几乎所有平台和播放器都支持
首选格式:不确定用哪个,选 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
LRC — 音乐歌词
[ti:歌曲名]
[ar:歌手]
[00:01.50]第一句歌词
[00:05.00]第二句歌词
每行只有开始时间,无结束时间
用途:网易云、QQ 音乐、Apple Music、本地播放器歌词显示
不适合视频字幕(缺结束时间导致显示时机不准确)
平台兼容矩阵
平台 / 播放器SRTASSVTTLRCYouTube✅❌✅❌Bilibili 投稿✅❌❌❌Netflix(内容方)✅❌✅❌PotPlayer✅✅✅✅mpv / VLC✅✅✅✅IINA(macOS)✅✅✅❌Emby / Jellyfin✅✅✅❌HTML5
编码问题:最常见的踩坑
字幕文件是纯文本,编码错误是乱码的根源。
如何判断当前编码:
用 HEX ↔ 文本工具 看文件前几字节:
前缀字节含义EF BB BFUTF-8 BOMFF FEUTF-16 LEFE FFUTF-16 BE无特殊前缀UTF-8(无 BOM)或 GBK,看中文字节判断
各平台要求:
YouTube / Bilibili:UTF-8 无 BOM
老版 Windows 播放器:可能需要 GBK(但现代播放器都支持 UTF-8)
HTML5
最安全做法:统一转 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 字幕上传 YouTubeASS → SRT,编码 UTF-8 无 BOMSRT 加样式用于本地播放SRT → ASS,再用 Aegisub 改样式HTML5 网页字幕SRT → VTT(改时间分隔符 + 加 WEBVTT 头)歌词文件做视频字幕LRC → SRT,确认每条时长合适老字幕乱码任意格式 → 重新指定源编码 GBK → UTF-8 输出
配套工具
HEX ↔ 文本 — 查看字幕文件的编码前缀字节
文本对比 — 对比转换前后是否有内容丢失
文件批量重命名 — 批量给字幕文件加语言后缀(.zh.srt、.en.srt)