Project Icon

python-audio-separator

Python音频分离工具 轻松提取人声和乐器声轨

Audio Separator是一个开源的Python音频分离工具,能将音频文件分离为人声、乐器等多个音轨。支持WAV、MP3等常见格式,提供命令行和Python API接口。采用MDX-Net、VR Arch等AI模型,支持GPU加速,可快速分离高质量音轨。适用于卡拉OK制作和音乐后期处理等场景。

音频分离器 🎶

PyPI 版本 Conda 版本 Docker 下载量 codecov

概要:通过命令行或在您自己的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推理的镜像,支持amd64arm64平台。

您可能想要挂载一个包含要分离的文件的文件夹,该文件夹也可以用作输出文件夹。

例如,如果您当前目录有文件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已安装

如果您使用condadocker安装了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 librarycannot 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 进行依赖管理和打包。按照以下步骤设置本地开发环境:

前提条件

克隆仓库

将仓库克隆到本地机器:

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)。

赞助商

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号