人声分离的模型和项目推荐:UVR or Demucs or Spleeter
大家好,我是烤鸭:
最近在搞新项目,遇到相关的技术了,做一个关于人声分离的技术分享。从框架分析到实际使用对比。还有demo调用和软件使用示例。
简介
先上豆包给的回答:
想要开箱即用、质量与功能均衡:选UVR5 GUI;需要极速与低门槛:选Spleeter;追求极致音质与灵活配置:选Demucs。三者均开源,可根据场景组合使用。
人声分离开源项目与模型推荐 (2025)
1️⃣ 最佳综合选择:Ultimate Vocal Remover 5 (UVR5)
- GitHub:https://github.com/Anjok07/ultimatevocalremovergui
- 特点:集多引擎于一体,支持MDX-Net、Demucs、VR Architecture等,分离质量高,社区评价可超越部分商业软件
- 易用性:⭐⭐⭐⭐⭐ 图形界面,一键式操作,无需编程
- 平台:Windows、macOS、Linux 全支持
- 安装:
- Windows:下载
.exe安装包,一路下一步 - macOS:下载
.dmg,拖动到 Applications - Linux:按文档安装依赖后运行
- Windows:下载
- 优势:
- 内置多模型,可一键切换与参数微调
- 支持人声、伴奏、鼓、贝斯等多音轨分离
- 可输出高保真音频 (最高192kHz/24bit)
- 适用人群:音乐爱好者、内容创作者、音频编辑者
2️⃣ 最佳轻量级与快速处理:Spleeter (Deezer 开源)
-
GitHub:https://github.com/deezer/spleeter (⭐️26.7k)
-
特点:轻量高效,Deezer 出品,支持2/4/5 音轨分离
-
易用性:⭐⭐⭐⭐☆ 安装简单,命令行友好,有图形界面版本
-
安装:
-
bash运行
pip install spleeter -
基本使用:
bash运行
spleeter separate -p spleeter:2stems -o output_folder input_audio.mp3 -
优势:
- 处理速度快,CPU 也能流畅运行,适合大批量处理
- 资源需求低,适合低配置设备
- 有 Python 库接口,便于集成到项目
-
适用人群:需要快速分离人声 / 伴奏、批量处理音频的用户
3️⃣ 最佳音质与专业级处理:Demucs (Meta AI 开源)
-
GitHub:https://github.com/facebookresearch/demucs (⭐️8.8k)
-
特点:基于Wave-U-Net与混合 Transformer,音质在多项评测中领先,适合复杂编曲
-
易用性:⭐⭐⭐⭐ 命令行或图形界面,需一定 Python 基础
-
安装:
bash运行
pip install demucs -
基本使用:
bash运行
demucs --two-stems=vocals input_audio.mp3 -
优势:
- 分离质量极高,SDR (信号失真比) 显著领先,人声更纯净
- 支持4/5 音轨分离,乐器分离更精准
- 可在 Colab 免费 GPU 环境运行,无需本地高配
-
注意:高质量模型 (如htdemucs_ft) 对硬件要求高,建议8GB + 显存 GPU
-
适用人群:音乐制作人、音频工程师、对音质要求极高的用户
功能对比速查表
| 特性 | UVR5 | Spleeter | Demucs |
|---|---|---|---|
| 分离质量 | ★★★★★ | ★★★★ | ★★★★★ |
| 处理速度 | ★★★★ | ★★★★★ | ★★★(高配 GPU 下★★★★) |
| 资源需求 | 中 - 高 (视模型而定) | 低 - 中 | 高 (高质量模型) |
| 安装难度 | ★★ | ★ | ★★ |
| 界面 | GUI (推荐) | CLI/Python API | CLI/GUI (第三方) |
| 模型数量 | 多种 (集成 MDX、Demucs 等) | 3 种 (2/4/5 stems) | 多种 (含量化模型) |
| 多轨支持 | 支持 (人声 + 乐器) | 2/4/5 stems | 4/5 stems |
| 开源协议 | MIT | MIT | MIT |
最佳实践与建议
-
入门用户:优先尝试UVR5 GUI,几乎零学习成本,直接拖拽即可获得高质量分离结果
-
开发者 / 批处理:使用Spleeter,轻量、易集成,适合自动化流程
-
音质发烧友:用Demucs的高质量模型 (如htdemucs_ft),搭配 GPU 获得专业级分离
-
进阶技巧
:
- 复杂音频可先用UVR5粗分离,再用Demucs精调
- Spleeter适合快速预览,确定最佳参数后再用高质量模型处理
- 处理长音频时,使用Demucs的
--segment参数分片处理,降低内存占用
总结
综合易用性、质量与功能,UVR5是当前最佳 “一键式” 选择;追求极致音质选Demucs;追求速度与低门槛选Spleeter。三者均开源,可按需组合使用,获得更全面的音频分离体验。
测试环境
- Python 3.11 or greater
- CUDA 12.8
- windows 4070S 12G
实际测试
挨个测试下这些模型,参考视频如下:
https://www.xiaohongshu.com/explore/66e1712300000000120123a3
原地址打不开了,可以自己搜一下。
“工作累了的话,就来智己LS6” 第一条就是。
ffmpeg相关命令:
#音频分离
ffmpeg -y -i input.mp4 -vn 输入音频.mp3
#波形图
ffmpeg -i 输入音频.mp3 -filter_complex "showwavespic=draw=full:s=640x240" -frames:v 1 波形图.png
-
Demucs
-
UVR
-
spleeter
UVR为基础的项目:
项目:https://github.com/nomadkaraoke/python-audio-separator
提取音频:
docker run -it -v E:\data\docker\audio-separator:/workdir beveradb/audio-separator ls6.mp3

