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 spleeter2.安裝依賴ffmpeg和libsndfile
conda install ffmpeg libsndfile3.安裝最新版spleeter
pip install spleeter4.下載測試文件
wget https://github.com/deezer/spleeter/raw/master/audio_example.mp35.執行
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_exceptionsyieldFile "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_iterevent = 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_eventself.receive_events(timeout)File "d:\Miniconda3\envs\spleeter\lib\site-packages\httpcore\_sync\http2.py", line 249, in receive_eventsdata = self.socket.read(self.READ_NUM_BYTES, timeout)File "d:\Miniconda3\envs\spleeter\lib\site-packages\httpcore\_backends\sync.py", line 61, in readreturn 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_exceptionsraise to_exc(exc) from None
httpcore.ReadTimeout: The read operation timed outThe 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>