windows部署spleeter 版本2.4.0:分离音频的人声和背景音乐
一、Spleeter 是什么?
Spleeter 是由法国音乐流媒体公司 Deezer 开发并开源的一款基于深度学习的音频分离工具。它能够将音乐中的不同音轨(如人声、鼓、贝斯、钢琴等)分离为独立的音频文件,适用于音乐制作、学术研究、音频处理等领域。
二、核心功能
- 多音轨分离:
- 2stems:分离为 人声(vocals) 和 伴奏(accompaniment)。
- 4stems:分离为 人声、鼓、贝斯 和 其他。
- 5stems:分离为 人声、鼓、贝斯、钢琴 和 其他。
- 高效处理:
- 支持 CPU 和 GPU(需 TensorFlow GPU 版本)加速。
- 单曲处理仅需数秒至数分钟(取决于硬件配置)。
- 开源免费:
- 代码和预训练模型完全开源(GitHub MIT 协议)。
- 无需商业授权,适合个人和学术用途。
三、安装过程
github地址: https://github.com/deezer/spleeter/tree/master
1.创建conda虚拟环境 python使用3.9
conda create -n spleeter python=3.9
conda activate spleeter
2.安装依赖ffmpeg和libsndfile
conda install ffmpeg libsndfile
3.安装最新版spleeter
pip install spleeter
4.下载测试文件
wget https://github.com/deezer/spleeter/raw/master/audio_example.mp3
5.执行
spleeter separate -p spleeter:2stems -o output audio_example.mp3
最后在命令执行路径下生成目录output/audio_example,内部有两个文件,人声音文件vocals.wav和背景音乐文件accompaniment.wav
各种模型下载:2stems、4stems、5stems
https://github.com/deezer/spleeter/releases
四、报错处理
报错处理一:找不到指定的模块mkl_intel_thread.2.dll
(spleeter) C:\Users\81097864\Downloads>spleeter separate -p spleeter:2stems -o output audio_example.mp3
INTEL oneMKL ERROR: 找不到指定的模块。 mkl_intel_thread.2.dll.
Intel oneMKL FATAL ERROR: Cannot load mkl_intel_thread.2.dll.
numpy和mkl的版本不对,卸载后重新安装,安装方式:
解决:建议直接下载numpy-1.24.5+mkl-cp39-cp39-win_amd64.whl下载地址:
https://github.com/cgohlke/numpy-mkl-wheels/releases
(spleeter) C:\Users\81097864\Downloads>pip install numpy-1.23.5+mkl-cp39-cp39-win_amd64.whl
报错处理二:github模型2stems.tar.gz下载失败
(spleeter) C:\Users\81097864\Downloads>spleeter separate -p spleeter:2stems -o output audio_example.mp3
INFO:spleeter:Downloading model archive https://github.com/deezer/spleeter/releases/download/v1.4.0/2stems.tar.gz
Traceback (most recent call last):
File "d:\Miniconda3\envs\spleeter\lib\site-packages\httpx\_transports\default.py", line 61, in map_httpcore_exceptions
yield
File "d:\Miniconda3\envs\spleeter\lib\site-packages\httpx\_transports\default.py", line 106, in __iter__
for part in self._httpcore_stream:
File "d:\Miniconda3\envs\spleeter\lib\site-packages\httpcore\_sync\connection_pool.py", line 57, in __iter__
for chunk in self.stream:
File "d:\Miniconda3\envs\spleeter\lib\site-packages\httpcore\_bytestreams.py", line 56, in __iter__
for chunk in self._iterator:
File "d:\Miniconda3\envs\spleeter\lib\site-packages\httpcore\_sync\http2.py", line 435, in body_iter
event = self.connection.wait_for_event(self.stream_id, timeout)
File "d:\Miniconda3\envs\spleeter\lib\site-packages\httpcore\_sync\http2.py", line 242, in wait_for_event
self.receive_events(timeout)
File "d:\Miniconda3\envs\spleeter\lib\site-packages\httpcore\_sync\http2.py", line 249, in receive_events
data = self.socket.read(self.READ_NUM_BYTES, timeout)
File "d:\Miniconda3\envs\spleeter\lib\site-packages\httpcore\_backends\sync.py", line 61, in read
return self.sock.recv(n)
File "d:\Miniconda3\envs\spleeter\lib\contextlib.py", line 137, in __exit__
self.gen.throw(typ, value, traceback)
File "d:\Miniconda3\envs\spleeter\lib\site-packages\httpcore\_exceptions.py", line 12, in map_exceptions
raise to_exc(exc) from None
httpcore.ReadTimeout: The read operation timed out
The above exception was the direct cause of the following exception:
2stems.tar.gz模型文件下载失败。可以手动下载https://github.com/deezer/spleeter/releases/download/v1.4.0/2stems.tar.gz后,解压到spleeter separate
命令执行所在的路径下。
我的命令执行路径如下:
(spleeter) C:\Users\81097864\Downloads>spleeter separate -p spleeter:2stems -o output audio_example.mp3
模型位置: 命令执行路径/pretrained_models/2stems
五、Windows用户注意
命令spleeter
在 Windows可能上无法正常工作。这是一个已知问题,我们希望很快修复。在命令行中替换spleeter separate
为python -m spleeter separate
,应该可以正常工作。
六、指定模型文件路径
通过环境变量MODEL_PATH指定模型文件所在位置,2stems、4stems、5stems这些模型文件夹都是MODEL_PATH的子目录
# 指定模型文件所在位置
(spleeter) D:\big-model>set MODEL_PATH=D:\big-model\spleeter-model
# 其他参数
#--verbose:打印日志
#-c : 指定输出文件格式
#-o : 指定结果文件目录
#-f : 指定结果文件名称
(spleeter) D:\big-model>spleeter separate --verbose -p spleeter:2stems -c mp3 -o D:\big-model\audio -f {filename}_{instrument}.{codec} D:\big-model\audio_example.mp3
INFO:tensorflow:Using config: {'_model_dir': 'D:\\big-model\\spleeter-model\\2stems', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': gpu_options {
per_process_gpu_memory_fraction: 0.7
}
, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_checkpoint_save_graph_def': True, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}
WARNING:tensorflow:From d:\Miniconda3\envs\spleeter\lib\site-packages\spleeter\separator.py:146: calling DatasetV2.from_generator (from tensorflow.python.data.ops.dataset_ops) with output_types is deprecated and will be removed in a future version.
Instructions for updating:
Use output_signature instead
WARNING:tensorflow:From d:\Miniconda3\envs\spleeter\lib\site-packages\spleeter\separator.py:146: calling DatasetV2.from_generator (from tensorflow.python.data.ops.dataset_ops) with output_shapes is deprecated and will be removed in a future version.
Instructions for updating:
Use output_signature instead
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Apply unet for vocals_spectrogram
WARNING:tensorflow:From d:\Miniconda3\envs\spleeter\lib\site-packages\keras\layers\normalization\batch_normalization.py:514: _colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.
Instructions for updating:
Colocations handled automatically by placer.
INFO:tensorflow:Apply unet for accompaniment_spectrogram
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from D:\big-model\spleeter-model\2stems\model
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:spleeter:File D:\big-model\audio\audio_example_accompaniment.mp3 written succesfully
INFO:spleeter:File D:\big-model\audio\audio_example_vocals.mp3 written succesfully
(spleeter) D:\big-model>