news 2026/8/14 13:33:59

Demucs 音频分离部署指南:5分钟跑通,一首4分钟的歌分离只要2分钟

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Demucs 音频分离部署指南:5分钟跑通,一首4分钟的歌分离只要2分钟

Demucs 音频分离部署指南:5分钟跑通,一首4分钟的歌分离只要2分钟

【免费下载链接】demucsCode for the paper Hybrid Spectrogram and Waveform Source Separation项目地址: https://gitcode.com/gh_mirrors/de/demucs

你肯定遇到过这种糟心事:好不容易从网上找到一首歌的伴奏,下载回来却发现里面还带着隐隐的鼓点和人声底噪。别急着去找那些收费的在线工具——Meta 开源的 Demucs(Hybrid Spectrogram and Waveform Source Separation 论文的官方代码)就能自己搞定这一切,而且完全免费、离线可用。它能一键把任意一首歌拆成鼓、贝斯、人声和"其他"四个音轨,分离质量常年霸榜 SDR 9.0 dB。这篇文章会带你从零装好它、跑通第一首歌,再通过几个关键参数把处理速度提上来,让一首 4 分钟的歌曲在 GPU 上 2 分钟内出成品。

上图是 Demucs v4(Hybrid Transformer)的模型架构:一条分支处理波形、一条分支处理频谱,中间用 Transformer 做跨域融合,这也是它比传统分离模型更干净的原因。

读完这篇文章,你会获得

  • 5 分钟跑通第一首分离
  • 选对模型不再纠结
  • 显存不够一键化解
  • 批量分离自动排队
  • 八成报错自己会修

5分钟先跑通:先看到成果再谈优化

我懂你,装工具最怕装完不知道有没有用。所以咱们跳过所有铺垫,直接上手。

如果你只想用、不想研究代码,一条命令就够:

pip3 install --user -U demucs

装完验证一下:

demucs --version

能打印出版本号就说明装好了。接着随便找一首歌,直接开跑:

demucs -d cpu "你的歌曲.mp3"

第一次运行会联网下载模型权重(htdemucs 是默认模型,约 80MB),之后就全是本地运行。命令跑完后,在separated/htdemucs/你的歌曲/目录下,你会看到四个文件:

  • drums.wav—— 纯鼓点
  • bass.wav—— 纯贝斯
  • vocals.wav—— 纯人声
  • other.wav—— 其他配乐

到这一步,你已经完成了第一次音频分离。CPU 处理速度大概是歌曲时长的 1.5 倍,也就是一首 4 分钟的歌约 6 分钟出结果——别嫌慢,接下来告诉你怎么提速 3 倍以上。

小提示:如果你用的 Linux 是 Ubuntu,且系统自带 Python 版本过低(低于 3.8),安装方法见官方文档 docs/linux.md,里面给了用 Miniconda 兜底的方案。

核心能力拆解:按功能模块认识 Demucs

跑通之后,咱们按"功能"而不是按"步骤"来认识它。每个模块我都回答四个问题:是什么、何时用、怎么配、配错会怎样。

模块一:选模型——速度与质量的平衡木

模型是 Demucs 的灵魂。同一首歌,用不同模型跑,速度和干净程度天差地别。官方预置了 8 个模型,用-n参数切换:

demucs --list-models # 查看全部可用模型
模型定位分离质量速度说明
mdx_q快速模式中等最快量化压缩版,文件小,适合低配机器
mdx平衡模式中高较快MDX 挑战赛 Track A 冠军
htdemucs默认模型中等v4 混合 Transformer 模型,默认就它
hdemucs_mmi经典 v3中等老牌 Hybrid Demucs 重训版
htdemucs_ft精细模式最高最慢(约 4 倍)微调版,追求极致质量再选它
htdemucs_6s六轨实验看音源较慢额外拆出吉他、钢琴,钢琴目前效果一般
mdx_extra/mdx_extra_q最强阵容最高较慢用大量额外数据训练,含测试集

怎么配:GPU 用户直接用默认htdemucs就很好;CPU 用户赶时间选mdx_q;做精修后期再上htdemucs_ft

配错的后果htdemucs_ft在 CPU 上跑一首歌可能要十几分钟,不是质量差,是你不该选它。模型定义和加载逻辑在 demucs/pretrained.py,想看每个模型的具体说明可以翻源码。

模块二:分离模式——四轨全拆还是只抠人声

默认情况下 Demucs 把歌拆成四个音轨。但很多时候你只想要人声(做卡拉OK)或只想要伴奏(做翻唱 remix),这时候用--two-stems就能只输出两个文件:

# 只分离人声 + 伴奏(卡拉OK模式) demucs -n htdemucs --two-stems=vocals "你的歌曲.mp3"

vocals可以换成drumsbassother任意一个音源。输出会变成vocals.wavno_vocals.wav两个文件。

配错的后果:注意--two-stems只在输出时把其他音轨合并,它不会让你跑得更快或更省内存,因为内部仍然是完整分离后再合并的(源码里写的明明白白,见 demucs/separate.py)。

模块三:输出格式——WAV、MP3 还是 FLAC

