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

Spleeter音轨分离出现进程启动RuntimeError报错如何解决

问题根因

之前的if __name__ == '__main__'写法完全失效:你把这段判断写在了do_seperation()函数内部,还手动给局部变量__name__赋值为'__main__',Python运行时根本识别不到模块级别的主入口保护,多进程启动时就会触发引导阶段未完成的报错。另外直接调用Spleeter内部私有方法_separate_librosa会绕过官方自带的多进程安全逻辑,也会加剧这个问题。

修复方案
  • 删掉函数内部错误的__name__赋值和嵌套判断,把主入口判断放到模块最外层,不要包裹在任何自定义函数内
  • 不要调用下划线开头的私有方法_separate_librosa,改用官方公开的separate方法执行分离,自动适配多进程运行逻辑
  • 如果你用的是Windows或macOS默认spawn多进程模式,可在主入口最开头加上freeze_support()兼容所有运行场景
修复后可运行代码
from spleeter.separator import Separator
from spleeter.audio.adapter import AudioAdapter
from multiprocessing import freeze_support

def seperator():
    separator = Separator('spleeter:4stems')
    file = "test.wav"
    audio_loader = AudioAdapter.default()
    sample_rate = 44100
    waveform, _ = audio_loader.load(file, sample_rate=sample_rate)
    # 替换私有方法调用为官方公开方法
    prediction = separator.separate(waveform)
    print(prediction['vocals'])
    # 如需保存分离后的音轨到本地,可放开下面这行注释,指定输出目录即可
    # separator.save_to_file(prediction, sample_rate, "./output")

if __name__ == '__main__':
    # 不需要打包成exe的场景可以注释掉下一行,加上可以兼容所有运行环境
    freeze_support()
    seperator()
注意事项
  • __name__是Python为每个模块自动赋值的内置属性,不要在函数内部手动给同名局部变量赋值,这种写法完全起不到主入口判断的作用
  • 涉及多进程初始化的逻辑(比如Spleeter模型加载、分离任务执行),必须放在if __name__ == '__main__':块的调用链中,不能直接写在模块全局位置执行
  • 下划线开头的类方法属于内部私有API,版本迭代时可能随意调整逻辑,没有对外兼容承诺,日常使用优先调用官方公开方法

内容的提问来源于stack exchange,提问作者wroex24

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:33:21