三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Demucs音频分离工具部署实战:从3分钟跑通到批量流水线的完整指南

Demucs音频分离工具部署实战:从3分钟跑通到批量流水线的完整指南

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.wavbass.wavother.wavvocals.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.wavno_vocals.wav两轨,省去找文件的时间。vocals可以换成drumsbass,按需取轨。

权衡篇:速度、质量与显存的三方博弈

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 cpu0约 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 segmenthtdemucs 的 segment 超了 7.8 秒--segment调到 8 以下
找不到模型模型权重没下载成功重跑一次,或手动按 demucs/remote/files.txt 里的清单下载放入缓存目录
输出有爆音/削波分离产物瞬时电平过高默认已自动缩放,想硬切用--clip-mode clamp
文件名带空格分离失败路径没加引号demucs "我的 音乐.mp3"

几个补充提醒:

--no-split慎用。它会整段喂给模型,省了拼接开销但显存暴涨,属于"我就要整段精度"的赌命操作。

--shifts别乱开。它用随机平移做多次预测求平均,质量小幅提升但耗时成倍增加,没 GPU 就别碰。

音频太长不等于失败。默认split是开的,长音频会自动分段处理,不用手动干预。

收尾:下一步怎么走

你现在已经跑通了 Demucs 的完整链路:极速上手、模型选型、显存调优、批量流水线、避坑排错。整理一下可以带走的四样东西:

  1. 一条起步命令python3 -m demucs 你的歌曲.mp3
  2. 一张选型表:默认htdemucs,要质量htdemucs_ft,要速度mdx_q
  3. 一个显存口诀:3GB 用--segment 8,2GB 加环境变量
  4. 一个批量模板:上面那份 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),仅供参考

← 返回列表