跳到正文
快播盒子local media bench

HANDBOOK 02

快播盒子字幕手册:从乱码到时间轴对齐

字幕的问题几乎都落在三类里:打不开、看着是乱的、对不上。三类的解法完全不同。

srt 与 vtt 的真实差别

两种格式的结构很像,差别集中在表现能力和使用场景上。

对比项SubRip(.srt)WebVTT(.vtt)
文件头没有,直接从第一条开始必须以 WEBVTT 开头
毫秒分隔符逗号 00:01:02,500点号 00:01:02.500
编号行习惯上有,实际可省可选,可以写成任意标识
定位与样式基本没有,少数播放器认标签支持位置、对齐、行号等参数
网页原生支持不支持,必须转换原生支持,直接挂 track
编码要求没有规定,历史上大量 GBK 文件规范要求 UTF-8

所以「srt 在网页里播不出来」不是 srt 坏了,是浏览器只认 vtt。转换是机械的:换分隔符、加文件头,时间与文本一个字都不用动。字幕工坊做的就是这件事,反过来转也行。

乱码:几乎只有一个原因

字幕文件里存的是字节,不是字。解读这些字节要用一张编码表。文件是用 GBK 存的,播放器却按 UTF-8 去读,出来就是一堆方块、问号或者奇怪的拉丁字母。反过来也一样。

本站的字幕工坊按 UTF-8 读文件,读出乱码就让你看见乱码,不替你猜编码。猜错编码写出来的文件会把错误固化进去,比当场看见乱码糟得多。

对不上:先分清是哪一种对不上

时间轴对照图:整体偏移时每条字幕错开同样距离,帧率不一致时偏差越往后越大
整体错开同样多,能救;越走越偏,整体偏移救不了。

情况一:整体差一个固定值

开头差两秒,结尾也差两秒。这是最常见的,原因通常是片源前面多了或少了一段片头。做法:记下差多少,到字幕工坊填毫秒数。字幕比画面早就填正数往后推,晚就填负数。差两秒就是 2000 或 -2000。

情况二:越往后差越多

开头能对上,半小时以后差出十几秒。这是帧率不一致:字幕是按 23.976 fps 的版本做的,片源是 25 fps,或者反过来。整体偏移对这种情况无效,因为误差是按比例累积的,不是固定值。能做的是换一份与片源帧率相符的字幕。

情况三:某几段对不上,其余正常

片源被剪过,或者字幕来自另一个剪辑版本。这种只能分段处理,工作量和收益往往不成正比。

双语字幕怎么排

双语字幕的本质就是一条字幕里有两行文本。排法上有几个经验:

合并本身是文本操作,本站的字幕工坊不做自动合并——两份字幕条数不一致时,自动合并几乎一定出错,不如手工来。工坊负责的是格式转换与整体偏移这两件机械的事。

拿示例字幕练一遍

到字幕工坊点「载入示例字幕」,会拿到示例短片那份 .srt,12 条。试着转成 vtt,看看文件头和分隔符的变化;再填 -2000 偏移一次,观察前面几条被截到零的提示。想看字幕原文对照,文字稿那一页逐条列着。