ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

whisperX 说话人分离完整教程:一条命令把多人录音变成带标签逐字稿

2026/8/16 18:37:10 拓冰建站 浏览量
whisperX 说话人分离完整教程:一条命令把多人录音变成带标签逐字稿 whisperX 说话人分离完整教程一条命令把多人录音变成带标签逐字稿【免费下载链接】whisperXWhisperX: Automatic Speech Recognition with Word-level Timestamps ( Diarization)项目地址: https://gitcode.com/gh_mirrors/wh/whisperX如果你经常处理会议录音、访谈音频一定为谁在什么时候说了什么这件事头疼过。whisperX 是一个开源的自动语音识别ASR项目它在把声音转成文字之外还能给出词级时间戳并用说话人分离Diarization技术标出每一句属于谁。这篇 whisperX 说话人分离指南会带着你从安装一路走到实战避坑全程只讲新手用得上的东西。图1whisperX 从原始音频到词级时间戳逐字稿的完整流水线一、先讲个真实故事两小时录音让我崩溃了三回小林做播客编辑每期节目 40 分钟的多人访谈整理素材要花掉大半天。他要反复回放在纸上记这句是嘉宾说的这句是主持人接的话再手动对字幕稍一走神就跟不上。后来他换了更省事的办法先用 AI 工具自动转写。结果又踩了新坑——工具给的时间戳是整句级别的经常比实际声音慢两三秒剪片时字幕和口型对不上更麻烦的是两个嘉宾声音相近转出来的稿子根本分不清是谁在发言。他需要的其实是一句话谁在什么时间说了什么。whisperX 就是为这个需求设计的。它在 Open AI 的 whisper 转录模型之上做了三件事把时间戳精确到单词、把速度提升到 70 倍实时、把每个词和句子挂上说话人标签。下面我们就用它的真实用法一步步把它跑起来。二、第一次尝鲜从安装到出稿只需三步先建一个干净的 Python 3.10 环境再安装核心依赖这是最稳妥的姿势# 创建并激活 Python 3.10 虚拟环境避免依赖冲突 conda create --name whisperx python3.10 conda activate whisperx# 安装 whisperX 语音分离工具说话人分离所需依赖会一并装好 pip install whisperx想研究源码或改代码也可以把仓库克隆到本地再以可编辑模式安装# 克隆 whisperX 项目仓库并本地安装 git clone https://gitcode.com/gh_mirrors/wh/whisperX cd whisperX pip install -e .装完后先做一次最基础的转写验证环境是否正常# 对 meeting.wav 做自动语音识别默认使用 small 模型 whisperx meeting.wav这一步会输出带时间戳的文本。但真正的重头戏是加上说话人分离只需要追加一个参数# 语音识别 说话人分离让每句话都带上说话人标签 whisperx meeting.wav --diarize --hf_token hf_你的令牌第一次跑通这个命令你会看到每一段文本前面都出现了SPEAKER_00、SPEAKER_01这样的标签——同一段录音里不同的人被自动分开了。到这里谁在什么时候说了什么已经基本解决。三、把原理讲成故事whisperX 的四步流水线新手不需要背算法公式但理解它先做什么、再做什么能帮你更快定位问题。你可以把一段音频想象成一锅沸腾的火锅whisperX 的处理流程就是四道工序第一步捞料语音活动检测VAD。音频里大量时间其实是沉默、翻页声、背景音。whisperX 先用 VAD 判断哪些时间段有人说话只保留有语音的片段其余直接扔掉。这既减少了转录时的幻觉把不存在的话编出来也让后续处理更专注。相关逻辑都在whisperx/vad.py与whisperx/asr.py里。第二步分批下锅批量推理。把切好的语音片段打包一次性喂给 whisper 转录模型。原版 whisper 只能逐段处理whisperX 靠批量并行做到了 large-v2 模型下约 70 倍实时——这也是它比原版快一个量级的关键。第三步逐个钉钉子强制对齐。whisper 给的时间戳是整句级别的误差能到几秒。whisperX 调来一个音素模型wav2vec2 系把每个单词与音频波形逐一对上得到词级时间戳。这一步由whisperx/alignment.py完成精确到词字幕才能逐字高亮。第四步对号入座说话人分离。最后pyannote 的说话人模型按声纹特征把语音片段分组再通过时间重叠度把标签分配给每个词和句子。核心实现在whisperx/diarize.py的DiarizationPipeline与assign_word_speakers中。这四步串起来就是图1里那条流水线输入音频 → VAD 切分 → 批量转录 → 强制对齐 → 输出带说话人标签的词级时间戳文本。四、进阶玩法让结果更贴合你的场景流水线跑通只是开始几个常用参数能让结果从能用变成好用。告诉它现场有几个人。如果你大致知道人数明确给出范围能显著降低分错概率# 限定说话人数量范围提升说话人分离准确率 whisperx meeting.wav --diarize --min_speakers 2 --max_speakers 4按设备选模型与精度。有 NVIDIA 显卡用默认的 CUDA并可选更大模型只有 CPU 或显存紧张时用 int8 精度换流畅# CPU 环境下运行int8 精度大幅降低内存占用 whisperx meeting.wav --compute_type int8# 有 GPU 时用 large-v2 提升识别与说话人分离效果 whisperx meeting.wav --model large-v2 --device cuda按用途定制输出。默认会生成 srt、vtt、txt、json 等多种格式也可以只挑需要的给字幕加逐词高亮剪片时对照特别方便# 只输出 srt 和 txt并为字幕加上逐词高亮 whisperx meeting.wav --output_format srt,txt --highlight_words True多语言录音。中文、日文、法文等常见语言只要指定语言代码即可whisperX 会自动匹配对应的对齐模型内置en, fr, de, es, it, ja, zh, nl, uk, pt# 处理中文音频配合 large 模型效果最佳 whisperx meeting_zh.wav --model large --language zh常用参数速查表参数作用推荐值--model转录模型大小日常 small追求精度 large-v2--diarize开启说话人分离多人录音必开--min_speakers/--max_speakers限定说话人数量范围知道人数时强烈建议--compute_type计算精度CPU 用 int8GPU 用 float16--batch_size批量大小显存小就调低如 4--language指定音频语言非英语建议显式指定--output_format输出格式默认 all按需裁剪除了命令行whisperX 也提供完整的 Python APIwhisperx.load_audio()读音频、whisperx.load_model()加载转录模型、whisperx.align()做强制对齐、whisperx.DiarizationPipeline做说话人分离、whisperx.assign_word_speakers()把标签合并进结果。你可以从whisperx/__init__.py看到全部导出接口适合嵌入自己的批量处理脚本。五、避坑问答新手最容易踩的五个坑Q1加了--diarize就报错提示需要登录或没有令牌这是最高频的坑。说话人分离依赖 pyannote 的受限模型你需要先在 Hugging Face 官网生成一个读取令牌read token并在模型主页同意 pyannote 相关模型的使用协议然后通过--hf_token hf_xxx传入。第一次会下载模型耐心等一会儿即可。Q2两个说话人总被认成同一个人怎么办优先尝试明确人数范围比如--min_speakers 2 --max_speakers 2其次换更大的模型--model large-v2提升特征提取精度录音本身有背景噪音的话先做降噪预处理。另外要接受一个客观限制两人同时抢话重叠语音时whisperX 和绝大多数同类工具一样处理不好。Q3显存不够报内存不足三个递进手段把--batch_size降到 4、把--compute_type改成int8、换更小的模型如--model base。前两者基本不损失可用性是首选。Q4跑起来太慢CPU 上先确认加了--compute_type int8有 GPU 就显式指定--device cuda配合适中的--batch_size如 16通常能获得接近实时的体验。不需要逐词高亮就别开--highlight_words能省下对齐阶段的部分开销。Q5数字、日期、金额这类词没有时间戳音素对齐模型基于发音单位工作词典里没有的数字符号如2014.、£13.60无法对齐。你可以加--suppress_numerals True抑制这类符号或用--interpolate_method把它们合并到邻近词的区间里结果依然可用。六、最后一步动手吧原理知道了坑也排过了现在只差一件小事拿一段你自己真实的多说话人录音跑一遍whisperx 你的音频.wav --diarize。半小时后你大概就会和小林一样感叹以前为什么没早点用它。想继续深入仓库里还有不少好料EXAMPLES.md里有法语、德语、日语等多语言示例whisperx/transcribe.py列出了全部命令行参数与默认值whisperx/diarize.py是说话人分离的核心实现适合想研究细节的读者。从今天起把整理录音的枯燥时间还给自己吧。【免费下载链接】whisperXWhisperX: Automatic Speech Recognition with Word-level Timestamps ( Diarization)项目地址: https://gitcode.com/gh_mirrors/wh/whisperX创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考