WhisperX 会议录音怎么区分说话人?转写、对齐与发言人校对

用 WhisperX 3.8.6 对中文两人会议样片转写、对齐并添加匿名说话人标签,隐藏输入模型token,回听映射姓名,并排查权限、对齐与人数假设。

会议录音里的文字识别出来了,却不知道每句是谁说的,可以用 WhisperX 把转写、时间对齐与说话人区分接在一起。结果是录音内的匿名标签,例如 SPEAKER_00,需要回听才能映射成姓名;它不会自动证明真实身份,也不能保证多人抢话时归属正确。

下面采用 Python 3.11、WhisperX 3.8.6、CPU/int8 与中文录音,先处理一段确认只有两位发言者的短会议样片。步骤依据 2026 年 10 月 1 日核对的该版本文档与代码,没有在真实会议音频上实测,不承诺速度或分离准确率。

WhisperX 会议录音怎么区分说话人?转写、对齐与发言人校对

一、安装并准备模型访问权限

WhisperX 不只加载转写模型,还会加载对齐模型及说话人模型,首次下载需要网络。FFmpeg 应已经安装,并能在 PowerShell 中运行。建立单独环境:

py -3.11 -m venv .venv-whisperx
.\.venv-whisperx\Scripts\python.exe -m pip install --upgrade pip
.\.venv-whisperx\Scripts\python.exe -m pip install whisperx==3.8.6
.\.venv-whisperx\Scripts\python.exe -m pip check
ffmpeg -version

3.8.6 发布包要求 Python 3.10 至 3.13;本文选择 3.11。本文代码走 CPU,不要求安装 CUDA;若以后使用 GPU,按 3.8.6 官方 README核对对应环境,不能只改变 device 就认定兼容。

按 README 的 Speaker Diarization 章节,在 Hugging Face 为自己的账号申请读权限 token,并接受 pyannote/speaker-diarization-community-1 模型访问协议。token 的账号必须具备该模型权限。下方程序运行时隐藏输入 token,不需要把它写入 Python 文件或终端命令参数。

先准备一段自己有权处理、声音清晰且确认只有两人轮流发言的录音 meeting-two.wav。两人各自说几句话,中间保留正常停顿;先不要拿长会议或大量抢话片段验证安装。

二、三步处理:转写、对齐、分配发言人

保存为 meeting_diarize.py。其中 min_speakers=2 与 max_speakers=2 仅适用于上面的已知两人样片;正式会议人数不确定时,删去这两个参数,不能拿参会名单人数强行当作实际发言人数。

import gc
import getpass
import json
from pathlib import Path
import whisperx
from whisperx.diarize import DiarizationPipeline

token = getpass.getpass("Hugging Face read token: ")
device = "cpu"
audio = whisperx.load_audio("meeting-two.wav")

# 1. 中文转写
asr = whisperx.load_model(
    "small", device=device, compute_type="int8", language="zh"
)
result = asr.transcribe(audio, batch_size=1)
del asr
gc.collect()

# 2. 将文本对齐到音频
aligner, metadata = whisperx.load_align_model(
    language_code=result["language"], device=device
)
result = whisperx.align(
    result["segments"], aligner, metadata, audio, device,
    return_char_alignments=False
)
del aligner
gc.collect()

# 3. 匿名说话人区分与文字归属
diarizer = DiarizationPipeline(token=token, device=device)
speaker_segments = diarizer(audio, min_speakers=2, max_speakers=2)
result = whisperx.assign_word_speakers(speaker_segments, result)

Path("meeting-speakers.json").write_text(
    json.dumps(result, ensure_ascii=False, indent=2), encoding="utf-8"
)
for seg in result["segments"]:
    start, end = seg["start"], seg["end"]
    speaker = seg.get("speaker", "UNASSIGNED")
    print(f"{start:.2f}-{end:.2f} {speaker}: {seg['text']}")

执行:

.\.venv-whisperx\Scripts\python.exe meeting_diarize.py

这段程序使用官方的 load_model → transcribe → load_align_model → align → DiarizationPipeline → assign_word_speakers 流程。token 参数名称和默认说话人模型见 该版本说话人代码;中文 zh 对齐模型映射见 该版本对齐代码。版本变化后应重查参数,不要混用旧示例里的 token 参数名称。

三、怎样确认输出可用

打开 meeting-speakers.json,查看 segments 中的 start、end、text 和可能出现的 speaker。终端有句子并不表示说话人分配正确;标签缺失的片段会显示 UNASSIGNED,应回听检查,而不是凭上下文补一个姓名。

用下面的人工校对方法建立录音内映射:选择两位发言者各自声音清晰且没有重叠的一句,回听确认姓名,再建立“本文件 SPEAKER_00 → 某人”的对应表。继续抽查每次轮换、插话与结尾;同一个人被拆成两个标签、两个人被合并成一个标签,都要修正。换一份录音后标签编号可能重新分配,不能沿用上一份文件的姓名映射。

例如“00:12–00:16 SPEAKER_00:明天提交草案”只是输出形式的人工示意,不是这个模型的实测结果。真实内容和时间取决于你的音频。不要根据语气、职位或会议议题猜测发言者。

四、失败时先判断是哪一阶段

问题 定位方式 处理边界
401、403 或 gated model 检查 token 所属账号是否接受模型协议、是否有读权限 没有访问权限时先解决权限;转写有文字不代表说话人阶段已完成
中文对齐模型下载失败 依据对齐代码检查模型来源、网络和缓存 对齐失败时不能声称得到了可靠逐词时间戳
内存不足或CPU很慢 先保持 small、batch_size=1,并用更短样片定位 下载与各阶段模型加载都占资源;没有统一的完成时间保证
姓名归属乱或标签经常变 回听发言轮换与重叠段,检查假设人数是否真实 匿名聚类无法代替本人身份确认,抢话和短发言尤需人工处理

补充问答

有标签之后就能自动生成可靠会议纪要吗?

还要先修正文字和发言人归属,再提取结论、分歧与待办;涉及责任分工时回查对应原音。转写、聚类和摘要是不同步骤,前一步的错误会传播到后一步。

时间对齐是否保证每个数字都有时间戳?

不保证。官方 README 列出对齐字典外字符、数字等可能缺少时间的信息,重叠讲话与说话人分配也有局限。需要精确引用的句子应直接在原音上确认起止位置。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30388.html

赞 (0)
AI小管家的头像AI小管家
DeepSeek 如何分析压缩包文档?先检查 ZIP 清单再提取文本内容
上一篇 1天前
用讯飞星火生成活动文案:分清卖点、报名条件和发布渠道
下一篇 1天前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部