音频分离器 🎶
概要:通过命令行或在您自己的Python项目中作为依赖项使用的简易音频声部分离工具,使用了@Anjok07和@aufr33在UVR中提供的出色的MDX-Net、VR Arch、Demucs和MDXC模型。
音频分离器是一个Python包,允许您使用@Anjok07为UVR (https://github.com/Anjok07/ultimatevocalremovergui) 训练的模型将音频文件分离成各种声部。
这个包最简单(可能也是最常用)的用例是将音频文件分离成两个声部:伴奏和人声,这对制作卡拉OK视频非常有用!然而,UVR中可用的模型可以将音频分离成更多声部,如鼓、贝斯、钢琴和吉他,并执行其他音频处理任务,如去噪或去除回声/混响。
特性
- 将音频分离成多个声部,例如伴奏和人声。
- 支持所有常见音频格式(WAV、MP3、FLAC、M4A等)。
- 能够使用PTH或ONNX格式的预训练模型进行推理。
- 支持CLI,便于在脚本和批处理中使用。
- Python API,可集成到其他项目中。
安装 🛠️
🐳 Docker
如果您可以使用docker,实际上您不需要"安装"任何东西 - Docker Hub上发布了用于GPU(CUDA)和CPU推理的镜像,支持amd64
和arm64
平台。
您可能想要挂载一个包含要分离的文件的文件夹,该文件夹也可以用作输出文件夹。
例如,如果您当前目录有文件input.wav
,您可以如下所示执行audio-separator
(详见使用部分):
docker run -it -v `pwd`:/workdir beveradb/audio-separator input.wav
如果您使用的是带GPU的机器,您需要使用特定的GPU镜像并将GPU设备传递给容器,如下所示:
docker run -it --gpus all -v `pwd`:/workdir beveradb/audio-separator:gpu input.wav
如果无法检测到GPU,请确保您的docker运行时环境正确传递GPU - 网上有各种指南可以帮助您解决这个问题。
🎮 带CUDA的Nvidia GPU或 🧪 Google Colab
支持的CUDA版本: 11.8和12.2
💬 如果配置成功,运行audio-separator --env_info
时应该会看到这条日志消息:
ONNXruntime有可用的CUDAExecutionProvider,启用加速
Conda: conda install pytorch=*=*cuda* onnxruntime=*=*cuda* audio-separator -c pytorch -c conda-forge
Pip: pip install "audio-separator[gpu]"
Docker: beveradb/audio-separator:gpu
Apple Silicon,搭载M1或更新CPU的macOS Sonoma+(CoreML加速)
💬 如果配置成功,运行audio-separator --env_info
时应该会看到这条日志消息:
ONNXruntime有可用的CoreMLExecutionProvider,启用加速
Pip: pip install "audio-separator[cpu]"
🐢 无硬件加速,仅CPU
Conda: conda install audio-separator-c pytorch -c conda-forge
Pip: pip install "audio-separator[cpu]"
Docker: beveradb/audio-separator
🎥 FFmpeg依赖
💬 要测试audio-separator
是否已成功配置使用FFmpeg,请运行audio-separator --env_info
。日志将显示FFmpeg已安装
。
如果您使用conda
或docker
安装了audio-separator
,FFmpeg应该已经在您的环境中可用。
您可能需要单独安装FFmpeg。在大多数平台上应该很容易安装,例如:
🐧 Debian/Ubuntu: apt-get update; apt-get install -y ffmpeg
macOS: brew update; brew install ffmpeg
使用Pip进行GPU / CUDA特定安装步骤
理论上,要使audio-separator
与GPU一起工作,您只需要像上面那样使用[gpu]
额外选项安装它。
然而,有时让PyTorch和ONNX Runtime都支持CUDA可能有点棘手,所以可能不会那么容易就成功。
您可能需要直接重新安装这两个包,允许pip计算适合您平台的正确版本,例如:
pip uninstall torch onnxruntime
pip cache purge
pip install --force-reinstall torch torchvision torchaudio
pip install --force-reinstall onnxruntime-gpu
我通常建议使用这里的向导推荐的命令为您的环境安装最新版本的PyTorch: https://pytorch.org/get-started/locally/
可能需要多个CUDA库版本
根据您的CUDA版本和环境,您可能需要安装特定版本的CUDA库,以便ONNX Runtime使用您的GPU。
🧪 例如,Google Colab现在默认使用CUDA 12,但ONNX Runtime仍然需要CUDA 11库才能工作。
如果运行audio-separator
时看到Failed to load library
或cannot open shared object file
错误,这可能就是问题所在。
您可以像这样在CUDA 12旁边安装CUDA 11库:
apt update; apt install nvidia-cuda-toolkit
注意:如果有人知道如何让这个过程更简洁,以便我们可以在不同平台特定的硬件加速依赖项之间进行支持,而无需为每个平台单独安装,请告诉我或提出PR!
使用 🚀
命令行界面(CLI)
您可以通过命令行使用音频分离器,例如:
audio-separator /path/to/your/input/audio.wav --model_filename UVR-MDX-NET-Inst_HQ_3.onnx
这个命令将下载指定的模型文件,处理audio.wav
输入音频,并在当前目录生成两个新文件,一个包含人声,一个包含伴奏。
注意: 您不需要自己下载任何文件 - audio-separator会自动为您完成这个工作!
要查看支持的模型列表,运行audio-separator --list_models
列表模型输出中列出的任何文件都可以通过model_filename参数指定(带文件扩展名)(例如--model_filename UVR_MDXNET_KARA_2.onnx
),它将在首次使用时自动下载到--model_file_dir
(默认:/tmp/audio-separator-models/
)文件夹。
完整命令行界面选项
用法: audio-separator [-h] [-v] [-d] [-e] [-l] [--log_level LOG_LEVEL] [-m MODEL_FILENAME] [--output_format OUTPUT_FORMAT] [--output_dir OUTPUT_DIR] [--model_file_dir MODEL_FILE_DIR] [--invert_spect]
[--normalization NORMALIZATION] [--single_stem SINGLE_STEM] [--sample_rate SAMPLE_RATE] [--mdx_segment_size MDX_SEGMENT_SIZE] [--mdx_overlap MDX_OVERLAP] [--mdx_batch_size MDX_BATCH_SIZE]
[--mdx_hop_length MDX_HOP_LENGTH] [--mdx_enable_denoise] [--vr_batch_size VR_BATCH_SIZE] [--vr_window_size VR_WINDOW_SIZE] [--vr_aggression VR_AGGRESSION] [--vr_enable_tta]
[--vr_high_end_process] [--vr_enable_post_process] [--vr_post_process_threshold VR_POST_PROCESS_THRESHOLD] [--demucs_segment_size DEMUCS_SEGMENT_SIZE] [--demucs_shifts DEMUCS_SHIFTS]
[--demucs_overlap DEMUCS_OVERLAP] [--demucs_segments_enabled DEMUCS_SEGMENTS_ENABLED] [--mdxc_segment_size MDXC_SEGMENT_SIZE] [--mdxc_override_model_segment_size]
[--mdxc_overlap MDXC_OVERLAP] [--mdxc_batch_size MDXC_BATCH_SIZE] [--mdxc_pitch_shift MDXC_PITCH_SHIFT]
[audio_file]
将音频文件分离成不同的音轨。
位置参数:
audio_file 要分离的音频文件路径,可以是任何常见格式。
选项:
-h, --help 显示此帮助信息并退出
信息和调试:
-v, --version 显示程序版本号并退出。
-d, --debug 启用调试日志,相当于 --log_level=debug
-e, --env_info 打印环境信息并退出。
-l, --list_models 列出所有支持的模型并退出。
--log_level LOG_LEVEL 日志级别,如 info、debug、warning(默认:info)。
分离输入输出参数:
-m MODEL_FILENAME, --model_filename MODEL_FILENAME 用于分离的模型(默认:UVR-MDX-NET-Inst_HQ_3.onnx)。示例:-m 2_HP-UVR.pth
--output_format OUTPUT_FORMAT 分离文件的输出格式,任何常见格式(默认:FLAC)。示例:--output_format=MP3
--output_dir OUTPUT_DIR 写入输出文件的目录(默认:<当前目录>)。示例:--output_dir=/app/separated
--model_file_dir MODEL_FILE_DIR 模型文件目录(默认:/tmp/audio-separator-models/)。示例:--model_file_dir=/app/models
通用分离参数:
--invert_spect 使用频谱图反转次要音轨(默认:False)。示例:--invert_spect
--normalization NORMALIZATION 输出文件振幅的乘数值(默认:0.9)。示例:--normalization=0.7
--single_stem SINGLE_STEM 只输出单个音轨,如 Instrumental、Vocals、Drums、Bass、Guitar、Piano、Other。示例:--single_stem=Instrumental
--sample_rate SAMPLE_RATE 设置输出音频的采样率(默认:44100)。示例:--sample_rate=44100
MDX 架构参数:
--mdx_segment_size MDX_SEGMENT_SIZE 更大值消耗更多资源,但可能产生更好的结果(默认:256)。示例:--mdx_segment_size=256
--mdx_overlap MDX_OVERLAP 预测窗口之间的重叠量,0.001-0.999。更高值效果更好但速度更慢(默认:0.25)。示例:--mdx_overlap=0.25
--mdx_batch_size MDX_BATCH_SIZE 更大值消耗更多内存但处理可能略快(默认:1)。示例:--mdx_batch_size=4
--mdx_hop_length MDX_HOP_LENGTH 通常在神经网络中称为步幅;只在你知道自己在做什么时才更改(默认:1024)。示例:--mdx_hop_length=1024
--mdx_enable_denoise 启用分离后的去噪(默认:False)。示例:--mdx_enable_denoise
VR 架构参数:
--vr_batch_size VR_BATCH_SIZE 一次处理的"批次"数。更高 = 更多内存,处理略快(默认:4)。示例:--vr_batch_size=16
--vr_window_size VR_WINDOW_SIZE 平衡质量和速度。1024 = 快但质量较低,320 = 慢但质量更好。(默认:512)。示例:--vr_window_size=320
--vr_aggression VR_AGGRESSION 主音轨提取的强度,-100 - 100。通常人声和伴奏为 5(默认:5)。示例:--vr_aggression=2
--vr_enable_tta 启用测试时间增强;速度慢但提高质量(默认:False)。示例:--vr_enable_tta
--vr_high_end_process 镜像输出中缺失的频率范围(默认:False)。示例:--vr_high_end_process
--vr_enable_post_process 识别人声输出中的残留伪影;可能改善某些歌曲的分离效果(默认:False)。示例:--vr_enable_post_process
--vr_post_process_threshold VR_POST_PROCESS_THRESHOLD 后处理功能的阈值:0.1-0.3(默认:0.2)。示例:--vr_post_process_threshold=0.1
Demucs 架构参数:
--demucs_segment_size DEMUCS_SEGMENT_SIZE 音频被分割的片段大小,1-100。更高 = 更慢但质量更好(默认:Default)。示例:--demucs_segment_size=256
--demucs_shifts DEMUCS_SHIFTS 随机偏移预测的次数,更高 = 更慢但质量更好(默认:2)。示例:--demucs_shifts=4
--demucs_overlap DEMUCS_OVERLAP 预测窗口之间的重叠,0.001-0.999。更高 = 更慢但质量更好(默认:0.25)。示例:--demucs_overlap=0.25
--demucs_segments_enabled DEMUCS_SEGMENTS_ENABLED 启用分段处理(默认:True)。示例:--demucs_segments_enabled=False
MDXC 架构参数:
--mdxc_segment_size MDXC_SEGMENT_SIZE 更大值消耗更多资源,但可能产生更好的结果(默认:256)。示例:--mdxc_segment_size=256
--mdxc_override_model_segment_size 覆盖模型默认片段大小,而不使用模型默认值。示例:--mdxc_override_model_segment_size
--mdxc_overlap MDXC_OVERLAP 预测窗口之间的重叠量,2-50。更高值效果更好但速度更慢(默认:8)。示例:--mdxc_overlap=8
--mdxc_batch_size MDXC_BATCH_SIZE 更大值消耗更多内存但处理可能略快(默认:1)。示例:--mdxc_batch_size=4
--mdxc_pitch_shift MDXC_PITCH_SHIFT 处理时将音频音高移动指定的半音数。可能改善低音/高音人声的输出。(默认:0)。示例:--mdxc_pitch_shift=2
在 Python 项目中作为依赖
你可以在自己的 Python 项目中使用 Audio Separator。以下是使用方法:
from audio_separator.separator import Separator
# 初始化 Separator 类(可选配置属性如下)
separator = Separator()
# 加载机器学习模型(如果未指定,默认为 'model_mel_band_roformer_ep_3005_sdr_11.4360.ckpt')
separator.load_model()
# 对特定音频文件进行分离,无需重新加载模型
output_files = separator.separate('audio1.wav')
print(f"分离完成!输出文件:{' '.join(output_files)}")
批量处理和使用多个模型进行处理
你可以在不重新加载模型的情况下处理多个文件,以节省时间和内存。
只有在选择或更改模型时才需要加载模型。请参阅以下示例:
from audio_separator.separator import Separator
# 使用其他配置属性初始化 Separator
separator = Separator()
# 加载模型
separator.load_model(model_filename='UVR-MDX-NET-Inst_HQ_3.onnx')
# 在不重新加载模型的情况下分离多个音频文件
output_file_paths_1 = separator.separate('audio1.wav')
output_file_paths_2 = separator.separate('audio2.wav')
output_file_paths_3 = separator.separate('audio3.wav')
# 加载不同的模型
separator.load_model(model_filename='UVR_MDXNET_KARA_2.onnx')
# 使用新模型分离相同的文件
output_file_paths_4 = separator.separate('audio1.wav')
output_file_paths_5 = separator.separate('audio2.wav')
output_file_paths_6 = separator.separate('audio3.wav')
Separator 类的参数
- log_level: (可选) 日志级别,例如 INFO、DEBUG、WARNING。默认值:logging.INFO
- log_formatter: (可选) 日志格式。默认值:None,此时会使用 '%(asctime)s - %(levelname)s - %(module)s - %(message)s'
- model_file_dir: (可选) 缓存模型文件的目录。默认值:/tmp/audio-separator-models/
- output_dir: (可选) 保存分离文件的目录。如果未指定,将使用当前目录。
- output_format: (可选) 输出文件的编码格式,可以是任何常见格式(WAV、MP3、FLAC、M4A 等)。默认值:WAV
- normalization_threshold: (可选) 输出音频振幅将被乘以的系数。默认值:0.9
- output_single_stem: (可选) 仅输出单个音轨,如"伴奏"或"人声"。默认值:None
- invert_using_spec: (可选) 使用频谱图进行反转的标志。默认值:False
- sample_rate: (可选) 设置输出音频的采样率。默认值:44100
- mdx_params: (可选) MDX 架构特定属性及默认值。默认值:{"hop_length": 1024, "segment_size": 256, "overlap": 0.25, "batch_size": 1}
- vr_params: (可选) VR 架构特定属性及默认值。默认值:{"batch_size": 16, "window_size": 512, "aggression": 5, "enable_tta": False, "enable_post_process": False, "post_process_threshold": 0.2, "high_end_process": False}
- demucs_params: (可选) VR 架构特定属性及默认值。{"segment_size": "Default", "shifts": 2, "overlap": 0.25, "segments_enabled": True}
要求 📋
Python >= 3.10
依赖库:torch、onnx、onnxruntime、numpy、librosa、requests、six、tqdm、pydub
本地开发
本项目使用 Poetry 进行依赖管理和打包。按照以下步骤设置本地开发环境:
前提条件
- 确保你的机器上安装了 Python 3.10 或更新版本。
- 安装 Conda(推荐使用 Miniforge:https://github.com/conda-forge/miniforge)来管理 Python 虚拟环境。
克隆仓库
将仓库克隆到本地机器:
git clone https://github.com/YOUR_USERNAME/audio-separator.git
cd audio-separator
如果你已经 fork 了仓库,请将 YOUR_USERNAME 替换为你的 GitHub 用户名,或者如果你有权限,直接使用主仓库 URL。
创建并激活 Conda 环境
使用以下命令创建并激活 conda 环境:
conda env create
conda activate audio-separator-dev
安装依赖
进入 conda 环境后,运行以下命令安装项目依赖:
poetry install
在本地运行命令行界面
你可以直接在虚拟环境中运行 CLI 命令。例如:
audio-separator path/to/your/audio-file.wav
退出虚拟环境
完成开发工作后,可以通过以下命令退出虚拟环境:
conda deactivate
构建包
要构建用于分发的包,使用以下命令:
poetry build
这将在 dist 目录中生成分发包 - 但目前只有 @beveradb 能够发布到 PyPI。
贡献 🤝
非常欢迎贡献!请 fork 仓库并提交包含你的更改的拉取请求,我会尽快审核、合并和发布。
- 本项目完全开源,任何人都可以免费使用和修改。
- 如果这个仓库的维护工作量对我来说变得过大,我会寻找志愿者共同维护仓库,不过我认为这种可能性不大。
- MDX-Net 分离模型的开发和支持是 UVR 项目的一部分,这个仓库只是一个 CLI/Python 包封装,用于简化以编程方式运行这些模型。因此,如果你想尝试改进实际模型,请参与 UVR 项目并在那里寻求指导!
许可证 📄
本项目采用 MIT 许可证。
- 请注意: 如果你选择将此项目与默认模型或任何其他作为 UVR 项目一部分训练的模型集成到其他项目中,请遵守 MIT 许可证,给予 UVR 及其开发者应有的信誉!
致谢 🙏
- Anjok07 - Ultimate Vocal Remover GUI 的作者,本仓库中几乎所有代码都来自于此!本项目中任何好的东西都应归功于他。谢谢!
- DilanBoskan - 你在本项目初期的贡献对 UVR 的成功至关重要。谢谢!
- Kuielab & Woosung Choi - 开发了原始的 MDX-Net AI 代码。
- KimberleyJSN - 就 MDX-Net 和 Demucs 的训练脚本实现提供建议和帮助。谢谢!
- Hv - 帮助在 MDX-Net AI 代码中实现了分块。谢谢!
- zhzhongshi - 帮助在
audio-separator
中添加了对 MDXC 模型的支持。谢谢!
联系方式 💌
如有问题或反馈,请提出 issue 或直接联系 @beveradb(Andrew Beveridge)。