For the complete documentation index, see llms.txt. This page is also available as Markdown.

带说话人分离的 WhisperX

在 Clore.ai GPU 上运行 WhisperX,实现带词级时间戳和说话人分离的快速语音转录。

WhisperX 为 OpenAI 的 Whisper 增加了三项关键升级: 词级时间戳 通过强制音素对齐, 说话人分离 使用 pyannote.audio,以及 最高可达 70× 实时速度 通过使用 faster-whisper 进行批量推理实现。它是生产级转录流水线中需要精确时间和说话人识别的首选工具。

GitHub: m-bain/whisperX PyPI: whisperx 许可证: BSD-4-Clause 论文: arxiv.org/abs/2303.00747

主要特性

  • 词级时间戳 — 通过 wav2vec2 强制对齐实现 ±50 毫秒精度(而原版 Whisper 为 ±500 毫秒)

  • 说话人分离 — 通过 pyannote.audio 3.1 识别谁说了什么

  • 批量推理 — 在 RTX 4090 上最高可达 70× 实时速度

  • VAD 预过滤 — Silero VAD 在转录前去除静音

  • 所有 Whisper 模型 — 从 tiny 到 large-v3-turbo

  • 多种输出格式 — JSON、SRT、VTT、TXT、TSV

  • 自动语言检测 — 或强制指定特定语言以加快处理

需求

组件
最低
推荐

GPU

RTX 3060 12 GB

RTX 4090 24 GB

显存

4 GB(小型模型)

10 GB+(large-v3-turbo)

内存

8 GB

16 GB+

磁盘

5 GB

20 GB(模型缓存)

Python

3.9+

3.11

CUDA

12.8+

12.8+

需要 HuggingFace 令牌 用于说话人分离 — 请在以下位置接受许可协议 pyannote/speaker-diarization-3.1.

Clore.ai 推荐: RTX 3090(0.07–0.21 美元/小时)适用于 batch size 为 16 的 large-v3-turbo 模型。RTX 4090(0.14–0.42 美元/小时)适用于 batch size 为 32 时的最大吞吐量。

安装

如果遇到 CUDA 版本冲突:

快速开始

使用示例

带说话人分离的转录

命令行用法

SRT 生成脚本

性能基准

方法
模型
1 小时音频
GPU
大致速度

原版 Whisper

large-v3

~60 分钟

RTX 3090

faster-whisper

large-v3

~5 分钟

RTX 3090

~12×

WhisperX

large-v3-turbo

~1 分钟

RTX 3090

~60×

WhisperX

large-v3-turbo

~50 秒

RTX 4090

~70×

批量大小
速度(RTX 4090)
显存

4

~30× 实时

6 GB

8

~45× 实时

8 GB

16

~60× 实时

10 GB

32

~70× 实时

14 GB

给 Clore.ai 用户的建议

  • 在步骤之间释放 VRAM — 删除模型并调用 torch.cuda.empty_cache() 在转录、对齐和说话人分离之间

  • HuggingFace 令牌 — 在说话人分离可用前,必须先接受 pyannote 模型许可协议;设置 HF_TOKEN 为环境变量

  • batch size 调优 — 从 batch_size=16开始,在 12 GB 显卡上降到 4–8,在 24 GB 显卡上提高到 32

  • int8 计算 — 使用 compute_type="int8" 在几乎不损失质量的情况下将 VRAM 占用减半

  • Docker 镜像pytorch/pytorch:2.11.0-cuda12.8-cudnn9-runtime

  • 持久化模型缓存 — 挂载 /root/.cache/huggingface 以避免每次容器重启时重新下载模型

故障排查

问题
解决方案

CUDA 内存不足

减少 batch_size,使用 compute_type="int8",或使用更小的模型(medium、small)

说话人分离返回 UNKNOWN

请确保 HuggingFace 令牌有效,并且你已接受 pyannote 许可协议

没有名为 'whisperx' 的模块

pip install whisperx — 请确保没有拼写错误(它是 whisperx,不是 whisper-x)

词级时间戳较差

请检查 whisperx.align() 是否在 transcribe() 之后调用 — 原始 Whisper 输出不具备词级精度

语言检测错误

使用以下方式强制指定语言 --language enlanguage="en" 在 Python API 中

处理缓慢

增大 batch_size,使用 large-v3-turbo 替代 large-v3,请确保 GPU 没有被共享

最后更新于

这有帮助吗?