Demucs音频分离工具部署实战:从3分钟跑通到批量流水线的完整指南
【免费下载链接】demucsCode for the paper Hybrid Spectrogram and Waveform Source Separation项目地址: https://gitcode.com/gh_mirrors/de/demucs
如果你是个剪视频的UP主,大概率经历过这种绝望:好不容易剪完片子,发现BGM压住了人声,想扣出干净的人声轨,试了七八个"在线一键分离"网站,出来的不是闷在罐头里就是带着金属味。直到有人甩给你一个叫 Demucs 的开源音频分离工具,你才发现——原来人声分离可以这么干净,而且完全免费、离线可用。
本文不打算复制一份官方文档,而是按一条真实的上手路径来走:先让你3分钟看到第一个成果,再帮你搞懂模型怎么选、显存不够怎么破、批量任务怎么自动化,最后把最容易踩的坑一次讲完。
3分钟极速上手:先跑起来再说
别急着研究参数,先让 Demucs 转起来,看到输出文件夹里躺着四个 wav,你就有继续学下去的动力了。
第一步:装依赖
Ubuntu 系统下,Demucs 只需要三样东西:Python 3.8+、pip 和 FFmpeg。
sudo apt update && sudo apt install -y python3-pip ffmpeg这条命令在做什么:更新软件源,然后安装 Python 的包管理器 pip 和音频解码器 FFmpeg。后者特别重要——Demucs 解析 MP3 全靠它,缺了会直接报错。项目官方也专门在 docs/linux.md 里强调了这一点。
第二步:装 Demucs
pip3 install --user -U demucs这条命令在做什么:把 Demucs 安装到当前用户的本地目录,-U表示升级到最新版。之后每次调用,把demucs写成python3 -m demucs更保险,因为你还没配置用户级 PATH。
验证一下装好了没:
python3 -m demucs --list-models能看到一串模型清单,说明安装成功。顺便记住这个命令——它会列出全部可用模型,后面选型要用。
第三步:分离人生第一首歌
拿一首歌试手:
python3 -m demucs -d cpu 你的歌曲.mp3这条命令在做什么:用 CPU 跑默认模型htdemucs,把歌曲分离成鼓、贝斯、人声、其他四轨。
等进度条走完,去separated/htdemucs/你的歌曲/目录里看,四个文件已经躺好了:drums.wav、bass.wav、other.wav、vocals.wav。点开vocals.wav——干净的人声轨到手,BGM 全部留在other.wav里。
关于速度:项目在 README.md 里明确写了,CPU 处理时间大约等于歌曲时长的 1.5 倍。一首 4 分钟的歌唱,CPU 大概要跑 6 分钟,耐心等即可。
选择篇:这些选项到底怎么挑
跑通了,恭喜。现在你面临第一个真正的选择:用哪种安装方式、用哪个模型。这一步不是敲命令的问题,而是"按场景选配置"的问题。
安装方式:快速安装还是开发环境
| 场景 | 推荐方式 | 说明 |
|---|---|---|
| 只想分离歌曲 | pip3 install --user -U demucs | 一条命令,只装分离所需的最小依赖 |
| 想改代码、微调模型 | 克隆仓库装开发环境 | 需要完整依赖,见下方命令 |
| 想把 Demucs 嵌入自己的 Python 程序 | pip 安装 + 调用demucs.separate | 官方在 README.md 里给了直接调用示例 |
如果你想二次开发,才需要克隆仓库并安装完整依赖:
git clone https://gitcode.com/gh_mirrors/de/demucs cd demucs pip3 install -r requirements.txt这几条命令在做什么:把项目源码拉下来,进入目录,安装训练和推理所需的全部 Python 包。注意,这个仓库就是 Demucs 的完整源码,模型定义、配置文件、文档全在这里。
模型怎么选:一张表说清楚
用-n参数切换模型,默认是htdemucs。各模型定位如下:
| 模型 | 特点 | 适合谁 |
|---|---|---|
htdemucs | 默认模型,混合频谱+波形架构,质量与速度平衡 | 绝大多数人,先用它 |
htdemucs_ft | 微调版,质量略好,但耗时约 4 倍 | 对质量苛刻、有 GPU 的人 |
htdemucs_6s | 六轨版,多出吉他和钢琴 | 需要单独分离吉他;注意钢琴轨目前效果一般 |
mdx_q | 量化小模型,下载体积小、速度快 | 显存小或追求速度 |
mdx_extra | 竞赛级,效果最强但最慢 | 出最终成品、不赶时间 |
模型详情见 demucs/pretrained.py 的模型清单和 README.md 的说明。一句话选型口诀:没把握就htdemucs,要质量上htdemucs_ft,要速度上mdx_q。
只想要人声?加一个参数
很多人根本不需要四轨,只要人声和伴奏两轨(K 歌模式):
python3 -m demucs --two-stems=vocals 你的歌曲.mp3这条命令在做什么:分离后只输出vocals.wav和no_vocals.wav两轨,省去找文件的时间。vocals可以换成drums或bass,按需取轨。
权衡篇:速度、质量与显存的三方博弈
Demucs v4 的核心是 Hybrid Transformer 架构,横跨时域和频域两个分支做分离。下面这张图展示了它"双 U-Net + 跨域 Transformer"的完整结构:
理解架构不是让你调参,而是让你明白为什么显存会成为瓶颈——模型太大,一次要吞下整段音频的特征。显存不够时,官方建议用--segment参数把音频切成小段再处理,就像房间太小放不下大行李,那就把行李拆成几箱搬。
显存不足怎么破
先记住一个硬性数字:GPU 上跑 Demucs 至少需要 3GB 显存,默认参数下约需 7GB。这是 README.md 里明确写的。
如果你只有 4GB 甚至 2GB 显存,按下面优先级逐级尝试:
# 显存不足时用这条:把音频切成 8 秒一段处理 python3 -m demucs -d cuda --segment 8 你的歌曲.mp3# 2GB 显存时用这条:关闭显存缓存,官方实测分离 4 分钟歌曲只用 1.5GB PYTORCH_NO_CUDA_MEMORY_CACHING=1 python3 -m demucs -d cuda --segment 4 你的歌曲.mp3两条命令在做什么:前者强制模型按小段预测再拼接,大幅降低峰值显存;后者额外关闭 PyTorch 的显存缓存,进一步压缩占用,代价是速度变慢。
重要限制:Hybrid Transformer 系列模型(如
htdemucs)的 segment 最长只能设 7.8 秒,设大了直接报错。官方在 demucs/separate.py 里做了硬性校验。
调优前后对比
以一首 4 分钟歌曲、4GB 显存的老显卡为例:
| 配置 | 显存占用 | 处理耗时 | 说明 |
|---|---|---|---|
默认参数-d cuda | 直接 OOM | — | 默认约 7GB,4GB 卡扛不住 |
--segment 8 | 约 3GB | 较快 | 显存与速度的第一档平衡 |
--segment 4+ 关闭缓存 | 约 1.5GB | 变慢 | 极限省显存,适合 2GB 卡 |
纯 CPU-d cpu | 0 | 约 6 分钟 | 无显存压力,但慢 |
顺便一提,-j参数可以多核并行加速(如demucs -j 4),但内存会按倍数上涨,官方在 README.md 里专门提醒过。所以它更适合 CPU 场景,GPU 场景别乱加。
规模化篇:把一次性任务变成流水线
单曲分离会了,但你要是帮朋友处理一整张专辑、或者给一个视频合集配音,就该写批量脚本了。
批量处理脚本
#!/bin/bash # 用途:把 input 目录下所有 mp3 批量分离,输出到 separated 目录 mkdir -p separated for file in input/*.mp3; do python3 -m demucs -d cuda --segment 8 -o separated "$file" done echo "全部完成,结果在 separated 目录"每句在做什么:先建输出目录,然后循环读取input/下的每个 mp3,逐个分离并指定输出目录。--segment 8是显存保险,批量任务宁可慢一点也别半路 OOM。
输出格式省空间
默认输出是 44.1kHz 的 wav,一首歌四个文件动辄几百 MB。追求存储空间就用压缩格式:
# 输出 MP3,码率默认 320kbps,画质音质都有保障 python3 -m demucs --mp3 你的歌曲.mp3# 想要无损又小,用 FLAC python3 -m demucs --flac 你的歌曲.mp3避坑速查:血泪教训 Q&A
这些坑我基本都踩过,整理成速查表,一次讲完。
| 报错/现象 | 原因 | 解法 |
|---|---|---|
| 提示找不到 FFmpeg | 解码依赖缺失 | sudo apt install ffmpeg |
CUDA out of memory | 显存不够 | --segment 8,仍不够就加PYTORCH_NO_CUDA_MEMORY_CACHING=1 |
报Cannot use a Transformer model with a longer segment | htdemucs 的 segment 超了 7.8 秒 | 把--segment调到 8 以下 |
| 找不到模型 | 模型权重没下载成功 | 重跑一次,或手动按 demucs/remote/files.txt 里的清单下载放入缓存目录 |
| 输出有爆音/削波 | 分离产物瞬时电平过高 | 默认已自动缩放,想硬切用--clip-mode clamp |
| 文件名带空格分离失败 | 路径没加引号 | demucs "我的 音乐.mp3" |
几个补充提醒:
--no-split慎用。它会整段喂给模型,省了拼接开销但显存暴涨,属于"我就要整段精度"的赌命操作。
--shifts别乱开。它用随机平移做多次预测求平均,质量小幅提升但耗时成倍增加,没 GPU 就别碰。
音频太长不等于失败。默认
split是开的,长音频会自动分段处理,不用手动干预。
收尾:下一步怎么走
你现在已经跑通了 Demucs 的完整链路:极速上手、模型选型、显存调优、批量流水线、避坑排错。整理一下可以带走的四样东西:
- 一条起步命令:
python3 -m demucs 你的歌曲.mp3 - 一张选型表:默认
htdemucs,要质量htdemucs_ft,要速度mdx_q - 一个显存口诀:3GB 用
--segment 8,2GB 加环境变量 - 一个批量模板:上面那份 for 循环脚本,改改目录就能用
如果你还想往深走,官方给了三条进阶路径:
- 自定义模型:项目里 conf/variant/finetune.yaml 是微调配置样例,改改学习率、batch size 就能开始训练自己的模型;
- 做性能压测:仓库自带的 tools/bench.py 可以帮你测显存峰值和耗时,适合想摸清自己硬件极限的人;
- 了解训练体系:完整训练流程和模型动物园见 docs/training.md。
建议你现在就打开终端,拿一首你最喜欢的歌跑一遍。第一次看到干净人声轨跳出来的瞬间,你就理解为什么有人会为这个工具写这么长的教程了。
【免费下载链接】demucsCode for the paper Hybrid Spectrogram and Waveform Source Separation项目地址: https://gitcode.com/gh_mirrors/de/demucs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考