音源分離、いわゆる「ボーカル抜き」や「ステム分離」は、少し前までクラウドに 音源をアップロードするしかありませんでした。 それが今は手元のGPUで動きます。しかも最新のハイエンドである必要はなく、 ひと世代前のミドルレンジでも実用になります。自宅に置く価値は十分あるので、 構築で踏んだ罠と実際の使い勝手をまとめておきます。
なぜローカルに置くのか
理由は3つでした。素材を外に出さなくて済むこと。回数制限や待ち時間を気にしなくて済むこと。 そしてパラメータを試行錯誤できることです。
特に3つ目が大きい。分離の品質は素材によって最適な設定が変わるので、 「同じ音源を設定を変えて何度か回して聴き比べる」ができないと、 結局どれがいいのか分かりません。従量課金のサービスだと、この試行が そのまま課金になるので、心理的に試せなくなります。
何を使うか
定番はDemucsです。ボーカル・ドラム・ベース・その他の4ステムに 分離できるモデルで、htdemucs系の重みが広く使われています。 派生として、追加学習を回したhtdemucs_ftがあり、 品質が上がる代わりに処理時間が伸びます。
環境構築で踏んだ2つの罠
罠1: soundfileが入っていない。依存関係として自動で入ると思っていたら入っておらず、音声ファイルの読み込みで 落ちました。明示的に入れて解決。音声を扱うライブラリは、実際のデコード部分が 別パッケージになっていることが多いので、エラーが出たらまずそこを確認します。
罠2: CUDAのバージョンとドライバの対応。PyTorchはCUDAのバージョンごとにビルドが分かれていて、ドライバが 対応していないものを入れると、インストールは成功するのに実行時にno kernel image is available系のエラーで落ちます。先にドライバのバージョンを確認し、それに合うビルドを選ぶ。 逆順にやると、動かない環境を1から作り直すことになります。
環境は専用の仮想環境に切り分けました。音声処理は依存が重く、 バージョン衝突を起こしやすいので、システムのPythonには触らないほうが安全です。
実行と、オプションの選び方
基本の形はこうです。--two-stems=vocalsを付けると 「ボーカル」と「それ以外」の2つに絞るので、4ステムに分けるより速く終わります。 カラオケ用途なら2ステムで十分なことが多いです。
-n htdemucs_ft: 品質重視。標準モデルより遅いが分離がきれい--shifts 2: 入力を少しずつずらして複数回推論し、結果を平均する。 品質は上がるが、おおむね回数に比例して時間が伸びる-d cuda: GPUを使う指定。指定を忘れるとCPUで回って 桁違いに遅いので、初回はログでデバイスを確認する
手元の環境はRTX 2080 Ti(VRAM 11GB)です。このクラスでもモデルは余裕で載ります。 VRAM不足で落ちるのは、極端に長い音源を一度に読ませたときでした。 その場合は曲を分割してから回すか、バッチサイズを下げます。
出力の罠: 44.1kHz固定
見落としやすいのがこれです。出力のサンプルレートは44.1kHzになります。元の音源が48kHzだと、そのまま素材と並べたときにサンプルレートが食い違います。 DAWに戻すなら、分離結果をリサンプルするか、プロジェクト全体を44.1kHzで 組むかを先に決めておく必要があります。
これを知らずに48kHzのプロジェクトへ放り込むと、ピッチかテンポが微妙にずれます。 「分離はできたのに、なぜか元の音と重ならない」という症状になったら、 まずサンプルレートを疑ってください。
品質についての正直な感想
- ボーカルはかなり取れます。コーラスやハモリも一緒に抜けるので、そこはセットで扱う前提
- リバーブ成分は残りやすい。完全に消すより「邪魔にならない程度に薄くする」用途が現実的
- 4ステムに分けたほうが、後段で個別に処理するときは楽
- ドラムのシンバルは、他のステムに少し漏れることがある
「プロのマルチトラックと同等」とはいきませんが、 カバー動画の下地を作る、練習用に特定のパートを聴く、 といった用途なら十分に実用的です。
権利の話は技術と切り離して考える
分離した音源をどう使うかは、原盤の権利者の許諾の範囲で決まります。自分で録った音、利用許諾を得た素材、私的利用の範囲 — それ以外で 分離結果を配布・公開するのは避けるべきです。
ローカルで動かせるということは「誰にも見られずに処理できる」ということであり、 それは「何をしてもよい」という意味ではありません。技術的に可能なことと、 してよいことは別、という当たり前の線を自分の中に引いておく必要があります。
まとめ
構築自体は1時間もあれば終わります。詰まるとしたらsoundfileの入れ忘れとCUDAとドライバの対応の2点で、どちらもエラーメッセージを読めば解決できます。
素材を外に出さずに、設定を変えながら何度でも試せる。それだけで分離作業の 質は変わります。GPUが手元に余っているなら、入れておいて損はないツールです。