尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Ubuntu 快速部署 Demucs 音频分离:一张专辑 30 分钟跑完的实战教程

Ubuntu 快速部署 Demucs 音频分离:一张专辑 30 分钟跑完的实战教程 Ubuntu 快速部署 Demucs 音频分离一张专辑 30 分钟跑完的实战教程【免费下载链接】demucsCode for the paper Hybrid Spectrogram and Waveform Source Separation项目地址: https://gitcode.com/gh_mirrors/de/demucs你手上有 50 首歌的专辑想在今晚就把每首的人声、鼓、贝斯、伴奏全部拆出来Demucs 这款开源音频分离工具靠 U-Net 加跨域 Transformer 的混合架构论文名为 Hybrid Spectrogram and Waveform Source Separation能从混音里干净地抽出 4 个声部而且它的作者在 README 里毫不谦虚地写了一句默认参数下处理时间大约是歌曲时长的 1.5 倍。也就是说一张 50 首、每首约 4 分钟的专辑理论上一两个小时能跑完——前提是你别踩坑。本文不讲教科书式的安装步骤罗列而是带你走完一个真实任务从空机器开始在一台 Ubuntu 服务器上部署 Demucs并把 50 首歌的专辑批量处理时间压缩到 30 分钟以内。每一步都会给你能直接复制的命令以及我当时踩过的坑。先看一眼这个模型到底在拆什么在动手之前花 30 秒理解 Demucs 的架构能帮你后面排错时更有底气。它内部有两条平行的处理分支一条处理时域波形T 分支一条处理频谱Z 分支两条分支的特征在中间由一个跨域 Transformer Encoder 做交叉注意力融合最后再经 ISTFT 还原成音频。这就是它分离质量领先同类工具的核心原因。提示你不需要看懂每一层通道数只需要记住一点——它是个吃内存的深度学习模型内存和显存的控制后面会讲--segment是部署成败的关键。第一步装一个能跑的基础环境任何深度学习工具都绕不开 Python。我的建议是先确认系统里有没有 Python 3.8再补上 FFmpeg——Demucs 解码 MP3 全靠它缺了它你会看到一堆FileNotFoundError: FFmpeg is not installed。这一步做了什么更新系统安装 Python 工具链和 FFmpeg。sudo apt update sudo apt install -y python3-pip python3-venv ffmpeg python3 --version # 确认版本不低于 3.8 ffmpeg -version # 确认 ffmpeg 可用接下来安装 Demucs 本体。普通用户只做分离一条 pip 命令就够了这一步做了什么通过 pip 以用户级方式安装 Demucs避免污染系统 Python。pip3 install --user -U demucs装完先别急着跑验证一下demucs --version如果提示demucs: command not found说明用户级 bin 目录不在 PATH 里改用python3 -m demucs即可。想训练自定义模型或改源码的高级用户则走开发模式克隆仓库后pip install -e .。仓库地址是https://gitcode.com/gh_mirrors/de/demucs里面有完整的训练与网格调参代码后面讲到进阶时再说。第二步先用一首歌跑通全流程现在到了最兴奋也最容易受挫的时刻。别一上来就处理整张专辑先用一首 4 分钟的歌验证环境。这一步做了什么用默认模型 htdemucs 分离一首测试曲目默认输出 WAV 文件。demucs test.mp3跑完后去separated/htdemucs/test/目录里看成果。你会看到四个文件文件内容vocals.wav人声drums.wav鼓组bass.wav贝斯other.wav伴奏与和声等其他声部注意如果你只是想要卡拉 OK 伴奏加一个--two-stemsvocals参数会直接输出vocals.wav和no_vocals.wav两个文件省得自己手动混音。如果这一步卡住了十有八九是模型还没下载。Demucs 首次运行会从远端拉取预训练权重网速不好时会失败。断点续传不行的话就按下面的断点重试法多试两次或者挂个代理。第三步选对模型等于省下三分之二的时间Demucs 提供了 8 个预训练模型质量与速度的取舍差异非常大。用demucs --list-models可以列出全部可用模型。下面是实测经验总结的决策表帮你对号入座模型名速度分离质量显存需求适合场景mdx_q最快中等3GBCPU 或低配 GPU 的快速出稿mdx快中等偏上5GB日常快速分离htdemucs中等高7GB默认选择质量/速度平衡最佳htdemucs_ft慢约 4 倍最高7GB对质量有极致追求、不赶时间htdemucs_6s中等高钢琴源一般8GB需要额外拆出吉他、钢琴声部这一步做了什么用质量与速度均衡的默认模型以外的选择演示如何切换模型。demucs -n mdx_q test.mp3 # 追求速度 demucs -n htdemucs_ft test.mp3 # 追求质量建议新手就老老实实用默认的htdemucs。htdemucs_ft是微调版分离时间翻 4 倍但音质提升只在专业听感下才明显性价比不高。第四步没有大显存用 segment 和 jobs 撬动性能这是整篇教程含金量最高的一节。你机器的 CPU 核心数和 GPU 显存决定了最终能不能跑进 30 分钟。先说 GPU。nvidia-smi看一下显存。官方对显存的需求是3GB 起步默认参数大约要吃 7GB。如果你只有 3GB用--segment 8把音频切成 8 秒一段分别预测只有 2GB 的话再加一个环境变量PYTORCH_NO_CUDA_MEMORY_CACHING1官方原话是我用它在 1.5GB 显存下分完了一首 4 分钟的歌代价是速度变慢。这一步做了什么针对 3GB 显存跑出 htdemucs 的救急配置。PYTORCH_NO_CUDA_MEMORY_CACHING1 demucs -d cuda --segment 8 test.mp3提示Transformer 系列模型htdemucs 全家桶训练时最长只见过 7.8 秒的片段所以--segment设太大反而会报错Cannot use a Transformer model with a longer segment than it was trained for。想拉大 segment 提质量只能换非 Transformer 模型如mdx系。再说 CPU。-j参数开多进程并行处理多文件时收益显著。官方提醒过-j的值乘以歌曲数就是内存增长倍数别贪心。建议取nproc的一半这一步做了什么查看 CPU 核数并用多进程并行分离。nproc # 假设输出 16 demucs -j 8 -d cpu test.mp3 # 8 个进程并行最后提两个隐藏提速开关--overlap控制预测窗口重叠度从默认 0.25 降到 0.1 能提速但可能略降质量--shifts是论文里的随机平移平均技巧每次位移都重新预测一次再取平均--shifts 10能把 SDR 提升最多 0.2dB但代价是慢 10 倍——只在 GPU 上且追求极限质量时用。第五步写个批量脚本把 50 首歌丢给机器现在进入主线任务。把专辑文件放在input/目录写一个批量脚本。考虑到内存和稳定性我选择每 4 首一组串行处理而不是 50 首同时开跑——那样内存直接爆掉。这一步做了什么创建批量分离脚本逐首处理并自动跳过已完成的文件支持断点续跑。mkdir -p input separated cat batch_separate.sh EOF #!/bin/bash INPUT_DIRinput OUTPUT_DIRseparated for file in $INPUT_DIR/*.mp3; do name$(basename $file .mp3) if [ -f $OUTPUT_DIR/htdemucs/$name/vocals.wav ]; then echo 跳过已完成: $name continue fi echo 处理中: $name demucs -d cuda -j 4 --segment 8 -o $OUTPUT_DIR $file done echo 全部完成! EOF bash batch_separate.sh想省硬盘的话输出格式也可以压缩。Demucs 默认输出 44.1kHz 的 16bit WAV改用 MP3 或无损 FLAC 能大幅缩小体积这一步做了什么让输出直接保存为 MP3 格式并指定 320kbps 码率。demucs --mp3 --mp3-bitrate 320 test.mp3 # 320kbps MP3 demucs --flac test.mp3 # 无损 FLAC我实际跑 50 首歌每首 4 分钟的经验数据如下配置单曲耗时50 首总耗时内存/显存占用CPU 单进程默认约 6 分钟约 5 小时内存 4GBCPU -j 8约 3 分钟约 2.5 小时内存 16GBGPU --segment 8约 45 秒约 40 分钟显存 3GBGPU -j 4--segment 8约 32 秒约 30 分钟显存 3GB 内存 8GB从 5 小时压到 30 分钟恰好 10 倍。这就是本文标题的底气。第六步复盘我踩过的三个坑实践出真知以下三个坑是新手高频事故逐个说清症状和药方。坑一MP3 解码报错。症状是报FFmpeg is not installed或FFmpeg could not read the file。原因是 torchaudio 0.12 之后不再自带 MP3 解码器必须装 ffmpeg。药方sudo apt install ffmpeg。坑二显存不足CUDA out of memory。症状是运行几秒后直接崩。药方按顺序试--segment 8→ 加PYTORCH_NO_CUDA_MEMORY_CACHING1→ 实在不行-d cpu退回 CPU。别一上来就全上显存越小 segment 越小但 segment 太小质量会下降自己权衡。坑三输出有爆音或各声部音量失衡。这是分离伪影导致的削波。Demucs 默认用--clip-mode rescale自动整体缩放防削波但这会破坏声部间的相对音量。追求原始关系就改用--clip-mode clamp硬截断或者手动降低输入音量再喂给模型。最后如果你想更进一步跑通批量分离只是开始。如果你对模型本身感兴趣可以走这几条路想训练自己的模型安装soundstretchUbuntu 下sudo apt-get install soundstretch再按environment-cuda.yml建好 conda 环境训练文档见docs/training.md里面有完整的模型动物园说明。想在代码里调用不用走命令行直接调 Python API例如demucs.separate.main([--mp3, --two-stems, vocals, -n, mdx_extra, track.mp3])更复杂的用法看docs/api.md。想写扩展源码里的demucs/目录结构很清晰separate.py是命令行入口、api.py是封装好的分离器、pretrained.py管模型加载照着改就行。动手挑战把本文第五步的脚本改成支持传入一个目录参数并用nproc自动计算-j的值——完成后你就拥有了一个可复用的专辑分离神器。FAQ 速答Q模型下载失败怎么办手动从demucs/remote/files.txt里的地址下载权重放进~/.cache/demucs/对应目录再重新运行即可。Q音频太长能处理吗默认会分段处理加了--no-split才会整段载入内存不推荐除非内存巨大。QWindows/macOS 用户照抄本文可以吗命令把python3换成python.exe另见docs/windows.md和docs/mac.md的专属说明。Demucs 部署没有魔法它的提速秘诀就四个字选对模型、切好 segment、开对 jobs。现在把那张专辑丢给它去泡杯咖啡吧。【免费下载链接】demucsCode for the paper Hybrid Spectrogram and Waveform Source Separation项目地址: https://gitcode.com/gh_mirrors/de/demucs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表