波形图看的话整体效果还是不错的,除了23秒左右的特效音和结尾部分唱歌开头部分,基本都过滤了。声音也比较明显。

项目:https://github.com/Eddycrack864/UVR5-UI
可以选择模型,进行分离,更像是接入了通配的UI端,而且支持Win和Linux一键部署。


Demucs为基础的项目:
https://github.com/facebookresearch/demucs
https://modelscope.cn/models/monetjoe/hdemucs_high_musdbhq
使用魔塔下载模型文件
modelscope download --model monetjoe/hdemucs_high_musdbhq --local_dir D:\\models\\modelscope\\monetjoe\\hdemucs_high_musdbhq
测试demo
import torch
import torchaudio
import soundfile as sf
import os
from utils import download
# -------------------------- 1. 配置参数(仅需改这2处!)--------------------------
MODEL_DIR = "D:\\models\\modelscope\\monetjoe\\hdemucs_high_musdbhq" # 你的本地模型文件夹路径
OUTPUT_DIR = "/data/audios/outputs/" # 结果保存目录(自动创建)
# -------------------------- 2. 加载预训练模型 --------------------------
def load_sep_model(model_dir):
# 拼接权重文件路径(模型权重名固定为 hdemucs_high_musdbhq_only.pt)
weight_path = os.path.join(model_dir, "hdemucs_high_musdbhq_only.pt")
# 初始化HDemucs模型(分离目标:鼓、贝斯、其他乐器、人声)
model = torchaudio.models.hdemucs_high(sources=["drums", "bass", "other", "vocals"])
# 加载本地权重 + 切换推理模式
model.load_state_dict(torch.load(weight_path, map_location="cuda")) # 有GPU可改"cuda"
model = model.to("cuda") # 关键:将模型移至GPU
model.eval()
return model
def audio_separate(audio_path:str):
# 1. 加载模型
print("加载模型...")
model = load_sep_model(MODEL_DIR)
# 2. 加载并预处理音频(统一采样率44100Hz、转单通道、加batch维度)
# 2. 加载并预处理音频(只保留重采样,删除转单通道的步骤)
print(f"处理音频 网络地址:{audio_path}")
local_path = audio_path
file_uuid = ""
# 下载远程音频到本地
if audio_path and audio_path.startswith("http"):
local_path,file_uuid = download(audio_path)
print(f"处理音频:{local_path}, file_uuid:{file_uuid}")
waveform, sr = torchaudio.load(local_path)
# 重采样(模型只认44100Hz)
# 重采样后添加通道数处理
if sr != 44100:
waveform = torchaudio.transforms.Resample(sr, 44100)(waveform)
# 新增:如果是单通道,转换为2通道(复制单通道数据到两个通道)
if waveform.shape[0] == 1:
waveform = torch.cat([waveform, waveform], dim=0) # 形状从[1, length]变为[2, length]
# 加batch维度
waveform = waveform.unsqueeze(0).to("cuda")
# 3. 执行分离(禁用梯度加速)
print("正在分离...")
with torch.no_grad():
separated = model(waveform) # 输出shape:[1,4,1,音频长度](4对应4个源)
# 4. 保存结果
os.makedirs(OUTPUT_DIR, exist_ok=True)
# 提取人声
vocals_filename = f"{file_uuid}-vocals.wav"
vocals = separated[0, 3, 0].cpu().numpy() # 先cpu()移至CPU,再转numpy
sf.write(os.path.join(OUTPUT_DIR, vocals_filename), vocals, 44100)
print(f"已保存:{os.path.join(OUTPUT_DIR, vocals_filename)}")
# 合并非人声(drums + bass + other)
bgms_filename = f"{file_uuid}-bgms.wav"
non_vocals = separated[0, 0, 0].cpu().numpy() + separated[0, 1, 0].cpu().numpy() + separated[0, 2, 0].cpu().numpy()
sf.write(os.path.join(OUTPUT_DIR, bgms_filename), non_vocals, 44100)
print(f"已保存:{os.path.join(OUTPUT_DIR, bgms_filename)}")
print(f"\n分离完成!结果在:{os.path.abspath(OUTPUT_DIR)}")
return {
"vocals": vocals_filename,
"bgms": bgms_filename
}
if __name__ == "__main__":
audio_separate("D:\\xxx\\ls6.mp3")
声音饱和度比UVR好一些,不过细节太差了,杂音很多,基本每句话都能听到背景音。

spleeter为基础的项目:
https://github.com/deezer/spleeter
调试也非常简单,本地需要ffmpeg
# install spleeter with pip
pip install spleeter
# 分离音频
spleeter separate -p spleeter:4stems -o output E:\\my\\my-blog\\大模型\\人声分离\\ls6.mp3
波形图也能看出来,采样点更多。整体效果听起来不太好,8秒和13秒的杂音未过滤,结尾的唱歌人声压缩过重,还不如不处理。

总结
很多声音的频率跟人声音差不多,比如场景杂音或者加的背景特效音,完全过滤还是比较难的,少不了二次手动处理。如果有固定的声音场景,可以考虑自己训练lora。
实际体验下来的话,跟豆包给的结论差不多。
追求准确率的用UVR或者Demucs,需要GPU。个人测试的话,感觉UVR更好一些,不过可能样本有关系,后来又测试了几个,这俩效果差不多。
资源不够的话,用spleeter。
文章参考
https://github.com/Eddycrack864/UVR5-UI
https://github.com/nomadkaraoke/python-audio-separator
https://github.com/deezer/spleeter
https://github.com/facebookresearch/demucs
https://github.com/charzy/Hybrid-Demucs-v3-
https://blog.csdn.net/gitblog_00669/article/details/151734608
https://blog.csdn.net/gitblog_00380/article/details/151549046
更多推荐

所有评论(0)