0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Spleeter vs HTDemucs:PythonでAI音源分離を徹底比較【2026年ベンチマーク付き】

0
Posted at

音楽のボーカル・ドラム・ベースを分離したいとき、Pythonで真っ先に候補に挙がるのが SpleeterHTDemucs です。どちらも無料・オープンソースですが、リリース年・精度・速度・メンテナンス状況がまったく異なります。

この記事では、実際のコードと公開ベンチマークデータを使って両者を比較し、「どちらを選ぶべきか」を明確に答えます。

SpleeterとHTDemucsはどう違う?

結論: HTDemucsは精度・モデルの更新頻度ともにSpleeterを上回ります。Spleeterは2021年以降メンテナンスが止まっており、新規プロジェクトではHTDemucsを選ぶのが現在のベストプラクティスです。

Spleeter HTDemucs
開発元 Deezer(2019年) Meta AI(2023年)
フレームワーク TensorFlow PyTorch
対応ステム 2・4・5種類 4種類・6種類(piano/guitar対応)
ボーカルSDR 約6.5 dB 約9〜11 dB
処理速度(RTF) CPU で約100倍速 CPU/MPS で約14倍速
メンテナンス 停止(2021年) 継続中
インストール pip install spleeter pip install demucs

SDR(Signal-to-Distortion Ratio)はdBが高いほど分離品質が良好です。HTDemucsのスコアはStemSplit公開ベンチマーク(MUSDB18-HQ、50曲)からの中央値です。Spleeterの数値はDeezerの原論文(Hennequin et al., ISMIR 2020)より引用しています。


インストール方法

Spleeter

# Python 3.8 推奨(3.10以降はTF互換問題あり)
pip install spleeter

TensorFlowへの依存が重く、Pythonバージョンに敏感です。Apple Silicon(M1/M2/M3/M4)では動作しないケースが多いため注意してください。

HTDemucs

pip install demucs
# ffmpegも必要
brew install ffmpeg        # macOS
sudo apt install ffmpeg    # Ubuntu/Debian

PyTorchベースのため依存関係がシンプルで、Apple Silicon(MPS)・CUDA・CPUすべてに対応しています。


基本的な使い方(Python)

Spleeter:4ステム分離

from spleeter.separator import Separator

separator = Separator("spleeter:4stems")
separator.separate_to_file("song.mp3", "output/")
# output/song/{vocals,drums,bass,other}.wav が生成される

HTDemucs:4ステム分離

import subprocess

subprocess.run([
    "python", "-m", "demucs",
    "--name", "htdemucs",
    "--out", "output/",
    "song.mp3"
])
# output/htdemucs/song/{vocals,drums,bass,other}.wav が生成される

Pythonからより細かく制御したい場合はAPIを直接使います:

import torch
import torchaudio
from demucs.pretrained import get_model
from demucs.apply import apply_model

model = get_model("htdemucs")
model.eval()

waveform, sr = torchaudio.load("song.mp3")
# モノラルならステレオに変換
if waveform.shape[0] == 1:
    waveform = waveform.repeat(2, 1)

waveform = waveform.unsqueeze(0)  # バッチ次元を追加

with torch.no_grad():
    sources = apply_model(model, waveform)

# sources shape: [1, 4, 2, samples] → [vocals, drums, bass, other]
vocals = sources[0, model.sources.index("vocals")]
torchaudio.save("vocals.wav", vocals, sr)

精度比較:SDRベンチマーク結果

StemSplitが公開した音源分離ベンチマークデータセットに基づく、MUSDB18-HQ(50曲)での結果です:

モデル ボーカル SDR 中央値 ドラム SDR 中央値 ベース SDR 中央値
Spleeter(論文値) 約6.5 dB 約5.9 dB 約5.1 dB
htdemucs 〜9.8 dB 〜9.7 dB 〜9.0 dB
htdemucs_ft 〜10.3 dB 〜9.5 dB 〜8.9 dB
mdx_extra_q 〜9.4 dB 〜10.8 dB 〜10.9 dB

HTDemucsのhtdemucs_ftはボーカル分離に最適化されたファインチューニング版です。歌ってみた・ボーカル抽出用途ではhtdemucs_ftを選ぶとより良い結果が得られます。


処理速度比較

Apple M4 Pro(24GBメモリ、PyTorch 2.11 MPSバックエンド)での計測値:

モデル RTF(実時間比) 3分の曲の処理時間
Spleeter 4stems(CPU) 約0.01(100倍速) 約1.8秒
HTDemucs(MPS) 約0.07(14倍速) 約12秒
HTDemucs(CPU) 約0.25(4倍速) 約45秒

SpleeterはCPUでの推論に特化しており、速度面では依然として優位です。ただし、精度の差(SDR約3〜4 dB)はリスニングレベルでも明確に聞き取れます。リアルタイム処理が必須でない用途では、HTDemucsの精度を取る価値があります。


どちらを選ぶべきか?

結論: 特別な理由がない限り、HTDemucsを選んでください。

ユースケース 推奨
歌ってみた・カラオケ音源作成 htdemucs_ft(ボーカル特化)
ドラム・ベースの分離 mdx_extra_q
ピアノ・ギターを個別に分離したい htdemucs_6s
Spleeterとの互換性維持が必要 Spleeter(移行コストがある場合のみ)
Python環境を用意せずすぐ試したい StemSplit API(後述)

Spleeterを選ぶ理由が残るのは、既存コードベースとの互換性維持か、極めてCPU速度が重要な組み込みユースケースくらいです。


ローカル環境なしで試す:StemSplit API

GPU環境の構築が難しい場合や、本番環境で手軽に使いたい場合は、同じHTDemucsモデルをHTTP一発で呼び出せるStemSplit のステムスプリッターが便利です。

import requests
import time

API_KEY = "your_api_key"

# 1. ジョブを投入
with open("song.mp3", "rb") as f:
    resp = requests.post(
        "https://stemsplit.io/api/v1/jobs",
        headers={"Authorization": f"Bearer {API_KEY}"},
        files={"file": f},
        data={"stems": "4"},
    )

job_id = resp.json()["id"]

# 2. 完了を待つ
while True:
    status = requests.get(
        f"https://stemsplit.io/api/v1/jobs/{job_id}",
        headers={"Authorization": f"Bearer {API_KEY}"},
    ).json()["status"]
    if status == "completed":
        break
    time.sleep(3)

# 3. ステムをダウンロード
result = requests.get(
    f"https://stemsplit.io/api/v1/jobs/{job_id}",
    headers={"Authorization": f"Bearer {API_KEY}"},
).json()

for stem, url in result["stems"].items():
    audio = requests.get(url).content
    with open(f"{stem}.wav", "wb") as f:
        f.write(audio)
    print(f"保存完了: {stem}.wav")

モデルはStemSplitの品質ティアで選択できます(htdemucs / htdemucs_ft / htdemucs_6s)。APIキーはstemsplit.io/ja/stem-splitterから取得できます。

ボーカル除去だけであればボーカルリムーバーも利用できます。


まとめ

  • 新規プロジェクトはHTDemucs一択 — 精度・メンテナンス・エコシステムすべてで優位
  • Spleeterは速いが古い — TF依存・2021年以降更新なし・Apple Siliconで動作不安定
  • SDR差は約3〜4 dB — リスニングレベルで明確に聞こえる差
  • GPU不要で試すにはStemSplit API — 同じモデルを1回のHTTPコールで利用可能

詳細なベンチマークデータはstem-separation-benchmark-2026(Hugging Face)で公開されています。


関連記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?