问题出现得很突然,日志倒是留得挺全。转写两小时的会议录音,前半段字幕对得上,后半段字幕比语音晚了好几秒,越到后面越明显。

刚开始盯着「音频采样率不统一,解码时长有偏差」,折腾了半个多小时,排掉了。

真正麻烦的地方在于,几个原因的现象几乎一样。长音频被切成多段后各自计时,累积误差。少数情况下是没有开启词级时间戳做对齐。

另外,静音段被压缩,时间轴与原始音频错位。

第一件事是开启词级时间戳再生成字幕

whisper long.mp3 --model medium --language zh --word_timestamps True --output_format srt

随后统一重采样到十六千赫兹

ffmpeg -i long.mp3 -ar 16000 -ac 1 norm.wav

然后按静音切分后逐段转写并校正偏移

python -c "print('split by silence, offset each chunk')"

剩下的就是抽查首尾两段字幕时间是否对齐

python -c "print(subs[0]['start'], subs[-1]['end'])"

怎么算真的好了,看的是同一批现象。字幕与语音基本同步,两小时音频末端误差在一秒以内,播放时不再明显滞后。

这里还有个坑。先切分再转写会丢掉全局时间基准,必须记录每段在原始音频中的起点并加回去,否则误差会一直累积。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189