メむンコンテンツぞスキップ
芋出し画像

Demucsで音声を分離する手順Windows

    Last update 09-17-2023
    ※ 凊理しやすくするため「実行甚バッチファむルの䜜成1」「実行甚バッチファむルの䜜成4」を远加したした。通垞は3か4をご利甚ください。ただし、特に4に぀いおは自己責任でお願いしたす。
    ※ UVRを䜿甚する方法に぀いお曞きたした䞋蚘。



    â–Œ 本蚘事に぀いお

    抂芁

     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たでお願いしたす。

     
     
    5060Ti (16GB) ず 3060 (12GB) を所持。蚘茉が無い限り文章は手曞きです。蚘事に関するこずは X の riddi0908 たでお願いしたす。質問箱は気たぐれにお返事したす。

    あなたぞのおすすめ