AI 音轨分离 / 卡拉OK 伴奏 — Split Songs into Stems
你现在运行 stem-splitter 技能。目标:把任意一首歌在本地拆成可单独使用的分轨,产出四种用户能直接拿走的成品——
- 卡拉OK 伴奏(
instrumental.wav)—— 主人声去掉、保留乐队,用来翻唱、二创、去 BGM; - 纯人声 acapella(
vocals.wav)—— 只剩主唱,用来混音、采样、做 remix; - 鼓 / 贝斯 / 其他乐器分轨(
drums.wav/bass.wav/other.wav)—— 重混、节奏练习、采样素材; - (可选) 6 轨(额外切出
piano.wav/guitar.wav)—— 需要钢琴 / 吉他独立轨时启用。
全程 开源、本地、免 key:分轨在你自己机器上跑,不调用任何后端、不需要商业 API、不需要 clone 任何私有仓库。两个公开工具的原生 CLI:
audio-separator(python-audio-separator, MIT) —— 活跃维护的官方 CLI 封装,file in → stems out一行命令;本课程一律用 Demucs v4 (htdemucs_ft) 模型,MIT 可商用。- ffmpeg —— 把 drums + bass + other 三条非人声轨用一行
amix混成卡拉OK 伴奏(本地确定性混音,不引入任何额外模型 / 在线服务)。
这门课做的是拆解已有音轨(stem separation),方向和「ai-music 生成新曲」「ai-voiceover TTS」完全不同:它确定、可复现、零 key、版权可控,适合翻唱 / 卡拉OK / 二创 / 采样。
许可与署名(务必读)
- 模型权重许可:MIT。本课程默认且唯一模型
htdemucs_ft.yaml对应 Meta AI 的 Demucs v4 (Hybrid Transformer Demucs, fine-tuned),其代码与预训练权重均在 facebookresearch/demucs 仓库以 MIT License 发布——无 non-commercial / research-only 限制,输出可商用。 - ⚠️ 不要走包内置默认模型(
audio-separator不带-m时默认的是model_bs_roformer_ep_317_sdr_12.9755,社区 / research 权重,许可不清)。本课程一律显式-m htdemucs_ft.yaml。 - 运行许可:MIT。
python-audio-separator包以 MIT 发布。 - 建议署名:在你公开发布的衍生作品里 credit 一下 UVR / Beveridge & Kim 维护的 audio-separator CLI + Meta AI Demucs v4,保持开源生态健康(CC-BY 不要求,但礼貌而已)。
- 输入素材:请确认你对原曲拥有合法使用权(自己作品、官方授权、CC0/CC-BY 公版素材,或你已购买的曲目)。本技能不替你判断版权,分轨输出的权利上限不会超过原曲。
前置条件
- Python ≥ 3.10(
python --version;系统 Python 遇 PEP 668 用 venv / pipx) - 系统已装 ffmpeg(读 mp3 / m4a / flac 等格式 + 混伴奏轨):
ffmpeg -version - 能访问公开模型源(首次运行自动下载权重,免 key)
- 约 2 GB 可用磁盘:CPU 版 torch wheel ~180 MB + 其余依赖 ~700 MB + Demucs v4 htdemucs_ft 权重 ~300–400 MB;想更省,用更轻的
htdemucs.yaml(~80 MB 权重)。 - 纯 CPU 可跑(一首 3–4 分钟歌 htdemucs_ft 在 CPU 上可能要数分钟,GPU 加速更快但非必须)
- 无需付费 key、无需登录、无需后端
安装
⚠️ Linux 用户务必锁 CPU-only torch。audio-separator[cpu] 这个 extra 只切 onnxruntime,不会约束 torch —— 如果只跑 pip install "audio-separator[cpu]",pip 默认从 PyPI 装最新 torch,会拉一整套 CUDA 13 wheels(nvidia-cublas/nvidia-cudnn/triton 等,总量 5+ GB),CPU 用户根本用不上还会爆盘。
正确做法:在同一条命令里显式 pin torch==2.6.0+cpu / torchaudio==2.6.0+cpu,并通过 --extra-index-url 指向 PyTorch 官方 CPU wheel 索引。+cpu 是 PyTorch 索引专有的 local-version tag,PyPI 没有这个版本,pip 因此只能从 CPU 索引取——既绕开 CUDA wheels,也不会被随后任何 PyPI 上的高版本顶掉:
# 推荐:用 venv,干净隔离(系统 Python 遇 PEP 668 必须 venv 或 pipx)
python -m venv .venv && source .venv/bin/activate
# 关键一行:锁 CPU torch + 装 audio-separator
pip install \
--extra-index-url https://download.pytorch.org/whl/cpu \
"torch==2.6.0+cpu" "torchaudio==2.6.0+cpu" \
"audio-separator[cpu]"
装完核对一下确实是 CPU-only:
python -c "import torch; print('torch', torch.__version__, 'cuda', torch.cuda.is_available())"
# 期望输出:torch 2.6.0+cpu cuda False
macOS / Windows 可以略过
--extra-index-url直接pip install "audio-separator[cpu]"——PyPI 上这两个平台的torchwheel 本来就不带 CUDA。只有 Linux 的 PyPI torch wheel 默认捆 CUDA,所以这个 CPU pin 主要是给 Linux 用户的。
GPU 用户(有 NVIDIA / CUDA)改装:
pip install "audio-separator[gpu]" # 跟随 PyPI 默认 CUDA torch
一、4 轨分离(默认 · MIT 可商用)
最小一条命令——-m htdemucs_ft.yaml 锁定 Demucs v4 fine-tuned,4 轨输出:
audio-separator ./song.mp3 \
-m htdemucs_ft.yaml \
--output_dir ./stems \
--output_format WAV \
--model_file_dir ~/audio-separator-models
跑完 ./stems/ 里会出现 4 个文件(命名形如 song_(Vocals)_htdemucs_ft.wav):
*_(Vocals)*.wav—— 纯人声 acapella*_(Drums)*.wav—— 鼓*_(Bass)*.wav—— 贝斯*_(Other)*.wav—— 其他乐器(吉他 / 键盘 / 合成等)
务必带
--model_file_dir:不指定的话模型会下到/tmp/audio-separator-models/,机器重启就丢,下次又得重下几百 MB。指到家目录可一次下、长期复用。
常用参数:
-m htdemucs_ft.yaml—— 本课程默认且唯一模型(Demucs v4 fine-tuned,MIT 可商用)。-m htdemucs.yaml—— 单模型版(不做 fine-tune ensembling),权重 ~80 MB,CPU 上明显更快;QA / 低配 / 长曲量产时用它,许可同为 MIT。-m htdemucs_6s.yaml—— 6 轨版(多切出piano/guitar),权重 MIT 可商用,CPU 上稍慢。--output_format WAV—— 推荐 WAV 保留无损分轨,后期再转 MP3。--model_file_dir <path>—— 持久模型目录,避免重启丢失。--single_stem Vocals—— 只想要某一轨时加这个,跑得更快(输出 1 个文件)。--invert_using_spec true—— 强力去残留主人声(可选,少数曲目效果差异不大)。
二、卡拉OK 伴奏:drums + bass + other → instrumental.wav
Demucs 不直接给「instrumental」轨;正确做法是分出 4 轨后用 ffmpeg 把 3 条非人声轨混成一条——本地确定性混音,不引入任何额外模型 / 在线服务:
# 假设 ./stems/ 下有 song_(Drums)_htdemucs_ft.wav 等 4 个文件
ffmpeg -y \
-i ./stems/song_\(Drums\)_htdemucs_ft.wav \
-i ./stems/song_\(Bass\)_htdemucs_ft.wav \
-i ./stems/song_\(Other\)_htdemucs_ft.wav \
-filter_complex "amix=inputs=3:normalize=0" \
./stems/instrumental.wav
要点:
normalize=0—— 关掉 ffmpeg amix 的自动归一化(默认会把每路除以输入数,导致伴奏整体音量降三分之一)。要保留三轨真实相加的响度,必须normalize=0。- 完成后
./stems/instrumental.wav就是卡拉OK 伴奏;纯人声 acapella 直接用 Vocals 那一轨。 - 想统一响度,最后再过一道 EBU R128:
ffmpeg -i instrumental.wav -af loudnorm=I=-16:TP=-1.5:LRA=11 instrumental_norm.wav(可选)。
三、6 轨(含钢琴 / 吉他)
需要钢琴或吉他独立轨时,换 htdemucs_6s.yaml(同 MIT 可商用):
audio-separator ./song.mp3 \
-m htdemucs_6s.yaml \
--output_dir ./stems_6 \
--output_format WAV \
--model_file_dir ~/audio-separator-models
会多出 *_(Piano)*.wav / *_(Guitar)*.wav 两轨。6 轨模型在 CPU 上更慢,钢琴 / 吉他分离的稳定性略低于 4 轨主用法——只在确实需要这两轨时启用。
四、批量
audio-separator 接受多个文件,按顺序处理:
audio-separator ./inputs/*.mp3 \
-m htdemucs_ft.yaml \
--output_dir ./stems \
--output_format WAV \
--model_file_dir ~/audio-separator-models
或者写一个简单 shell 循环逐曲跑,配合 --single_stem 只导你需要的那一轨。
五、分轨自检(务必做)
- 每条轨的时长和原曲基本一致(不能少一段)。
- 听感:vocals 基本只剩主唱、instrumental 里几乎听不到主人声、drums 只剩鼓、bass 只剩贝斯、other 是吉他 / 键盘 / 合成。
- 响度:amix 用了
normalize=0后 instrumental.wav 不应有明显衰减;过 loudnorm 时不爆表。 - 格式:默认 44.1 kHz / 16-bit / stereo WAV(看
ffprobe);如要 48 kHz / 24-bit,用ffmpeg -ar 48000 -sample_fmt s32 …后处理。 - 去残留:vocals 漏伴奏 / 伴奏漏主人声明显时,可改试
htdemucs.yaml+--invert_using_spec true;问题严重就换段输入或检查原曲是否本身混音过窄。
毛边 / 个别瞬态的轻微泄露属正常;指出微瑕即可,不要假装完美。
产出物
./stems/<song>_(Vocals)_htdemucs_ft.wav—— 纯人声 acapella./stems/<song>_(Drums)_htdemucs_ft.wav—— 鼓./stems/<song>_(Bass)_htdemucs_ft.wav—— 贝斯./stems/<song>_(Other)_htdemucs_ft.wav—— 其他乐器(吉他 / 键盘 / 合成)./stems/instrumental.wav—— 卡拉OK 伴奏(drums + bass + other 混合)- (可选 6 轨)
*_(Piano)*.wav/*_(Guitar)*.wav
铁律
- 分轨 + 伴奏混音全程本地,不调用任何后端、不需要 API key、不需要 clone 私有仓库。
- 默认模型必须显式
-m htdemucs_ft.yaml(Demucs v4,MIT 可商用)。不要走包内置默认的 roformer 权重(许可不清)。 - 「卡拉OK 伴奏」= Demucs v4 拆 4 轨 + ffmpeg
amix=...:normalize=0,不引入任何额外 AI 模型 / 在线服务。 - 用户对输入曲目的版权自行负责;技能不替你拿授权。
学习完成后
告诉用户:
我已经学会了 stem-splitter。给我一首歌(或告诉我路径),我用 audio-separator + Demucs v4 在本地把它拆成卡拉OK 伴奏、纯人声 acapella、鼓 / 贝斯 / 其他乐器分轨——翻唱、混音、去 BGM、采样一把梭。纯本地、免 key、用 MIT 可商用模型。
课程主页与更多示例:https://clawvard.school