字幕按音频对轴
首次运行会下载视频引擎 —— 约 31 MB,由本站提供,之后浏览器会缓存。它只用来读取音轨;字幕是直接与声音本身匹配的,不用语音模型,也不上传任何内容。
选项
字幕可能偏离正确位置多远,两个方向都算。这是成本与风险的设置,不是精度设置:范围越宽能找到越大的漂移,但搜索也有更多机会停在一个碰巧分数很高的巧合上。超过大约一分钟的偏移通常不是片头裁剪或台标造成的 —— 那么大的偏差往往意味着影片是另一个剪辑版,或者帧率不匹配,这些这一页另有办法处理。选能覆盖你猜测的最小范围。
这一页修的是顺序没错、时间不对的字幕。你给它两样东西——字幕文件,以及它所属的视频或音频——它算出文字漂了多远,然后把每条 cue 移动之后重新写出一份文件。几秒的漂移通常来自片头裁剪或台标;随时间越拉越大的漂移则来自帧率不匹配,例如 23.976 fps 的母版配上了按 25 fps 计时的字幕,误差会一路累积下去。
测量来自音频本身。页面抽出一条单声道音轨,把它折成二十毫秒一帧的响度,标出哪些帧里有语音。然后反复问同一个问题:在这个偏移和这个速度变化下,字幕文字有多少落在语音上,而不是落在静音上?答案按 cue 打分再取平均,胜出的那一组参数会被应用。全程不做语音识别,所以它几秒就能跑完,也能在字幕语言与音频语言不同、没有对应模型时工作。
因为分数是测量而不是保证,页面被设计成在测量很弱时什么都不做。少于 5 条字幕、音轨里检测不到语音、最佳分数仍然把大部分字幕时间放在静音上,或者两组差异很大的对齐得分差不到 0.05 的置信度阈值——每一种情况都会以一份报告结束,而不写出新的字幕文件。安静的失败远好过自信的失败:被推偏五秒的字幕只是难看,被一个声称成功的工具推偏五秒的字幕则很难发现、也很难解释。
对齐结果可靠时会得到两份文件,因为它们回答不同的问题。修正后的字幕保持原来的格式,命名为 film.synced.srt 或对应的扩展名,可以直接播放。报告是一份小文本文件(film.sync.txt),写明偏移的毫秒数、实际应用的比例、分数、置信度,以及一行说明文件到底有没有被改动。两份来自同一次运行,所以批量处理一整季剧集时,每一集都会得到配对的一对产物。
工作在本地完成。音频由编译成 WebAssembly 的 ffmpeg 解码,引擎从本站下载一次后缓存;字幕在标签页里解析。关于你的影片和字幕,没有任何内容被发送出去——没有需要跳过的上传步骤,这对不允许离开本机的素材很重要。
常见问题
字幕按音频对轴量出的偏移,和我自己填进平移页的数字有什么不同?
平移页应用的是你已经知道的数字,所以无论音频同不同意,结果都照做。这一页从相反的一端开始:它假定你不知道这个数字,从音频里读出语音活动,再把偏移和速度变化一起解出来。这也是它能修帧率问题的原因——任何单一偏移都表达不了那种错位:25 与 23.976 之间,片头误差为零、越到后面越大,修好开头的平移会把结尾弄得更糟。
为什么字幕按音频对轴有时干脆不写新的字幕文件?
因为错误的修正比缺失的修正更难察觉。搜索会报告四件事:有多少条字幕可用、音轨里有没有语音、字幕时间有多大比例落在语音上、胜出的方案比另一个真正不同的方案好多少。其中任何一项太弱,这次运行就只产出报告,状态行写着 not-found 和原因。你不会损失什么——原文件没被动过——而且先拿到一个数字,再决定要不要手工处理。
报告里的比例对 23.976 与 25 fps 的错配意味着什么?
字幕时间先乘以比例,再按偏移平移,所以比例 1.0427 表示字幕是按更快的帧基准计时的,每条都要往后拉。页面会同时试每一组常见帧率比的两个方向,因为朝哪边读取决于你手里是哪一份文件:1.0427 和 0.9590 是同一个错配的两端。如果报告的比例是 1.000000、偏移不到一帧,说明文件本来就对得上,不会被改动。
修正后的文件会保留我的样式,还是只留时间轴?
只改时间,其余不动。字幕被解析进本站所有页面共用的那套内部表示,每条 cue 的起止被重写,再序列化回它进来的格式。ASS 的样式、定位和行内标签都会保留;文件自身的结构也会保留,所以 .ass 进、.ass 出,而不会压平成 .srt。唯一可见的例外是被大比例压到不足一毫秒的 cue,它会被保持在 1 毫秒,并计入有损列表。
字幕语言和音频语言不一致时,对轴还能工作吗?
能,这正是量响度而不是识别词的意义。语音活动是一种形状——一句话是一段能量爆发加一段空隙——无论说的是德语还是西班牙语,这个形状都一样。德语配音配西班牙语字幕,和一对同语言的文件对齐得一样好。它做不到的是分辨配音与原声,所以如果配音里插入了额外对白,整体对齐仍然找得到,但插入段落里的个别字幕可能落在错误的行上。
字幕按音频对轴跑到一半能取消吗?
能,取消会在下一个步骤之前生效。解封装与解码由 ffmpeg 完成,正在跑的那一步无法从中间打断;页面在抽取音频、计算语音掩码、写文件的每一步之间检查取消信号,所以不会再继续产出。没有写完的产物不会作为下载提供,原字幕也不会被改动。