使用WhisperX+pyannote-audio 完成语音转录、说话人分离、语音转录转译
时间:2025-11-8 14:03 作者:wanzi 分类: AI
最近一直在利用空闲时间调研说话人分离技术,经过一段时间的技术调研和测试,今天终于完成了一个基本有效的试验版本-WhisperXSpeechSeparation。这个版本来自一个西班牙大佬的版本改过来的,感谢大佬了。下面我先说明下使用该notebook需要注意点,然后我用ai给我总结了一些内容。
使用注意点
- pyannote/speaker-diarization-3.1 是一个 受限模型(gated model),必须登录 Hugging Face 并 手动同意使用条款 才能下载。
- Hugging Face必须申请一个 read 权限的 token
- colab 提供的gpu环境和pyannote需要的cuda匹配不上,建议大家运行时换成cpu
🎯 工具介绍:WhisperX 与 pyannote.audio
🧠 WhisperX:加速且精准的 Whisper 增强版
WhisperX 是在 OpenAI Whisper 基础上优化的第三方实现,由 Max Bain (Oxford) 团队开发。
它的核心目标是解决原版 Whisper 的两个痛点:
-
推理速度慢
WhisperX 采用CTranslate2推理引擎,支持混合精度 (fp16,int8) 与 GPU 并行推理,
相比原版 Whisper,通常 提速 2~4 倍。 -
时间戳不精确
Whisper 原始输出的时间戳仅按句子粗略定位,容易偏移。
WhisperX 使用 字级强制对齐 (forced alignment) 模块(基于Montreal Forced Aligner思路)
对每个单词重新计算时间戳,实现毫秒级精准同步。
除此之外,它还原生支持:
- 多语言识别 (multilingual ASR)
- 说话人分离集成接口 (Speaker Diarization Integration)
- 批量推理与长音频自动分段处理
📘 简单理解:
WhisperX = Whisper + CTranslate2 + 高精度对齐 + Diarization接口
一站式语音转录增强方案。
🗣️ pyannote.audio:领先的说话人分离模型
pyannote.audio 是法国 INRIA 实验室的开源项目,
是当前最成熟的 Speaker Diarization(说话人分离) 框架之一。
其典型处理流程包括:
- Voice Activity Detection (VAD):检测音频中何时有人声出现
- Speaker Embedding (说话人特征提取):提取每段语音的说话人特征向量
- Clustering (聚类):基于向量相似度将不同人声聚为不同说话人
在 WhisperX 的集成版本中,pyannote.audio 用于:
- 自动判断音频中有多少个不同的人在讲话
- 给每个语音片段标注「SPEAKER_00 / SPEAKER_01 / …」标签
- 并可与 Whisper 的转录结果时间对齐,生成完整的带发言人转录稿。
💡 优点:
- 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 三大常用命令总结
WhisperX 的 CLI(命令行接口)设计非常统一,
只要记住「输入文件 + 模型选择 + 功能参数」三要素,就能快速完成各种任务。
🎙️ ① 语音识别(ASR)
这是最基础的语音转录模式,将音频转成文字。
支持多语言自动检测、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等结果
🗣️ ② 语音识别 + 说话人分离(ASR + Speaker Diarization)
在转录的基础上自动区分不同说话人(如会议、播客场景)。
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.
🌍 ③ 语音识别 + 翻译(ASR + Translation)
将音频自动翻译为 英文(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.
✅ 小结表格
| 模式 | 命令关键参数 | 输出结果 |
|---|---|---|
| 语音识别 | --model, --compute_type |
普通转录(含时间戳) |
| 语音识别 + 说话人分离 | --diarize, --hf_token |
标注 SPEAKER 的文本 |
| 语音识别 + 翻译 | --task translate |
英文翻译文本 |