初めに
以下で歌声の音源からボーカルを抽出していました
改めて調査するとより多くのモデルと精度の高いモデルが選べるのものがあり、ローカル環境でも動くようになっていたので触っていきます
開発環境
環境構築
uv venv -p 3.12 .venv/Scripts/activate
必要なライブラリのインストールします
uv pip install "audio-separator[gpu]" uv pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu124 --force-reinstall
使用できるモデルの取得
使用できるモデルの一覧の表示やボーカルに特化した精度の高いものをCLIから取得できます。
以下にて、ボーカルの抽出において精度の高いものを取得することができます
audio-separator -l --list_filter=vocals --list_limit=5
こちらを実行すると以下のような情報が得られます
2025-05-17 17:32:15,454 - INFO - separator - Using model directory from model_file_dir parameter: /tmp/audio-separator-models/ ----------------------------------------------------------------------------------------------------------------------------------------- Model Filename Arch Output Stems (SDR) Friendly Name ----------------------------------------------------------------------------------------------------------------------------------------- vocals_mel_band_roformer.ckpt MDXC vocals* (12.6), other Roformer Model: MelBand Roformer | Vocals by Kimberley Jensen melband_roformer_big_beta4.ckpt MDXC vocals* (12.5), other Roformer Model: MelBand Roformer Kim | Big Beta 4 FT by unwa mel_band_roformer_kim_ft_unwa.ckpt MDXC vocals* (12.4), other Roformer Model: MelBand Roformer Kim | FT by unwa melband_roformer_big_beta5e.ckpt MDXC vocals* (12.4), other Roformer Model: MelBand Roformer Kim | Big Beta 5e FT by unwa MelBandRoformerBigSYHFTV1.ckpt MDXC vocals* (12.3), other Roformer Model: MelBand Roformer Kim | Big SYHFT V1 by SYH99999
ただし今回は 上記のものよりもさらに精度が高いと言われている mel_band_roformer_karaoke_becruily.ckpt を使っていきます
CLIからボーカルを抽出
以下にて指定した音源からボーカルを抽出およびボーカルの音声のみを出力することができます
audio-separator --model_filename mel_band_roformer_karaoke_becruily.ckpt --output_format=MP3 --single_stem=Vocals 'test.mp3'
Pythonから実行
以下のコードにてPythonのスクリプトから処理することができます
from audio_separator.separator import Separator import logging # --- 設定項目 --- input_audio_file = r'.\test.mp3' model_name = 'mel_band_roformer_karaoke_becruily.ckpt' output_audio_format = 'MP3' stem_to_output = 'Vocals' # Separatorクラスを初期化 separator = Separator( output_format=output_audio_format, output_single_stem=stem_to_output, log_level=logging.INFO ) # モデルをロード try: separator.load_model(model_filename=model_name) print(f"モデル '{model_name}' のロードに成功しました。") except Exception as e: print(f"モデルのロード中にエラーが発生しました: {e}") exit() # オーディオ分離処理を実行 print(f"オーディオファイル '{input_audio_file}' の分離を開始します...") try: output_files = separator.separate(input_audio_file) if output_files: print(f"分離が完了しました。出力ファイル:") for file_path in output_files: print(f"- {file_path}") else: print("分離処理は実行されましたが、出力ファイルはありませんでした。") except Exception as e: print(f"オーディオ分離処理中にエラーが発生しました: {e}")