python-audio-separator

python-audio-separator

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

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

Audio Separator音频分离模型推理人声分离音轨分离Github开源项目

音频分离器 🎶

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

赞助商

<!-- sponsors --><!-- sponsors -->

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多