音楽のボーカル・ドラム・ベースを分離したいとき、Pythonで真っ先に候補に挙がるのが Spleeter と HTDemucs です。どちらも無料・オープンソースですが、リリース年・精度・速度・メンテナンス状況がまったく異なります。
この記事では、実際のコードと公開ベンチマークデータを使って両者を比較し、「どちらを選ぶべきか」を明確に答えます。
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)で公開されています。