Tutorial · Python · ~10 min
Isolate Dialogue for Dubbing
Dubbing needs the spoken track and the music bed separately. Separation delivers both from one submission.
Why this matters
Dubbing teams mix the new language voice over the original music and effects — which requires the dialogue stem separated from the bed.
One API call returns both stems: the dialogue you replace and the instrumental you keep.
How it works
Submit the episode with stems=[vocals]. The API returns dialogue (for the dubbing session) and instrumental (for the mix), time-aligned.
Submit a job with an input URL (S3, GCS or HTTPS), poll the job URL, and download the rendered output. No GPU, no queues, no ffmpeg builds to babysit.
Code
import requests, time
API = "https://api.mlslabs.io/v1/vocal-separator/jobs"
headers = {"X-API-Key": "YOUR_API_KEY"}
payload = {"input": "s3://bucket/episode.mp4", "stems": ["vocals"]}
resp = requests.post(API, json=payload, headers=headers)
job = resp.json()
while job["status"] not in ("succeeded", "failed"):
time.sleep(3)
job = requests.get(job["url"], headers=headers).json()
print("Output:", job["output_url"])Pro tips
- Align the dub against the dialogue stem — no re-timing guesswork.
- Keep the instrumental stem for the final mix; it already matches the episode's pacing.
- Batch per episode after subtitle erasing in the same pipeline.
Pricing note
Usage is metered per minute of media processed; the first tier is free each month. Volume discounts kick in automatically.
FAQ
Common questions
Is the dialogue stem dry (no reverb)?
It contains the original ambience by default; a dry preset removes room tone for re-amping.
Can I separate just one character?
No — separation splits sources (dialogue/music/effects), not speakers. Speaker separation is a different capability.
Format of stems?
WAV 48kHz by default; sample rate and channels are configurable.
Keep exploring