test short audio file with silence between sentence, word timestamp may not be accurate

当短音频中句与句之间存在较长静音、同时启用 VAD 与 word timestamp 时,faster-whisper 的词级时间戳可能偏移,这是 Whisper 词时间戳本身不够精确叠加 VAD 分块拼接导致的典型现象,优先排查 VAD 参数与分块逻辑,而不是节点或推理错误。

快速结论:当短音频中句与句之间存在较长静音、同时启用 VAD 与 word timestamp 时,faster-whisper 的词级时间戳可能偏移,这是 Whisper 词时间戳本身不够精确叠加 VAD 分块拼接导致的典型现象,优先排查 VAD 参数与分块逻辑,而不是节点或推理错误。

适用环境:Faster Whisper master 分支(commit e9a082dcf27647eb52585cda6f115454c0ac6856),测试音频为中文短句 MP3(句间静音 > 2s),启用了 vad_filter 和 word timestamp。Issue 未提供操作系统、Python、CUDA、显卡和依赖版本信息。

最快修复方案:暂无确认的一步修复方案。Issue 中未给出已被验证的修复提交,讨论停留在原因确认与方案探讨阶段。

注意事项:openai/whisper 不启用 VAD 时也有同样的词时间戳误差,说明问题不完全是 faster-whisper 独有;调整 speech_pad_ms、window_size_samples 等 VAD 参数只能改变偏移量,不能从根本上让词时间戳精确对齐。stable-ts 的方案在测试中时间戳更准,但作者并未确认会合并该实现。

问题场景

用户使用 Faster Whisper(master 分支)转写一段中文短音频,音频中句子之间存在超过 2 秒的静音。在同时开启 VAD 过滤器(vad_filter)和词级时间戳(word_timestamp)后,输出的每个词的开始和结束时间无法正确对应到音频里的实际发音位置。用户分别测试了不同的 VAD 参数组合,包括调整 speech_pad_ms(200/300)、window_size_samples(1024/1536),时间戳结果均出现偏差。

报错原文

test short audio file with silence between sentence, word timestamp may not be accurate

When VAD is applied, the remaining chunks are merged together to form a new audio input. So we still rely on the word timestamps returned by Whisper which are not perfectly accurate. For example here are the word timestamps without VAD:

[3.86s -> 7.58s] 今天
[7.58s -> 7.74s] 不是
[7.74s -> 11.30s] 好
[11.30s -> 11.64s] 天
[11.64s -> 12.08s] 气。

(Note that openai/whisper has the same result.)

原因分析

维护者给出的解释是:启用 VAD 后,被判定为语音的各个音频块会被合并成一个新的音频输入再交给 Whisper 转写,因此词级时间戳仍然依赖 Whisper 自身返回的结果,而 Whisper 的词时间戳并不完全准确。即使不启用 VAD,同样存在偏差,openai/whisper 也会得到相同结果,说明这是模型层面的时间戳精度问题,而不是 VAD 单独引入的 bug。VAD 分块再拼接的过程会把原本的静音间隔“压缩”掉,当词跨越这些被处理过的间隔时,时间戳就会与实际音频位置错位。

维护者还提到,其第一版 VAD 实现是对每个音频块单独转写,时间戳准确度更好,但效率与转写质量会下降,因此改成了当前合并转写的方案。用户提出的 stable-ts 方案在测试中词时间戳更准,但 Issue 中并未确认 faster-whisper 会采用该实现。

环境排查

  • 确认使用的 Faster Whisper 分支与提交版本,是否为 master(如 e9a082dcf27647eb52585cda6f115454c0ac6856)。
  • 确认是否同时开启了 vad_filter 与 word_timestamp。
  • 检查 VAD 参数:min_silence_duration、threshold、min_speech_duration、window_size_samples、speech_pad_ms 的当前取值。
  • 核对音频中句子间的静音时长是否超过 2 秒。
  • Issue 未提供操作系统、Python、CUDA、PyTorch、显卡等信息,无法据此进一步判断。

解决步骤

  1. 先用不启用 VAD 的同一份音频转写一次,观察词时间戳是否仍然错位。Issue 中的对照结果显示不启用 VAD 也会偏,可用于区分问题来源。
  2. 如果必须在启用 VAD 的场景下工作,可优先尝试调整 VAD 参数(如 speech_pad_ms、window_size_samples、min_silence_duration),观察时间戳偏移量是否随之变化。Issue 中测试了多组参数,偏移会变但不会完全消除。
  3. 如果对词级时间戳准确性要求高,可评估参照 stable-ts 的处理方式,或在转写后对时间戳做二次对齐。用户反馈其在测试中结果更准。
  4. 向项目跟踪是否有针对 VAD 分块时间戳处理的改进提交;本 Issue 讨论中未给出已验证的代码修复。

验证方法

用同一段句间静音大于 2 秒的音频分别在不启用 VAD 和启用 VAD 的情况下转写,对照每个词的起止时间与音频波形中实际发音位置。若启用 VAD 后时间戳仍然偏移,且偏移量随 VAD 参数变化,即可确认问题属于本文描述的分块拼接与 Whisper 词时间戳精度问题,而非环境或依赖安装错误。

参考来源

SYSTRAN/faster-whisper #120 — test short audio file with silence between sentence, word timestamp may not be accurate

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 29177

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注