双语字幕文件怎么做?SRT、VTT、ASS 三种格式对比

双语字幕的难点不是"翻译"——翻译有工具。真正卡住人的是:翻完之后,两行字怎么塞进一个字幕文件里

双语字幕有两种做法:单文件双行(一条字幕写两行文本)和双轨(原文、译文各一条轨,可分别开关)。双轨适合自己本地看片;要交付给平台或客户,用单文件双行——很多平台只接收一条轨,用户不开就什么都看不到。下面说的都是单文件双行的写法。

SRT:兼容性最好,但没有样式

SRT 的双语就是两行文本,顺序即排版:

1
00:00:01,000 --> 00:00:03,000
我们今天聊三个问题
We'll cover three things today

两行属于同一个条目,共享同一段时间轴,中间不能空行——空行会被解析成"下一条字幕开始了"。另外 SRT 不支持任何行内样式,两行的字号、颜色、位置完全一致。

这意味着在 SRT 里,顺序是你唯一的排版手段:放上面那行,观众就会先读到它。

适用:YouTube 上传 CC、绝大多数平台的字幕导入、交付给客户。

VTT:能加样式,平台支持参差不齐

VTT(WebVTT)的文件头必须有 WEBVTT 一行,时间戳的毫秒用点号分隔(00:00:01.000)——SRT 用的是逗号,这是两者最直观的区别。双语同样是两行,但可以用类名标记:

WEBVTT

1
00:00:01.000 --> 00:00:03.000
<c.cn>我们今天聊三个问题</c>
<c.en>We'll cover three things today</c>

配合 CSS 的 ::cue 规则,或者用 cue 定位参数(linepositionalign)把两行分开放置,表现力比 SRT 强不少。

适用:网页播放器、HLS 流媒体。注意:本地播放器和部分平台对 VTT 的支持不如 SRT 普及,"能导入"之后显示成什么样,各家差别很大。

ASS / SSA:双语排版最强,基本只用于压制

ASS 是唯一能给两行分别设样式的格式:给中文和英文各定义一个样式(字号、字体、颜色、描边、边距),再在事件区里同一个时间点写两条记录。

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.00,0:00:02.50,CN,,0,0,0,,我们今天聊三个问题
Dialogue: 0,0:00:01.00,0:00:02.50,EN,,0,0,0,,We'll cover three things today

两行指向不同样式,中文大一点、英文小一点,位置也能精确控制——SRT 和 VTT 都做不到。

代价:ASS 主要服务于本地播放和压制硬字幕,多数在线平台不接受它作为上传字幕;它的时间格式是 时:分:秒.百分秒(两位),和 SRT、VTT 都不同。

上下行顺序:没有标准答案,但要一致

读者视线自上而下,上一行会被先读到,顺序决定了优先级。

你的观众构成 建议顺序 理由
海外为主(TikTok、Reels、Shorts) 译文在上、原文在下 目标观众先读到能看懂的那行
国内为主,顺带出海 原文在上、译文在下 不改变原有观众的观看习惯
双语教学、语言学习 原文在上、译文在下 学习者先看原文,再对照译文

比"哪种更对"更重要的是整条视频保持一致,中途换顺序,观众会不断重新定位。另外双语时每条只有两行空间,没有余量给折行,常见规范建议中文每行不超过 16 字、英文不超过 42 字符,更要提前压缩译文。

用工具直接生成双语 SRT

手动拼行很容易出错——空行漏了、时间轴复制错位、条目数对不上。用 双语 SRT 生成工具 可以跳过这些环节:上传原文 SRT,工具解析时间轴、翻译文本,按"原文 + 译文"上下排布组装,直接下载双语 SRT。免费、免登录,限制是单文件不超过 1MB、不超过 500 条字幕,每个工具每个 IP 每天 3 次。

如果你手上还没有 SRT,SmileSub 的主流程可以从视频直接开始:上传视频 → 自动识别语音 → 翻译 → 把双语字幕烧录进画面 → 下载成片,支持中、英、日、韩四语互译。成片之外再留一份字幕文件,还能顺手用于 YouTube 的 CC 轨。

常见问题

为什么我做的双语字幕在播放器里只显示一行?

通常是两行之间误加了空行——第二行被解析成新条目,而它没有自己的时间轴,于是一起被丢弃。检查条目数是否还等于原来的条目数,就能定位。

SRT 能不能让两行的字号不一样?

不能。SRT 没有样式层,两行完全一致。要让中英文有不同字号或颜色,只能用 ASS,或者把字幕烧录进画面,在渲染时分别设置。

VTT 和 SRT 的毫秒分隔符一样吗?

不一样,这是最容易写错的地方:SRT 用逗号00:00:01,000),VTT 用点号00:00:01.000)。把 SRT 直接改后缀成 .vtt 通常无法被解析,因为文件头也缺 WEBVTT 这一行。