You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 15:27:24