見出し画像

Demucsで音声を分離する手順(Windows)

Last update 09-17-2023
※処理しやすくするため「実行用バッチファイルの作成1」~「実行用バッチファイルの作成4」を追加しました。通常は3か4をご利用ください。ただし、特に4については自己責任でお願いします。
※高性能なMVSEP MDX23モデルを使用する方法について書きました(下記)。




▼ 本記事について

概要

 Meta Researchがオープンソースで開発をしているDemucsは、音声(主に楽曲)をヴォーカル、ベース、ドラム、その他に分離することができます。本記事では、Demucsをインストールして利用するための手順について説明します。

動作環境(推定)

 本記事ではGPU動作を前提とします。VRAM 4GB以上のGeforce RTX 2xxx以降、Python 3.10、CUDA Toolkit 11.8であれば確実です。これらを下回る環境でも動作すると思われますが、最低ラインは不明(未確認)です。なお、実行中は2GB程度のVRAMを消費しました。

公式リポジトリ、ドキュメント

Demucs Music Source Separation
https://github.com/facebookresearch/demucs 
Windows support for Demucs
https://github.com/facebookresearch/demucs/blob/main/docs/windows.md 

参考(他の方法)



▼ インストール

 今回は、Pythonに標準で用意されているパッケージをインストールします。リポジトリを利用したい場合は手順が異なります。

仮想環境の作成

 作業ディレクトリを「C:\aiwork」としていますので、適宜読み替えてください。作業ディレクトリに「demucs」のディレクトリを作成した後、コマンド プロンプトを開いて下記のコマンドを順に実行してください。

cd \aiwork\demucs

python -m venv venv
venv\Scripts\activate
(ここで行頭に (venv) が付いていることを確認する)

python -m pip install --upgrade pip

パッケージのインストール

 下記のコマンドを順に実行してください。特に1行目は、パッケージのダウンロード等でしばらくかかります。インストールされているCUDA Toolkitのバージョンが11.7以下の場合は、「cu118」の部分を変更してください。

pip install torch torchaudio --extra-index-url https://download.pytorch.org/whl/cu118
pip install -U demucs PySoundFile



▼ データの用意

データの形式

 素の状態では「wav」形式に対応しているようです。Windows用のffmpegが導入済みでパスが通っていれば、それ以外の様々な形式にも対応します(音声を含む動画も可)。

余談:ffmpegのインストール

 ffmpegの詳細なインストール方法は割愛しますが、以下概要です。公式のダウンロードページ https://ffmpeg.org/download.html#build-windows からリンクされている https://github.com/BtbN/FFmpeg-Builds/releases へアクセスして、ffmpeg-master-latest-win64-gpl.zip をダウンロードし、適当なディレクトリに解凍した後、パスを通します。面倒であれば、Demucsを実行するディレクトリ(C:\aiwork\demucs等)に実行ファイルをコピーしても大丈夫だと思います(未確認)。



▼ 実行

音声の分離

 まずはデフォルトの設定で実行してみます。コマンド プロンプト上で「demucs」と入力して、半角スペースを一個入れてください。次に、変換したいファイルをコマンド プロンプトのウインドウ上にドラッグ&ドロップしてください。ファイルのパスが挿入されますので、最後に「Enter」を押してください。

>demucs C:\aiwork\demucs\test.wav
Important: the default model was recently changed to `htdemucs` the latest Hybrid Transformer Demucs model. In some cases, this model can actually perform worse than previous models. To get back the old default model use `-n mdx_extra_q`.
Selected model is a bag of 1 models. You will see that many progress bars per track.
Separated tracks will be stored in C:\aiwork\demucs\separated\htdemucs
Separating track C:\aiwork\demucs\test.wav
100%|██████████████████████████████████████████████| 228.14999999999998/228.14999999999998 [00:08<00:00, 28.32seconds/s]

 分離された音声ファイルは、「C:\aiwork\demucs\separated\(モデル名)\(入力ファイル名)」のディレクトリに保存されていますので確認してください。

分離後のファイルが保存された

 音声は「drums」「bass」「other」「vocals」に分離されました。なお、ここでの「other」は「drums、bass、vocals以外の全て」を意味しています。

分離の仕方を変えてみる

 オプション「--two-stems vocals」を入れた場合は、「ヴォーカル(vocals)」と「ヴォーカル以外(no_vocals)」に分離されます。カラオケを作りたい時に利用してください。他にはdrums、bassも指定できます。

