음원 분리 2분 가이드 — Demucs와 UVR Karaoke를 로컬에서 바로 돌리기
실측 기반 비교 — 설치, 실행, 처리 시간, 출력 파일까지 직접 돌려본 결과
직접 돌려본 실측 결과다. macOS Apple Silicon(CPU), Python 3.11 환경.
Demucs — 2줄이면 끝
설치:
pip install demucs torchcodec
torchcodec은 최신 torchaudio가 저장 시 필요로 한다. 없으면 ImportError가 나니까 같이 설치.
실행:
demucs song.mp3 --two-stems vocals
--two-stems vocals는 4-스템 대신 보컬/반주 2-스템만 출력한다. 노래방용이면 이게 더 편하다.
첫 실행 시 htdemucs 모델(~80MB)을 자동 다운로드한다. 인터넷 연결 필요.
출력:
separated/htdemucs/song/
├── vocals.wav # 보컬 (리드 + 백킹 전부)
└── no_vocals.wav # 반주 (보컬 완전 제거)
실측:
10초 오디오 처리: ~10초 (CPU, Apple Silicon)
모델 다운로드: ~80MB, 수 초
VRAM: GPU 없이 CPU로 돌아감
4-스템 분리가 필요하면:
demucs song.mp3
# → separated/htdemucs/song/{vocals,drums,bass,other}.wav
UVR Karaoke — 모델이 크지만 품질이 다르다
설치:
pip install "audio-separator[cpu]" # CPU만
# 또는
pip install "audio-separator[gpu]" # NVIDIA GPU 가속
실행:
audio-separator song.mp3 \
--model_filename mel_band_roformer_karaoke_aufr33_viperx_sdr_10.1956.ckpt \
--output_dir ./output
명령어가 길다. 모델 파일명을 통째로 적어야 한다.
첫 실행 시 913MB 모델을 자동 다운로드한다. 인터넷 속도에 따라 1~5분.
출력:
output/
├── song_(Instrumental)_mel_band_roformer_karaoke_aufr33_viperx_sdr_10.flac
└── song_(Vocals)_mel_band_roformer_karaoke_aufr33_viperx_sdr_10.flac
기본 출력이 FLAC이다 (무손실). WAV로 바꾸려면 --output_format wav.
실측:
10초 오디오 처리: ~43초 (모델 로드 14초 + 추론 13초 + 저장)
모델 다운로드: 913MB, 1~5분
모델 로드: 14초 (매 실행마다)
실측 비교 표
| Demucs | UVR Karaoke | |
|---|---|---|
| 설치 명령 | pip install demucs torchcodec |
pip install "audio-separator[cpu]" |
| 실행 명령 길이 | 짧음 | 길음 (모델 파일명 필요) |
| 모델 크기 | ~80 MB | 913 MB |
| 첫 실행 다운로드 | 수 초 | 1~5분 |
| 처리 시간 (10초 오디오, CPU) | ~10초 | ~43초 |
| 모델 로드 시간 | ~3초 | ~14초 |
| 출력 포맷 | WAV | FLAC (기본) |
| 백킹 보컬 | 제거됨 | 반주에 남음 |
결론: 뭘 써야 하나
빠르게 돌려보고 싶으면 Demucs. 설치도 간단하고, 명령어도 짧고, 모델도 작다. 보컬을 완전히 제거하고 싶을 때(리믹스, MR 만들기) 적합하다.
노래방 반주를 만들려면 UVR Karaoke. 모델은 크고 느리지만, 백킹 보컬이 반주에 남아서 훨씬 자연스럽다. 코러스가 있는 곡에서 차이가 확연하다.
실제로 코러스가 있는 곡(예: Queen — Bohemian Rhapsody)으로 테스트하면 차이를 바로 느낄 수 있다. Demucs는 코러스까지 빼서 반주가 텅 비고, UVR Karaoke는 코러스가 남아서 노래방 느낌이 난다.
Python 스크립트로 자동화
# demucs_test.py
import subprocess
import sys
def separate_demucs(input_path, output_dir="./separated"):
cmd = ["demucs", input_path, "--two-stems", "vocals", "-o", output_dir]
subprocess.run(cmd, check=True)
print(f"출력: {output_dir}/htdemucs/")
# uvr_test.py
def separate_uvr(input_path, output_dir="./output"):
from audio_separator.separator import Separator
sep = Separator(output_dir=output_dir)
sep.load_model(
"mel_band_roformer_karaoke_aufr33_viperx_sdr_10.1956.ckpt"
)
files = sep.separate(input_path)
print(f"출력: {files}")
if __name__ == "__main__":
separate_demucs(sys.argv[1]) # 또는 separate_uvr
트러블슈팅
Demucs — ImportError: TorchCodec is required
최신 torchaudio(2.11+)에서 발생. pip install torchcodec으로 해결.
UVR — 모델 다운로드 실패
GitHub 릴리스에서 받는데, 네트워크 문제 시 수동 다운로드:
# HuggingFace에서 직접 다운로드
wget https://huggingface.co/jarredou/aufr33-viperx-karaoke-melroformer-model/resolve/main/mel_band_roformer_karaoke_aufr33_viperx_sdr_10.1956.ckpt
# 모델 디렉토리에 복사
cp mel_band_roformer_karaoke*.ckpt ~/.cache/audio-separator/models/
CUDA OOM (GPU 메모리 부족)
CPU 폴백:
# Demucs
demucs song.mp3 -d cpu
# UVR
audio-separator song.mp3 --model_filename ... --use_cpu
핵심 개념
Demucs 설치: pip install demucs torchcodec
Demucs 실행: demucs song.mp3 --two-stems vocals → vocals.wav + no_vocals.wav
UVR 설치: pip install "audio-separator[cpu]"
UVR 실행: audio-separator song.mp3 --model_filename mel_band_roformer_karaoke_...ckpt
비교: Demucs(80MB, 10초) vs UVR(913MB, 43초) — 간단한 건 Demucs, 노래방 품질은 UVR