【实践记录】faster-whisper WhisperModel vs BatchedInferencePipeline 性能对比
测试环境
| 项目 | 配置 |
|---|---|
| 操作系统 | Windows 11 Pro 10.0.26200 |
| CPU | 13th Gen Intel Core i5-13500H |
| GPU | NVIDIA GeForce RTX 4050 Laptop GPU (6 GB) |
| Python | miniconda3 |
| faster-whisper | 1.1.1 |
| CTranslate2 | 4.6.0 |
测试音频
- 来源:小宇宙播客《自我进化论》No.73 — 袁师懋道长访谈
- 时长:98.4 分钟(5902.54s)
- 文件大小:181 MB(m4a 格式)
- 语言:中文
性能对比
| 指标 | WhisperModel | BatchedInferencePipeline |
|---|---|---|
| 模型加载 | 5.20s | 3.80s |
| 转录时间 | 280.70s (4.7min) | 149.31s (2.5min) |
| 总耗时 | 288.52s | 156.35s |
| RTF(实时因子) | 0.048x | 0.025x |
| 实时倍速 | 21.0x | 39.5x |
| Segment 数量 | 3877 | 199 |
| Word 级时间戳数 | 19,078 | 17,144 |
| 文本总字符数 | 23,030 | 23,040 |
| VAD | 关闭 | 开启(min_silence=500ms) |
| Pipeline 特点 | 逐 segment 顺序处理 | 批量并行处理 + VAD 预分段 |
分析
速度:BatchedInferencePipeline 快 1.88 倍(149s vs 281s),得益于 VAD 预分段和批量推理。
Segment 粒度:WhisperModel 产生 3877 个 segments,BatchedInferencePipeline 仅 199 个,比例约 19.5
。原因是 VAD 将语音合并为较大的连续块,而 WhisperModel 每个 Whisper 内部分段都作为独立 segment。文本质量:两者字符数几乎一致(23,030 vs 23,040),转录内容基本相同。但 WhisperModel 提供更细粒度的 word-level 时间戳(19,078 vs 17,144),对字幕对齐更友好。
转录完整性对比
用 30 秒为一个时间桶,统计两种 Pipeline 在音频各时段的覆盖情况:
| 指标 | WhisperModel | BatchedPipeline |
|---|---|---|
| 时间覆盖率 | 100.0% (197/197 桶) | 94.9% (187/197 桶) |
| 尾部覆盖 | 覆盖到音频末尾 (5902.5s) | 到 5639.8s 止,缺失最后 262.8s (4.5%) |
| 语音时长占比 | 4530.8s (76.8%) | 5139.5s (87.1%) |
| >2s 空白间隔数 | 63 个 | 36 个 |
| Segment 重叠 | 0 | 0 |
关键发现:
BatchedPipeline 丢失了最后约 4.5 分钟内容(93-98 分钟区间)。VAD 在音频尾部判定为静音而跳过了实际存在的语音。此外 1.5-2.0 分钟区间也有一个遗漏桶。而 WhisperModel 的尾部覆盖完整,连片尾”字幕志愿者 杨茜”这类极短语音都成功捕获。
BatchedPipeline 的 segment 更粗(平均 25.8s vs 1.2s),语音时长占比更高(87.1% vs 76.8%),但这是 VAD 合并效应——将多个短句合并为一个大块——不等于实际内容更多。
两者总字数几乎一致(23,030 vs 23,040),说明 BatchedPipeline 在覆盖区域内转录质量相当,问题仅在于边缘遗漏。
BatchedPipeline 独占覆盖为 0——所有它覆盖的区域 WhisperModel 也覆盖了,但 WhisperModel 额外覆盖了 10 个桶。
词级时间戳质量对比
| 指标 | WhisperModel | BatchedPipeline |
|---|---|---|
| 词总数 | 19,078 | 17,144 |
| 词平均时长 | 233ms | 223ms |
| 词平均间隔 | 6ms | 78ms |
| 词间大间隔 (>500ms) | 60 | 922 |
| 零时长词 | 115 (0.6%) | 132 (0.8%) |
| 每 segment 词数 | avg 4.9 | avg 86.2 |
词间间隔分布:
| 间隔范围 | WhisperModel | BatchedPipeline |
|---|---|---|
| 0ms(紧邻) | 98.4% | 84.9% |
| 1-200ms | 0.6% | 6.0% |
| 201-500ms | 0.6% | 3.6% |
| 501-1000ms | 0.3% | 3.4% |
| 1-5s | 0.1% | 2.1% |
分析:
WhisperModel 的词级时间戳紧凑且连续——98.4% 的相邻词间隔为 0ms,词间大间隔(>500ms)仅 60 处。这意味着词与词之间几乎没有时间空隙,时间轴非常平滑。
BatchedPipeline 则有 922 处词间大间隔(>500ms),且 2.1% 的间隔超过 1 秒。实际查看这些大间隔,它们出现在句子之间的自然停顿处,但被归入了同一个 segment 内。例如某个 segment 中,“动物”和”不喜欢”之间出现了 3.5 秒的空隙——这在字幕场景中会导致一句话已经说完,但字幕仍停留在屏幕上。
实际影响:对于字幕生成(SRT/ASS),WhisperModel 的词级时间戳可以直接用于逐词卡拉 OK 效果或精确的换行控制。BatchedPipeline 的时间戳在一个长 segment 内会出现多次大跳跃,无法直接用于精细的字幕同步。
选型建议
| 场景 | 推荐 Pipeline | 原因 |
|---|---|---|
| 生成字幕文件(SRT/ASS) | WhisperModel | 更细粒度的 segment,字幕时间轴更精确 |
| 快速获取转录文本 | BatchedInferencePipeline | 快 1.88 倍,文本质量相同 |
| 短视频高光裁切 | BatchedInferencePipeline | 速度快,VAD 分段足够定位片段 |
| 长音频逐句分析 | WhisperModel | 每个句子独立 segment,便于后续处理 |
| 长音频完整转录 | WhisperModel | 100% 覆盖,BatchedPipeline 可能丢失尾部内容 |