默认输出是 16bit 的 WAV,44.1kHz 采样率,体积偏大。三个常用选项:

参数作用适用场景
--mp3+--mp3-bitrate 320输出 MP3手机随手听、传微信
--flac输出无损压缩 FLAC本地存储又不想损失音质
--float32/--int24提升 WAV 位深专业后期,避免精度损失
# 输出 320kbps 的 MP3 demucs --mp3 --mp3-bitrate 320 "你的歌曲.mp3" # 输出 FLAC demucs --flac "你的歌曲.mp3"

还有个容易踩的坑叫"爆音"。分离出的音轨偶尔会超限(clipping),Demucs 默认用rescale自动缩放整体音量来规避,代价是各音轨之间的相对音量会变。如果你更想要原始响度,加--clip-mode clamp强制硬切。相关参数都在 demucs/separate.py 的get_parser()里,随手可查。

配错的后果--mp3依赖 lameenc 库,--flac依赖 ffmpeg,缺依赖时命令会直接报错退出——所以下一节我们先把依赖补齐。

模块四:提速与省显存——性能的核心战场

这一节是全文的精华。四个参数用好了,处理速度提升 3 倍不是口号。

1. GPU 加速:-d cuda

默认情况下 Demucs 会优先用 CUDA(见 demucs/api.py 的Separator实现)。有 N 卡就显式指定:

nvidia-smi # 先确认驱动装好 demucs -d cuda "你的歌曲.mp3"

2. 显存不足:--segment是你的救命稻草

显存不够是最常见的报错。原理很简单:Demucs 会把长音频切成一段一段处理,--segment 8就是每段 8 秒。段越短越省显存,但也可能略降质量。

你的显存推荐配置
3GB--segment 8
2GB再加环境变量PYTORCH_NO_CUDA_MEMORY_CACHING=1
4GB+默认参数即可(约需 7GB 显存)
PYTORCH_NO_CUDA_MEMORY_CACHING=1 demucs -d cuda --segment 8 "你的歌曲.mp3"

注意:HTDemucs 系列的 Transformer 模型训练时最大分段是 7.8 秒,--segment传超过 7 的值会直接报错拒绝运行,这是源码里写死的保护逻辑,别试图强行加大。

3. 并行处理:-j善用多核

-j 4表示同时用 4 个进程处理。多核 CPU 上提速明显,但它会把内存占用乘以同样的倍数——官方文档原话"be careful"。建议取 CPU 核心数的一半左右,别贪多。

4. 玄学提速:--shifts--overlap

--shifts是官方论文里的"shift trick":对输入做随机平移、多次预测再取平均,能提升约 0.2 个点的 SDR,但速度会按倍数变慢。没 GPU 别开。

--overlap控制分段预测时的重叠率,默认 0.25,赶时间可以降到 0.1。

配错的后果-j开满 +--shifts 10一起上,你的内存会被瞬间吃光直接 OOM 崩溃,这不是 bug,是参数用法问题。

模块五:输出位置与程序化调用

想控制文件放哪,用-o;想自定义文件名格式,用--filename

demucs -o /data/separation --filename "{track}/{stem}.{ext}" "你的歌曲.mp3"

模板里{track}是歌名、{stem}是音轨名、{ext}是扩展名。

如果你想把分离能力嵌进自己的程序,Demucs 给了两个入口。简单批量用separate.main

import demucs.separate demucs.separate.main(["--mp3", "--two-stems", "vocals", "song.mp3"])

要更细的控制就用Separator类(官方 API 文档在 docs/api.md):

from demucs.api import Separator separator = Separator(model="htdemucs", device="cuda", jobs=4) origin, separated = separator.separate_audio_file("song.mp3") separator.save_audio(separated["vocals"], "vocals.wav")

一个完整实战:把 4 分钟 MP3 变成伴奏 + 人声

纸上谈兵结束,现在咱们串一遍完整流程。目标:把一首 4 分钟的 MP3 分离出高质量人声和伴奏,压缩成 MP3,全程可复现。

第 1 步:补齐依赖(约 2 分钟)

sudo apt update && sudo apt install -y ffmpeg

为什么要 ffmpeg?从 torchaudio 0.12 开始,解码 MP3 必须有它,不装的话一跑 MP3 就报错。官方在 docs/linux.md 里专门强调过这一点。

第 2 步:跑分离(GPU 约 2 分钟,CPU 约 6 分钟)

demucs -d cuda --two-stems=vocals --mp3 --mp3-bitrate 320 "song.mp3"

这一条命令同时干了三件事:用默认 htdemucs 模型分离、只保留人声+伴奏、输出成 320kbps 的 MP3。

第 3 步:验收产物

ls separated/htdemucs/song/ # 预期输出:no_vocals.mp3 vocals.mp3

听到这,你已经拥有了一份可以放进播放器的纯伴奏。全程只用了 3 条命令,耗时取决于你的硬件——这就是 Demucs 的日常使用方式。

排错速查:9 种常见问题的三段式解法

