如何从.wav音频文件提取RTTM格式文件?Python代码执行失败求助
解决Python生成RTTM文件失败的问题
你的代码没法生成RTTM文件,核心问题出在sox根本不支持从WAV音频直接生成RTTM文件。RTTM是记录说话人分割结果的标注格式,而sox只是个通用音频处理工具,没有说话人识别/分割的能力——它的-rttm参数是用来读取RTTM文件、对音频做分割用的,不是用来输出RTTM的。
除了这个核心问题,你还可以排查这些细节:
- 没检查subprocess的执行状态:换成
subprocess.check_call代替subprocess.call,如果sox执行出错会直接抛异常,方便定位问题 - sox未安装或未加入系统环境变量:在终端执行
sox --version确认能否正常调用 - 输出路径无写入权限:确保
output_path所在的文件夹允许写入 - WAV文件路径错误:确认
wav_path指向的是真实存在、可正常读取的WAV文件
正确的解决方案:用专门的说话人分割库
要生成RTTM文件,得用具备说话人分割能力的工具,比如pyannote.audio,这是专门做该任务的库。
步骤1:安装依赖
pip install pyannote.audio
步骤2:准备Hugging Face令牌
到Hugging Face平台申请访问令牌,并同意pyannote相关预训练模型的使用协议。
步骤3:修改代码
import os from pyannote.audio import Pipeline def extract_rttm_file(wav_path): """从WAV文件生成RTTM格式的说话人分割文件""" output_path = os.path.splitext(wav_path)[0] + ".rttm" # 初始化说话人分割管道 pipeline = Pipeline.from_pretrained( "pyannote/speaker-diarization-3.1", use_auth_token="你的Hugging Face令牌" ) # 执行说话人分割 diarization = pipeline(wav_path) # 将结果写入RTTM文件 with open(output_path, "w") as rttm_file: diarization.write_rttm(rttm_file) return output_path
注意事项
- 把代码里的
"你的Hugging Face令牌"替换为你实际申请的令牌 pyannote/speaker-diarization-3.1是当前效果较好的预训练模型,你也可以根据需求选择其他模型- 该库支持批量处理,还能调整模型参数优化分割结果
内容的提问来源于stack exchange,提问作者Lahfir
相关产品推荐
相关产品推荐

