字幕格式全解:SRT / ASS / VTT / LRC 怎么选,平台兼容踩坑指南

· 约 3 分钟 💬 字幕格式转换

字幕格式问题大多不是”哪个更好”,而是”平台支持哪个”——选错格式,要么不能上传,要么样式全丢,要么中文乱码。把这四种格式的结构和使用场景搞清楚,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、本地播放器歌词显示
  • 不适合视频字幕(缺结束时间导致显示时机不准确)

平台兼容矩阵

平台 / 播放器SRTASSVTTLRC
YouTube
Bilibili 投稿
Netflix(内容方)
PotPlayer
mpv / VLC
IINA(macOS)
Emby / Jellyfin
HTML5 <track>
网易云 / QQ 音乐

编码问题:最常见的踩坑

字幕文件是纯文本,编码错误是乱码的根源。

如何判断当前编码

HEX ↔ 文本工具 看文件前几字节:

前缀字节含义
EF BB BFUTF-8 BOM
FF FEUTF-16 LE
FE FFUTF-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 字幕上传 YouTubeASS → SRT,编码 UTF-8 无 BOM
SRT 加样式用于本地播放SRT → ASS,再用 Aegisub 改样式
HTML5 网页字幕SRT → VTT(改时间分隔符 + 加 WEBVTT 头)
歌词文件做视频字幕LRC → SRT,确认每条时长合适
老字幕乱码任意格式 → 重新指定源编码 GBK → UTF-8 输出

配套工具

❓ 常见问题

SRT 转 ASS 之后样式全没了,正常吗?

正常——SRT 根本没有样式信息。SRT 只有时间戳和纯文本,转 ASS 后所有字幕都会套默认样式(白字黑边)。如果你想要特定字体大小、颜色、位置,必须在 ASS 里手动编辑 [V4+ Styles] 段落,或用 Aegisub 批量修改样式。"转换"只是格式壳的转变,样式数据源头不存在就生不出来。

YouTube 上传字幕用哪种格式?

首选 SRT,备选 VTT。YouTube 支持 SRT / VTT / SBV,不支持 ASS/SSA。上传 SRT 时注意:(1) 编码必须 UTF-8(不带 BOM);(2) 换行用 CRLF 或 LF 均可;(3) 时间格式必须是 00:00:01,500(逗号分隔毫秒),不能用点号。如果字幕上传后出现乱码,几乎都是编码问题——用工具的"目标编码"选 UTF-8 重新转一遍。

Bilibili / 爱奇艺投稿字幕格式?

Bilibili 创作中心接受 SRT,格式要求和 YouTube 类似(UTF-8、逗号毫秒分隔)。爱奇艺、优酷、腾讯视频的投稿后台各有不同,但基本都接受 SRT。ASS 一般只用于本地播放(PotPlayer / mpv / IINA 等),流媒体平台通常不支持 ASS 的高级样式——即使上传成功,样式也会被剥掉变纯文本。

播放器显示乱码但文件打开是正常中文,怎么办?

99% 是编码问题。常见三种情形:(1) 文件是 GBK/GB2312 编码,播放器按 UTF-8 解析 → 乱码;(2) 文件有 UTF-8 BOM(EF BB BF 开头),部分播放器/平台不认 BOM;(3) 文件混用了两种编码(老字幕常见)。修复路径——转换工具选"源编码 GBK → 目标编码 UTF-8",或"源 UTF-8 BOM → 目标 UTF-8"。如果不确定源编码,用 hex 查看前 3 字节:EF BB BF = UTF-8 BOM;FF FE = UTF-16 LE。

VTT 和 SRT 有什么实质区别?

VTT(WebVTT)是 SRT 的 Web 标准化版本,差异点:(1) 文件开头必须有 WEBVTT 标识行;(2) 时间分隔符用点号(00:00:01.500),SRT 用逗号;(3) 支持 CSS 类标记 <c.className>,可配合 CSS 给字幕加样式;(4) 支持 NOTE 注释行;(5) 序号是可选的(SRT 必须有)。两者正文(纯文本)互转几乎无损,只有时间分隔符和文件头需要改。

LRC 格式用在哪里,能转 SRT 吗?

LRC 是音乐歌词格式,用于网易云音乐、Apple Music、各播放器的歌词显示。格式极简——每行 [mm:ss.xx]歌词文字,没有结束时间戳(下一行开始 = 上一行结束)。LRC 转 SRT 可以做,但因为没有结束时间,转换时通常把每行显示时长固定为 3-5 秒或以下一行的开始时间为准。转出来的 SRT 用于视频字幕没问题,只是时间可能需要微调。

💬 打开 字幕格式转换 SRT/VTT/LRC/ASS 互转·GBK/Big5 乱码自动修复·整体时间偏移·样式标签清理·拖拽即转·本地处理不上传