外挂字幕最烦的不是找不到,是找到了对不上。
常见情况:片子是蓝光压制,字幕是从另一个版本扒的,两边帧率或者片头长度不一样,字幕整体往前或往后偏了十几秒。看着听着声音是这句,字幕是上句。
这事能治,而且不用一集一集手动挪。
第一招:播放器里手动偏移
最土也最快。
绝大多数播放器都有字幕延迟调整:
- PotPlayer:快捷键
[和]微调,或者按Alt拖动 - mpv:
z和x调整,Shift+Z重置 - VLC:
G和H,每按一次 50ms - Jellyfin / Emby 网页端:播放器右下角字幕菜单里有延迟滑块
适用场景:整体偏移。就是从头到尾都晚三秒,调完三秒就全对。
不适用:中途越来越偏。那种是帧率不一致,光调开头没用。
第二招:改帧率匹配
电影常见两种帧率:23.976 和 25。
从 DVD 转的经常是 25fps,从蓝光来的多是 23.976。同一个片子,用 25 的字幕去配 23.976 的片源,结尾能差几分钟。
处理办法是在播放器里做“帧率同步”,或者在字幕编辑器里按比例拉伸。
后一种更彻底。用 Aegisub 打开字幕,全选,按比例缩放时间轴,系数是 23.976/25 ≈ 0.95904。
我处理过一部老片,两小时四十分钟,原字幕按 25 做的,缩放之后从头到尾都准,误差在一秒以内。
判断是不是帧率问题:看开头差多少、结尾差多少。如果开头对得上、结尾差两分钟,一定是帧率;如果全程差固定的三秒,就是片头长度不同。
第三招:自动对齐,一劳永逸
这是我现在 90% 的情况在用的办法。
原理是把字幕的音轨和片子的音轨做声学比对,找出时间偏移,自动重写时间轴。不用手动调,也不用管是整体偏移还是帧率问题。
常用的工具两个:
alass:命令行,速度极快,一部两小时的片子几秒钟。它对整条音轨做全局对齐,能同时处理偏移和拉伸。用法大概是给它视频文件、字幕文件、输出文件三个参数,跑完就有一个新字幕。
ffsubsync:Python 写的,也是声学对齐,稍微慢一点,但对质量差的字幕容错更好。它对 ASS 格式的支持比 alass 好一些。
两个我都用,一般先用 alass,跑完抽几个时间点检查,不行再换 ffsubsync。
实测下来的效果:偏移在十秒以内的,基本一次成功;偏移太大或者字幕本身是另一部片子的,会失败——这种情况工具也无能为力,得重新找字幕。
注意:图形字幕(PGS、sup)没法这样处理,它是图片,没有可编辑的时间轴。要么找文本字幕,要么用 OCR 转出来,转出来错字很多,不如重找。
乱码是另一个坑
打开字幕一片问号或者方块,是编码问题。
老字幕很多是 GBK 或者 GB18030,新播放器默认按 UTF-8 读,就乱。
处理办法:用文本编辑器另存为 UTF-8。批量处理的话,一条命令能转一个目录。
转完记得检查一遍特殊字符——有些老字幕里的「」『』在转换后会变成乱码,需要手动修。
ASS 字幕的特效别乱转
很多字幕组做的是 ASS,带样式、定位、特效。转成 SRT 会把这些全丢掉,字幕会从屏幕顶部跳到底部,斜体没了,颜色没了。
如果不是必须,别转格式。现在的播放器、Jellyfin、Emby 都直接支持 ASS。
真需要转的时候,用 ffmpeg 保留基础样式,或者干脆接受损失——总比看不了强。
我的流程
拿到片子,先去字幕站按「片名 + 年份 + 分辨率版本」搜,优先选和片源同一版本的。
搜到之后不急着看,先跑一遍 alass。
跑完播开头三分钟、中间一场、结尾三分钟,三个点都对得上就直接用。
对不上再判断是帧率问题还是字幕本身错版,前者改帧率,后者重找。
一集剧大概两分钟处理完,一部剧一季二十集,半小时能全部搞定,比一集一集手动挪快得多。
你们有没有更好的对齐工具?我这两个用久了想换换。