Demucs 音频分离实战指南:一条命令拆出人声、鼓点和伴奏
【免费下载链接】demucsCode for the paper Hybrid Spectrogram and Waveform Source Separation项目地址: https://gitcode.com/gh_mirrors/de/demucs
做视频、录播客、玩混音的朋友,八成都有过这样的时刻:好不容易找到一首歌,想要它的纯伴奏当片头 BGM,全网搜遍不是带水印就是糊成一团;想要单独提取某位歌手的人声做参考,剪半天还是一股子"伴奏残留"。而 Demucs 就是为解决这个痛点而生的开源音频分离工具——它用深度学习把混音里的鼓、贝斯、人声和其他伴奏逐轨拆开,在 MUSDB HQ 测试集上做到了 9.00 dB 的 SDR(信号失真比),更妙的是,你只需要一条命令。👇
从一次"找不到伴奏"的尴尬说起
我印象很深,朋友给乐队翻唱做伴奏带,原曲版权在别人手里,网上找的"伴奏版"居然还有人声和掌声。他花了一个晚上,最后在音频软件里手动抠频段,效果惨不忍睹。后来我把 Demucs 丢给他,十分钟后他发来一句:"这玩意儿是人做的吗?"
这其实就是 Demucs 的价值所在:把"分离音轨"这件事,从玄学变成了一条可复现的命令。它不挑歌、不需要专业声学知识、不依赖云端服务,模型跑在你自己电脑上,隐私和速度都握在手里。对新手来说,它是"点一下就能用"的工具;对老手来说,它又是一个能深度调参、能接入 Python 流水线的专业组件。
Demucs 凭什么分离得这么干净
先花两分钟搞懂它为什么强,后面用起来才不迷糊。
Demucs 目前是第四代(v4),核心叫Hybrid Transformer Demucs。通俗点说,它同时开了两条"流水线"来处理一段音频:
- 一条流水线看原始波形(时域),像看一段连续起伏的声波曲线;
- 另一条流水线看频谱图(频域),像看一首歌的"热力图",哪段频率、哪个时刻在响一目了然;
然后,两条流水线中间架了一座"跨域 Transformer"的桥,让时域信息和频域信息互相参考、互相印证。这个设计的聪明之处在于:鼓声在频谱上特征明显,人声在波形上轮廓清晰,两条流水线互补,分离自然更干净。
上图就是 Demucs v4 的混合架构:下方时域与频域两条编码器分支汇入中央的跨域 Transformer,再经两条解码器分支分别重建,最终输出四轨分离信号。
它的前身 Hybrid Demucs(v3)就是当年索尼 MDX 挑战赛的冠军模型;v4 把最内层换成了跨域注意力,进一步把 SDR 顶到了 9.00 dB。作为对比,很多经典老模型(比如 Wave-U-Net、Open-Unmix)在同一测试集上只有 3~6 dB。差距是"能听见底噪"和"几乎无损"之间的差距。
第一首歌:安装与第一条命令
安装就一条命令,前提是你有 Python 3.8 或更高版本:
# 普通用户装这个就够了,模型第一次运行时会自动下载 python3 -m pip install -U demucsWindows 用户把python3换成python.exe,建议在 Anaconda Prompt 里执行。装完就能分离,不需要任何额外配置:
# 注意:文件名含空格一定要加引号 demucs "我最近循环的那首歌.mp3"跑完会看到进度条,结束后在当前目录下多出一个separated/文件夹,结构长这样:
separated/ └── htdemucs/ # 模型名 └── 我最近循环的那首歌/ # 原文件名 ├── vocals.wav # 人声 ├── drums.wav # 鼓 ├── bass.wav # 贝斯 └── other.wav # 其他伴奏四个文件都是 44.1kHz 的立体声 wav,可以独立播放。第一次跑通的那一下,成就感真的不亚于第一次学会剪辑。
只想要伴奏或人声?两个参数搞定
默认输出四轨,但很多场景你只需要其中一轨或两轨。这时候用--two-stems,它会额外帮你把"其余所有声音"混成一条:
# 卡拉OK神器:只要人声 + 无人声伴奏 demucs --two-stems=vocals "流行歌曲.mp3"跑完会得到vocals.wav和no_vocals.wav两个文件,前者可以拿去做翻唱参考,后者直接当伴奏用。同样的思路,把vocals换成drums或bass,就能单独提取鼓点或贝斯线,做 remix 或者练耳都很好使。
如果你想把结果直接存成 MP3 省空间,加上输出格式参数:
# 320kbps 高质量 MP3 输出 demucs --mp3 --mp3-bitrate 320 "高音质音乐.flac"另外有两个小技巧值得记住:一是如果分离结果偶发削波(音量爆了),加--clip-mode clamp改用硬削波策略;二是如果觉得分离质量差一点意思,可以试试--shifts 4——它会对音频做多次随机位移预测再取平均,能小幅提升分离精度,代价是耗时翻倍。
模型怎么选:一张表看懂
用-n参数可以切换预训练模型,默认是htdemucs。我整理了一张选择表,照着挑就行:
| 模型 | 特点 | 适合谁 |
|---|---|---|
htdemucs | 默认模型,质量和速度平衡 | 大多数人的首选 |
htdemucs_ft | 精调版,质量更好但慢约 4 倍 | 追求极限分离效果 |
htdemucs_6s | 在四轨基础上加了吉他和钢琴 | 需要分离吉他/钢琴的场景 |
hdemucs_mmi | v3 经典混合架构的重训版 | 兼容性需求 |
mdx/mdx_extra | MDX 挑战赛获奖模型 | 特定测试集上的口碑之选 |
mdx_q/mdx_extra_q | 量化版,文件小、速度快 | 显存小或追求速度 |
用法很简单:
demucs -n htdemucs_ft "重要录音.wav"小提醒:
htdemucs_6s的钢琴轨目前质量一般,官方都承认有串扰,想认真做钢琴分离的话建议多听听效果再决定。
显存不够、只有 CPU?三条退路都在这里
分离是纯计算活,模型越大越吃显存。默认参数下跑 GPU 大约要 7GB 显存,如果遇到CUDA out of memory,按下面顺序依次尝试:
- 缩小分块:加
--segment 4,把音频切成更短的片段逐段处理,显存占用立刻降下来; - 关缓存:设置环境变量
PYTORCH_NO_CUDA_MEMORY_CACHING=1,能再挤一挤,但会变慢; - 回 CPU:直接
-d cpu,处理时间大约是音频时长的 1.5 倍,一首四分钟的歌大概六分钟出结果,可接受。
如果你的 CPU 是多核的,还可以用-j 4开 4 个并行任务,吃满核心跑得更快(内存会跟着涨,别开太狠)。
把它变成自己程序的一部分:Python API
命令行适合人用,如果你想把它嵌进自己的脚本或工具,Demucs 也提供了干净的 Python 接口,三行代码就能跑一次分离:
import demucs.api # 初始化分离器,可以指定模型和分块长度 separator = demucs.api.Separator(model="htdemucs", segment=8) # 分离文件,返回原始音频和分离结果(一个 dict) origin, separated = separator.separate_audio_file("demo.mp3") # 逐轨保存,注意目标目录要先建好 import os os.makedirs("out", exist_ok=True) for stem, source in separated.items(): demucs.api.save_audio(source, f"out/{stem}.wav", samplerate=separator.samplerate)这套 API 的完整说明在项目里的 docs/api.md,回调、参数热更新(update_parameter)、批量分离都有现成实现,想深入了解源码的话,分离逻辑集中在 demucs/separate.py,模型实现在 demucs/htdemucs.py。
最后:几条心得和下一步建议
如果只看本文一个结论,那就是:先装好,随便拿一首歌跑一遍,再回来读参数。音频分离的乐趣在于听感反馈,参数调来调去都不如亲手听一次对比来得直观。
动手之前,留给你三句实在话:
- 输入决定上限:源文件越干净,分离效果越好;转码多次的网盘音质,神仙模型也救不回来;
- 别贪快:第一次跑建议用默认参数,确认效果满意后再用
--shifts、--overlap这类技巧微调; - 多看官方文档:不同系统的坑(比如 Windows 的 ffmpeg 依赖、macOS 的安装细节)都写在 docs/windows.md、docs/mac.md 和 docs/linux.md 里,遇到问题先翻它们。
今晚就挑一首你最近单曲循环的歌试一把吧——戴上耳机,把分离出来的drums.wav单独播一遍,你会第一次听清一首歌"骨架"的声音。这大概就是这类工具最迷人的地方:它不改变音乐,只是把藏在混音里的层次,一件件还给你。🎧
【免费下载链接】demucsCode for the paper Hybrid Spectrogram and Waveform Source Separation项目地址: https://gitcode.com/gh_mirrors/de/demucs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考