记录一下那天晚上的排查过程。用 whisperx 3.3 做会议转写,转写文本与音频完全对得上,但每个词的时间戳都比实际晚了将近两秒,字幕播放时总是慢半拍,换 large-v3 也一样。

刚开始盯着「转写与对齐用了两次不同的解码,片段边界不一致」,折腾了半个多小时,排掉了。

把日志和配置对完,能解释这个现象的基本就这几处。对齐模型用的语言与音频不一致,强制对齐结果漂移。少数情况下是音频前面有几秒静音,VAD 裁掉了但没回填偏移。

还有一种情况,采样率不是 16k,时间轴按错的比例换算。

动手时先确认音频采样率与时长

ffprobe -v error -show_entries format=duration -show_entries stream=sample_rate -of default=nw=1 meet.wav

显式指定语言再对齐

python -c "import whisperx;m,a=whisperx.load_model('large-v3',device='cuda');print(a['language'])"

然后检查 VAD 裁掉的起始静音长度

python -c "import whisperx;print(whisperx.load_align_model(language_code='zh',device='cuda')[0] is not None)"

等前面都确认过,再把偏移量统一加回词级时间戳

python -c "print({'shift_seconds':1.96})"

别只看报错消失,验证要多做一步。字幕与语音逐句对齐,随机抽十句的起始偏差小于 200ms,第一句不再提前出现。

提醒一点。对齐结果依赖语言与采样率两个前提,偏固定值时优先怀疑起始静音被裁掉,而不是模型不准。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189