最近一直在利用空闲时间调研说话人分离技术,经过一段时间的技术调研和测试,今天终于完成了一个基本有效的试验版本-WhisperXSpeechSeparation。这个版本来自一个西班牙大佬的版本改过来的,感谢大佬了。下面我先说明下使用该notebook需要注意点,然后我用ai给我总结了一些内容。
WhisperX 是在 OpenAI Whisper 基础上优化的第三方实现,由 Max Bain (Oxford) 团队开发。
它的核心目标是解决原版 Whisper 的两个痛点:
推理速度慢
WhisperX 采用 CTranslate2 推理引擎,支持混合精度 (fp16, int8) 与 GPU 并行推理,
相比原版 Whisper,通常 提速 2~4 倍。
时间戳不精确
Whisper 原始输出的时间戳仅按句子粗略定位,容易偏移。
WhisperX 使用 字级强制对齐 (forced alignment) 模块(基于 Montreal Forced Aligner 思路)
对每个单词重新计算时间戳,实现毫秒级精准同步。
除此之外,它还原生支持:
📘 简单理解:
WhisperX = Whisper + CTranslate2 + 高精度对齐 + Diarization接口
一站式语音转录增强方案。
pyannote.audio 是法国 INRIA 实验室的开源项目,
是当前最成熟的 Speaker Diarization(说话人分离) 框架之一。
其典型处理流程包括:
在 WhisperX 的集成版本中,pyannote.audio 用于:
💡 优点:
- Hugging Face 提供官方预训练模型
- 支持 GPU / CPU 推理
- 能在嘈杂环境中保持高准确率
- 结果与 Whisper 时间戳自然对齐
Audio File
│
▼
[WhisperX]
├── Speech Recognition → 文字转录
├── Word Alignment → 精确时间戳
▼
[pyannote.audio]
├── Speaker Embedding → 提取说话人特征
├── Clustering → 区分发言人
▼
[WhisperX Integration]
└── Merge → 输出带 Speaker 标签的结构化 JSON
最终得到:
[SPEAKER_00] Hello, welcome to the show.
[SPEAKER_01] Thanks! Glad to join.
| 功能 | Whisper | WhisperX | pyannote.audio |
|---|---|---|---|
| 语音识别 | ✅ | ✅(更快) | ❌ |
| 对齐精度 | 一般 | ✅ 字级对齐 | ❌ |
| 说话人识别 | ❌ | ✅(通过 pyannote) | ✅ |
| 推理性能 | 中 | ✅ 高效 (CTranslate2) | 中 |
| 适用场景 | 单人录音 | 多人会议、播客 | 多人语音分离 |
非常好 👍 这是博客里最实用的一节 —— 让读者一眼看懂 WhisperX 的三种常用命令模式。
我帮你整理成简洁、清晰、可复制的格式(含注释),适合直接放进教程文中👇
WhisperX 的 CLI(命令行接口)设计非常统一,
只要记住「输入文件 + 模型选择 + 功能参数」三要素,就能快速完成各种任务。
这是最基础的语音转录模式,将音频转成文字。
支持多语言自动检测、GPU 加速、精确时间戳。
!whisperx audio.mp3 \
--model large-v3 \
--output_dir ./outputs \
--fp16 True \
--compute_type int8 \
--beam_size 10 \
--print_progress True
参数说明:
--model large-v3:使用最新的 Whisper Large V3 模型(最准确)--fp16 True:启用半精度推理,加快速度(需 GPU)--compute_type int8:进一步量化优化--beam_size 10:增加 beam search 宽度,提高准确度./outputs 目录中生成 audio.json、audio.srt 等结果在转录的基础上自动区分不同说话人(如会议、播客场景)。
WhisperX 内部会调用 pyannote.audio 完成说话人聚类。
!whisperx audio.mp3 \
--model large-v3 \
--output_dir ./outputs_diarized \
--fp16 True \
--compute_type int8 \
--beam_size 10 \
--print_progress True \
--diarize \
--hf_token hf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
新增参数:
--diarize:启用说话人分离功能--hf_token:你的 Hugging Face 访问令牌(用于下载 pyannote.audio 模型)输出示例:
[SPEAKER_00] Hello, welcome back to the show.
[SPEAKER_01] Thanks! Great to be here.
将音频自动翻译为 英文(Whisper 内置翻译能力)。
适合中英混合语音、采访、外语内容。
!whisperx audio.mp3 \
--model large-v3 \
--output_dir ./outputs_translated \
--task translate \
--fp16 True \
--compute_type int8 \
--beam_size 10 \
--print_progress True
关键参数:
--task translate:将识别结果翻译为英文输出示例:
原文(中文)→ 英文翻译:
我今天去东京出差。 → I went to Tokyo for a business trip today.
看着有点吊
通义听悟知道吧,这个是实现类似功能的一个demo,不过国内这部分没找到开源的,因此中文效果没有英文好