报错现象原因分析解决动作
FFmpeg not found缺音频解码依赖sudo apt install ffmpeg重装
CUDA out of memory显存不够--segment 8;2GB 显存再加PYTORCH_NO_CUDA_MEMORY_CACHING=1
Model not found/ 下载失败权重没下全重跑一次让它断点续传;或手动下载模型放入~/.cache/demucs/
报"segment 太长"错误超出模型训练分段上限HTDemucs 系列--segment最大只能到 7
File xxx does not exist路径带空格没加引号把整个路径用双引号包起来:demucs "my song.mp3"
分离结果爆音输出超限触发削波用默认rescale模式,或改--clip-mode clamp
内存被吃光崩溃-j开太多,内存成倍增长降到核心数的一半,比如 8 核机器用-j 4
分离速度极慢在用htdemucs_ft或开了--shiftsmdx_q模型,或去掉--shifts
人声里还有鼓点残留模型选得太弱htdemucshtdemucs_ft

进阶玩法:从脚本到服务,按你的水平对号入座

入门级:批量分离脚本

一次性处理整个文件夹的歌,写个 5 行的 shell 脚本就够了:

#!/bin/bash INPUT_DIR="input" OUTPUT_DIR="separated" mkdir -p "$OUTPUT_DIR" for file in "$INPUT_DIR"/*.mp3; do [ -e "$file" ] || continue demucs -d cuda -j 4 --segment 8 -o "$OUTPUT_DIR" "$file" done

经验之谈:内存别省着用、但也别同时堆太多任务,CPU 和显存各留三成余量,机器才不会罢工。

进阶级:用 Python API 写自己的批处理

Separator类支持传入callback回调,你可以在每个片段分离开始/结束时收到进度信息,随时中断任务。想给程序加个"断点续传"或"进度条",看 demucs/api.py 里的 Callback 说明,里面有完整的字段定义。

高手级:部署成常驻服务

需要长期稳定跑任务的话,可以把 Demucs 挂成 systemd 服务:

[Unit] Description=Demucs Audio Separation Service After=network.target [Service] User=yourname Environment="PYTORCH_NO_CUDA_MEMORY_CACHING=1" ExecStart=/usr/local/bin/demucs -d cuda -j 4 --segment 8 /watch/*.mp3 Restart=always [Install] WantedBy=multi-user.target

保存到/etc/systemd/system/demucs.service,然后:

sudo systemctl daemon-reload sudo systemctl start demucs sudo systemctl enable demucs # 开机自启 sudo journalctl -u demucs -f # 实时看日志

科研级:训练你自己的模型

普通玩法到此为止,但如果你想让 Demucs 更懂你的音乐品类,可以自己微调。训练入口和全套配置在 docs/training.md,里面有模型动物园(Model Zoo)、数据准备和评测方法。想快速改参数,改 conf/config.yaml 或 conf/variant/finetune.yaml 就行,后者是官方给的微调模板(4 个 epoch、学习率 6e-4)。想测性能瓶颈,用 tools/bench.py 跑基准,它能告诉你每段的耗时和显存峰值。

想深度参与开发,先把仓库克隆到本地:

git clone https://gitcode.com/gh_mirrors/de/demucs cd demucs pip install -r requirements.txt

收尾:记住这几个操作就赢了

把整篇文章压成一张速查卡:

  1. 安装pip3 install --user -U demucs,缺 MP3 支持就装ffmpeg
  2. 首跑demucs -d cpu 歌曲.mp3,产物在separated/htdemucs/歌曲/
  3. 提速:GPU 用-d cuda,显存紧用--segment 8
  4. 抠人声--two-stems=vocals
  5. 压体积--mp3 --mp3-bitrate 320
  6. 批处理:shell 循环或Separator的 Python API

你现在缺的不是工具,是一首想分离的歌。去翻翻你的播放列表,跑起来的那一刻,你会回来感谢这 6 分钟。

【免费下载链接】demucsCode for the paper Hybrid Spectrogram and Waveform Source Separation项目地址: https://gitcode.com/gh_mirrors/de/demucs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/14 13:30:48

大模型Function-Calling技术解析:从工具调用到智能体构建实战

1. 从“调用”到“使能”:Function-Calling的本质与演进如果你最近在折腾大语言模型的应用开发,或者关注AI Agent的动向,那么“Function-Calling”这个词一定高频出现在你的视野里。它听起来很技术,但核心思想却异常朴素&#xff…

作者头像 李华
网站建设 2026/8/14 13:28:55

Enhancing Sequential Recommendation with World Knowledge from Large Language Models

文章核心总结与翻译 一、主要内容 本文针对传统序列推荐系统(SRS)依赖ID嵌入、协同信号有限,以及现有大语言模型(LLM)增强方法易受幻觉影响的问题,提出了GRASP(Generation Augmented Retrieval with Holistic Attention for Sequential Prediction)框架。该框架通过两…

作者头像 李华
网站建设 2026/8/14 13:27:27

Fillinger 智能填充脚本入门:3 步让 Illustrator 自动铺满整个形状

Fillinger 智能填充脚本入门:3 步让 Illustrator 自动铺满整个形状 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts Fillinger 是一个免费的 Illustrator 智能填充脚本&a…

作者头像 李华