demucs 六源音频分离:从安装到 6 轨输出的完整指南
【免费下载链接】demucsCode for the paper Hybrid Spectrogram and Waveform Source Separation项目地址: https://gitcode.com/gh_mirrors/de/demucs
Demucs 是一款开源音乐音源分离工具:输入一首歌,输出人声、鼓、贝斯、其他乐器(htdemucs_6s模型另加钢琴与吉他,共 6 轨)。默认模型htdemucs在 MUSDB HQ 测试集上取得9.00 dB的 Overall SDR,CPU 处理耗时约为歌曲时长的1.5 倍——知道这两点,就能决定它值不值得在你的机器上跑起来。
🎯 一句话定位:Demucs 和同类模型差在哪
Demucs v4 是混合域(时域+频域)架构的 Transformer 分离模型,与 README 对比表中列出的模型相比,它的差异可以用三句话说清:
- 处理域:波形域、频谱域、混合域三者并存过,
htdemucs走混合域路线,同时利用两个域的信息 - 规模:
htdemucs_ft在 MUSDB HQ 之外只用800 首额外歌曲微调,就做到 Overall SDR9.00 dB,与用了25k首歌训练的 Spleeter(5.9 dB)拉开明显差距 - 音源数:标准 4 轨(drums、bass、vocals、other)之外,
htdemucs_6s实验性提供 6 轨,官方明确提示 piano 轨"leaking and artifacts"较多
| 模型 | 处理域 | 额外训练数据 | Overall SDR |
|---|---|---|---|
| Spleeter | spectrogram | 25k 首歌 | 5.9 |
| Hybrid Demucs (v3) | hybrid | 无 | 7.7 |
| HT Demucs (v4) | hybrid | 800 首歌 | 9.0 |
(SDR 为论文口径的平均分离信噪比,单位 dB,数值越高越干净。)
⚙️ 装环境 + 跑通第一条分离命令
只分离不训练的话,一条 pip 命令即可,无需 clone 仓库:
pip3 install -U demucs若要用仓库自带配置做训练,按 docs/training.md 准备 conda 环境:
git clone https://gitcode.com/gh_mirrors/de/demucs cd demucs conda env create -f environment-cpu.yml conda activate demucs && pip install -e .最小可用命令(CPU 强制,最通用):
python3 -m demucs -d cpu -n htdemucs test.mp3运行后你会看到:
- 首次运行自动下载所选模型的权重,之后走本地缓存
- 一行提示
Separated tracks will be stored in <路径>,给出输出目录 - 进度条走完后,在
separated/htdemucs/<歌名>/下得到 4 个 wav:drums.wav、bass.wav、vocals.wav、other.wav - 输出为44.1 kHz、int16 立体声 wav;文件名含空格时,路径要整体加引号
🎤 提取纯人声,输出直接可用的卡拉 OK 伴奏
适合想练歌、做翻唱的人:--two-stems只输出两个文件,比完整分离少一堆用不上的轨。
python3 -m demucs --two-stems vocals --other-method minus test.mp3生成vocals.wav和no_vocals.wav两条轨。--other-method minus的伴奏是"原曲直接减掉人声"得到的,混响尾巴保留得最完整;若改用默认的add方式,伴奏则由各声部相加得到,两者音色略有差异,可各跑一遍对比。注意:two-stems 只是事后合并,并不比全量分离更快、更省内存。
🥁 用 6 音源模型拆出鼓和贝斯,给 remix 备料
适合做 remix、编曲拆解的创作者:-n htdemucs_6s一次分离出 6 轨,其中鼓与贝斯的可用性较高,可直接拖进 DAW。
python3 -m demucs -n htdemucs_6s --mp3 test.mp3--mp3把输出转成 MP3(默认320 kbps),单轨体积比 int16 wav 小得多,方便在网盘和素材库之间流转。提醒:htdemucs_6s是实验模型,piano 轨官方标注有大量伪影,拿它做成品前建议先试听。
🔬 它是怎么工作的:时频双支路 + 跨域 Transformer
核心机制一句话:两条 U-Net 支路并行卷积,最深处用 Transformer 互相"对齐"。频谱支路先用 STFT 把波形变成频谱图,沿频率轴卷积直到只剩单一频率,再转回时间卷积;时间支路直接在原始波形上做卷积。两路到达同一压缩尺度后,在编码器与解码器之间接入跨域 Transformer 编码器:域内用自注意力、域间用跨注意力(结构见图注描述的双 U-Net 示意,README.md 内嵌demucs.png为官方架构图)。解码从粗到细重建,各音源通过 CaC 复数频谱法从频谱还原为波形,训练损失始终在时域计算,保证输出是可直接播放的波形。
📋 5 个高频参数速查
| 参数 | 作用 | 什么时候用 |
|---|---|---|
-n/--name | 选模型,默认htdemucs | 要 6 轨用htdemucs_6s;求稳用默认 |
--two-stems | 只输出该音源+混合轨 | 卡拉 OK、只要某一条轨 |
--segment | 每段长度(秒) | GPU 爆内存时调小 |
-d | 计算设备,自动选 cuda/cpu | 强制 CPU 时显式写-d cpu |
--shifts | 随机平移预测并平均,SDR 最多提升 0.2 | 有 GPU 且追求质量时,代价是耗时 ×N |
--mp3 | 输出转 MP3,默认 320 kbps | 需要小文件分发时 |
完整参数(--float32、--int24、--jobs、--overlap等)见 docs/api.md。
🚧 避坑指南
现象:GPU 上跑着跑着 CUDA out of memory。原因:默认参数大约需要7 GB显存。 解决:--segment 8把分段调小(官方建议下限 10 秒内,再小质量会下降),或直接-d cpu。
现象:给htdemucs传--segment 30被拒,提示 "Maximum segment is: 7.8"。原因:Transformer 模型只能按训练时的分段长度推理,7.8 秒是硬上限。 解决:htdemucs系模型不要传大于 7.8 的值,长音频会自动分段处理。
现象:Linux/macOS 上读 mp3 报解码错误。原因:torchaudio 0.12 起不再自带 mp3 解码器。 解决:先装 ffmpeg,conda install ffmpeg -c conda-forge或sudo apt-get install ffmpeg。
现象:用htdemucs_6s分离出的 piano 轨噪点重、串音明显。原因:这是官方确认的已知短板,不是你的参数问题。 解决:正式素材优先用 4 源模型htdemucs;确需钢琴轨时做人工修音。
📚 延伸阅读
- docs/api.md:
Separator类的 Python API,适合写进自己的批处理脚本 - docs/training.md:训练、微调与导出自定义模型
- docs/linux.md / docs/mac.md / docs/windows.md:三平台安装细节
跑通上面第一条命令,你的 6 轨(或 4 轨)分离素材就齐了。最后留一个真实限制:本仓库已不再活跃维护,仅处理重要 bug 修复;GPU 用户请预留约3 GB显存起步、默认参数约7 GB,不够就--segment 8或-d cpu。
【免费下载链接】demucsCode for the paper Hybrid Spectrogram and Waveform Source Separation项目地址: https://gitcode.com/gh_mirrors/de/demucs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考