demucs --two-stems vocals C:\aiwork\demucs\test.wav

おすすめのポスト処理

 分離したトラックを聴いてみると、ノイズに感じられる箇所があるかもしれません。その場合は、レベルを変えてミックスして「一部のみを強調する」手法を試してみてください。

 まず、先ほどの「--two-stems vocals」を使って2つに分離します。それから、SoundEngine Free(https://soundengine.jp/, https://forest.watch.impress.co.jp/library/software/soundengine/)を起動して、強調したい方(例:no_vocals.wav)を先に読み込み、もう片方(例:vocals.wav)をドラッグ&ドロップします。次に「ミックス」を選択して、音量を適当に下げて(-6~-15dB程度)から「OK」をクリックするとミックスされます。そのまま保存すると上書きされますので注意してください。

音量を変えてミックスするところ



▼ 実行を簡単にする

 順を追って改良する形で掲載しています。とにかく気軽に実行したい方は、「実行用バッチファイルの作成3」のみを参照してください。「…4」ももちろんご利用いただけますが、自己責任となります。

起動用バッチファイルの作成

 Demucsを利用するためには必ず、コマンド プロンプトを開いた後に下記のコマンドを実行する必要があります。まずは、この手間を軽減させます。

cd \aiwork\demucs
venv\Scripts\activate

 新規ファイル「C:\aiwork\demucs.bat」を下記の内容で作成してください。実行ファイルのdemucsとの重複が気になる方は、好みで変更しても構いません。

@echo off
cd \aiwork\demucs
call venv\Scripts\activate.bat

 これ以降にDemucsを利用したい場合は、コマンド プロンプトを開いたあと、下記のコマンドを順に実行してください。

cd \aiwork
demucs

実行用バッチファイルの作成1

 まずは、オプション指定の手間を省くのみの簡単なバッチファイルを作ってみます。新規ファイル「C:\aiwork\demucs\demu.bat」を下記の内容で作成してください。

 オプション(詳細は後述)は好みで変更しても構いません。よく使うオプション毎にバッチファイルを作るのも良いでしょう。

demucs --two-stems vocals --clip-mode clamp %1

(実行コマンドを表示したくない場合は先頭行に @echo off を追加してください。)

 コマンド プロンプトを開いた後、下記の順で実行して、「demu」の後ろに半角スペースを1つ入れてから、変換したいファイル1つをドラッグ&ドロップしてください。実行後、3行目(「demu (入力ファイルのパス)」)を繰り返すことができます。

※起動用バッチファイル demucs.bat を作成済みの場合の手順です。

cd \aiwork
demucs
demu

実行用バッチファイルの作成2

 次に、「C:\aiwork\demucs\demu.bat」を下記の内容に変更してください。行頭の「@」は、実行するコマンドを表示しない時に使います。「echo off」の1行のみバージョンです。

@:loop
@if "%~1"=="" goto :eof
demucs --two-stems vocals --clip-mode clamp %1
@shift
@goto loop

 これで、複数ファイルの入力に対応しました。半角スペースを入れて別のファイルをドラッグ&ドロップ、という動作を繰り返すことができます。入力はそれほど楽にならないですね…。

demu C:\aiwork\demucs\test.wav C:\aiwork\demucs\test2.wav

実行用バッチファイルの作成3

 バッチファイルに直接ドラッグ&ドロップするだけで実行できるバージョンです。新規ファイル「C:\aiwork\run_demucs.bat」を下記の内容で作成してください。demucsのオプションやファイル名は好みで変更可能です。

※「:finish」以降の内容は好みで変更、削除等してください。

@echo off
c:
cd \aiwork\demucs
call venv\Scripts\activate.bat

:loop
if "%~1"=="" goto finish
@echo on
demucs --two-stems vocals --clip-mode clamp %1
@echo off
shift
goto loop

:finish
start explorer C:\aiwork\demucs\separated
echo
echo finished.
pause

 バッチファイルに分離したい音声ファイル(複数可)を直接ドラッグ&ドロップしてください。処理が終了すると、変換後のファイルを参照するためにエクスプローラーを開きます。それ以降の処理が必要無ければ削除してください。

実行用バッチファイルの作成4(中級者以上)

 demucsをインストールしたディレクトリが「c:\aiwork\demucs」の場合のみ、そのままご利用いただけます。また、出力ファイルの移動や作業ディレクトリ削除の操作を伴うため、自己責任でご利用ください。

 こちらはdemucsを2回実行して、入力ファイルと同じディレクトリに5ファイルを出力するバージョンです。もちろん、複数ファイルのドラッグ&ドロップに対応しています。

test.wav
test_bass.wav
test_drums.wav
test_no_vocals.wav
test_other.wav
test_vocals.wav

 実際は「C:\aiwork\demucs\separated\htdemucs\trackname_temp0000」のような作業ディレクトリに出力して、ディレクトリ内のファイルを全て移動してからディレクトリを削除しています。

@echo off
setlocal
set dem_path=^c:\aiwork\demucs
set dem_model=^htdemucs
set dem_opt1=^--two-stems vocals --clip-mode clamp --filename "{track}_temp0000\{track}_{stem}.{ext}"
set dem_opt2=^--clip-mode clamp --filename "{track}_temp0000\{track}_{stem}.{ext}"

c:
cd \aiwork\demucs
call venv\Scripts\activate.bat

:loop
if "%~1"=="" goto finish
set outdir=^%dem_path%\separated\%dem_model%\%~n1_temp0000

@echo on
@echo ** processing %1 **
@echo.
@echo ** demucs (1/2) **
demucs -n %dem_model% %dem_opt1% %1
@echo.
@echo ** demucs (2/2) **
demucs -n %dem_model% %dem_opt2% %1
@echo.
@echo ** move files **
@echo.
@move "%outdir%\*.*" %~dp1
@echo.
@echo ** delete temporary directory **
@rmdir "%outdir%"
@echo.
@echo off

shift
goto loop

:finish
echo ** finished **
echo.
pause



▼ オプション

 Demucsには様々なオプションがあるので説明します。オプションは必須ではありませんので、入力ファイルのパスの指定のみでも実行が可能です。入力のパスを続けて指定すると、順番に処理されます。

demucs C:\aiwork\demucs\test.wav C:\aiwork\demucs\test2.wav 

オプションの確認

 オプション「-h」を付けて起動すると、オプションの説明が表示されます。リポジトリにも多少の説明がありますので、参考にしてください。

>demucs -h
usage: demucs.separate [-h] [-s SIG | -n NAME] [--repo REPO] [-v] [-o OUT] [--filename FILENAME] [-d DEVICE]
                       [--shifts SHIFTS] [--overlap OVERLAP] [--no-split | --segment SEGMENT] [--two-stems STEM]
                       [--int24 | --float32] [--clip-mode {rescale,clamp}] [--mp3] [--mp3-bitrate MP3_BITRATE]
                       [-j JOBS]
                       tracks [tracks ...]

Separate the sources for the given tracks

positional arguments:
  tracks                Path to tracks

options:
  -h, --help            show this help message and exit
  -s SIG, --sig SIG     Locally trained XP signature.
  -n NAME, --name NAME  Pretrained model name or signature. Default is mdx_extra_q.
  --repo REPO           Folder containing all pre-trained models for use with -n.
  -v, --verbose
  -o OUT, --out OUT     Folder where to put extracted tracks. A subfolder with the model name will be created.
  --filename FILENAME   Set the name of output file. Use "{track}", "{trackext}", "{stem}", "{ext}" to use variables
                        of track name without extension, track extension, stem name and default output file extension.
                        Default is "{track}/{stem}.{ext}".
  -d DEVICE, --device DEVICE
                        Device to use, default is cuda if available else cpu
  --shifts SHIFTS       Number of random shifts for equivariant stabilization.Increase separation time but improves
                        quality for Demucs. 10 was used in the original paper.
  --overlap OVERLAP     Overlap between the splits.
  --no-split            Doesn't split audio in chunks. This can use large amounts of memory.
  --segment SEGMENT     Set split size of each chunk. This can help save memory of graphic card.
  --two-stems STEM      Only separate audio into {STEM} and no_{STEM}.
  --int24               Save wav output as 24 bits wav.
  --float32             Save wav output as float32 (2x bigger).
  --clip-mode {rescale,clamp}
                        Strategy for avoiding clipping: rescaling entire signal if necessary (rescale) or hard
                        clipping (clamp).
  --mp3                 Convert the output wavs to mp3.
  --mp3-bitrate MP3_BITRATE
                        Bitrate of converted mp3.
  -j JOBS, --jobs JOBS  Number of jobs. This can increase memory usage but will be much faster when multiple cores are
                        available.

 なお、使用するモデルとして「Default is mdx_extra_q」の記述が見えますが、現状は「htdemucs」でした。

オプション:--two-stems

 ステムを指定して分離します。下記例ではヴォーカル(vocals)と、ヴォーカル以外すなわちカラオケ(no_vocals)のみを作成します。Demucsのステムは「drums」「bass」「other」「vocals」があり、モデル htdemucs_6s を使用する場合は「piano」「guitar」が追加されます。「other」は指定できません。

demucs --two-stems vocals C:\aiwork\demucs\test.wav 

オプション:-n

 使用するモデルを指定します。現在のデフォルトは htdemucs です。モデルは初回使用時にダウンロードされます。通常は、下記に挙げた上の3種類から選択してください。

(例)
demucs -n htdemucs_ft C:\aiwork\demucs\test.wav
  • htdemucs … Hybrid Transformer Demucs(Hybrid Demucs v4)。デフォルト。

  • htdemucs_ft … htdemucsの微調整版。4倍の処理時間がかかるが、わずかに品質が高い。

  • htdemucs_6s … htdemucsの6ソースバージョン。pianoとguitarを追加。pianoは現時点で最適ではない。

  • hdemucs_mmi … Hybrid Demucs v3。

  • mdx … MusDB HQでトレーニング。

  • mdx_extra … mdxを追加データでトレーニング。

  • mdx_q, mdx_extra_q … 以前のデフォルトモデル。品質がわずかに低下する可能性がある。

オプション:--clip-mode

 クリップ(振幅が最大値を超える)の対応方法を指定します。デフォルトはrescale で、全体をクリップが発生しないレベルに下げます。出力の音量が小さくなるのはこのためです。clamp は最大値に固定します。

rescaleとclampの比較(clampではクリップが発生している)
(例)
demucs --clip-mode clamp C:\aiwork\demucs\test.wav

オプション:-o

 出力先を変更します。デフォルトは実行時のカレントディレクトリです。指定した出力先にて、separated ディレクトリの中に出力されます。

(例)
demucs -o C:\aiwork C:\aiwork\demucs\test.wav

オプション:--filename

 出力するファイル名を変更します。デフォルトは「"{track}/{stem}.{ext}"」です。

(例)
demucs --filename "{track}_{stem}.{ext}" C:\aiwork\demucs\test.wav

 入力ファイルが test.wav の場合、{track}=test, {trackext}=wav となります。 {stem} は drums や no_vocals 等、{ext} は出力ファイルの拡張子です。

オプション:--mp3, --mp3-bitrate

 wav形式ではなくmp3形式で出力します。ビットレートを指定しない場合は最大値です(320kbps、ステレオ)。

(例)
demucs --mp3 --mp3-bitrate 256 C:\aiwork\demucs\test.wav

オプション:その他

-s:ローカルモデルの署名を指定する。
--repo:ローカルモデルのディレクトリを指定する。
-v:詳細モード。特に機能していない様子。
-d:デバイスの指定(CUDAまたはCPU)。
-j:並列実行数を指定する(例:-j 2)。ただし、筆者の環境では変化がなかった。
--shifts, --overlap, --no-split, --segment:Demucsの動作やパラメーターを指定する。基本的に変更する必要は無い。
--int24, --float32:wavの出力フォーマットを変更する。



▼ メモ

pipのキャッシュを削除する

 pipコマンドでインストールしたパッケージは、ディスクにキャッシュされます。再利用時は便利ですが、例えばPyTorchは容量が2GB以上と大きいため、気になる方もいらっしゃるかと思います。

 パッケージのキャッシュを削除するには「pip cache purge」のコマンドを実行するか、「%LOCALAPPDATA%\pip\Cache」の中身を手動で削除してください。

モデルのキャッシュを削除する

 モデルは「C:\Users\(ユーザー名)\.cache\torch\hub\checkpoints」に入っています。こちらは削除が可能で、必要が生じた際は再度ダウンロードされます。他の用途でもPyTorchを利用している場合、そちらで使用したモデルが混在している可能性があります。

アンインストールの手順

 もし、必要なファイルがあれば移動してください。その後、実行を終了(当該コマンド プロンプトのウインドウを閉じる)した状態で「demucs」のディレクトリを削除してください。上記のキャッシュも削除すると良いでしょう。



▼ その他

 私が書いた他の記事は、メニューよりたどってください。

 noteのアカウントはメインの@Mayu_Hiraizumiに紐付けていますが、記事に関することはサブアカウントの@riddi0908までお願いします。

この記事が気に入ったらサポートをしてみませんか?