Audio
audio translation
voice dubbing

Dubbing & Translation

Translating audio across languages while preserving speaker voice. Combines STT → translation → cloned-voice TTS.

Capability notes

AI dubbing is a pipeline, not a single model — it chains [speech-to-text](/tasks/speech-to-text) → [translation](/tasks/translation) → [voice cloning](/tasks/voice-cloning) → lip-sync adjustment into one end-to-end workflow that replaces human voice actors in a target language with AI-generated speech. Three sub-tasks define quality: translation accuracy, voice similarity (does the AI voice match the original speaker's timbre), and lip-sync alignment (does the AI mouth movement match the new language's phonemes). The local dubbing stack in 2026: **Whisper** (speech-to-text, WER 7-9% for English, 5-15% for major European languages) → **LLM translation** ([Llama 3.3 70B](/models/llama-3-3-70b) or [Qwen 3 235B-A22B](/models/qwen-3-235b-a22b), translation quality ~85-92% of DeepL/Google on BLEU scores for major language pairs like EN↔FR/DE/ES) → **XTTS-v2** or **F5-TTS** (voice cloning from original speaker's 6-10s reference clip, SIM 0.80-0.92) → **MuseTalk** or **Wav2Lip** (lip-sync adjustment, MuseTalk LSE-D 7.2, Wav2Lip 6.8). End-to-end, a 60-second video clip takes 2-5 minutes on [RTX 4090](/hardware/rtx-4090). **Quality assessment for dubbing** (vs commercial APIs like ElevenLabs Dubbing, DeepDub): Open-weight dubbing quality is 60-75% of commercial API quality on overall Mean Opinion Score (MOS). The gap is in three areas: (1) Voice similarity — commercial APIs use 60s+ of source audio for cloning vs local's 6-10s limit, SIM score gap of 0.05-0.10; (2) Prosody transfer — commercial APIs transfer emotional delivery and emphasis across languages, local models transfer timbre but flatten expression; (3) Lip-sync — commercial APIs train end-to-end lip-sync models; local chains pipelined components where per-stage error compounds. **Language pair quality tiers**: Tier 1 (EN↔FR/DE/ES/IT/PT, quality ~80-90% of commercial): LLM translation strong, TTS supports these languages, Whisper WER low for all. Tier 2 (EN↔JA/KO/ZH, 60-75%): translation quality drops, prosody mismatch (pitch accent languages stress differently, TTS output unnatural), Whisper WER higher for Asian languages. Tier 3 (low-resource pairs like EN↔AR/HI/TH, 40-60%): translation quality degrades significantly, TTS language support limited (XTTS-v2 covers 17 languages but quality varies), Whisper WER 15%+ for non-European.

If you just want to try this

Lowest-friction path to a working setup.

Start by dubbing a 30-second clip in a high-resource language pair (English → Spanish or French → English) — these pairs have the best tool support and lowest error rates. Use individual tools in sequence before building a pipeline: you need to understand each component's failure modes before connecting them. Step 1 — Transcription: install [faster-whisper](/tools/faster-whisper), download large-v3 model, transcribe your video's audio track. Verify the transcription is accurate (read it, correct errors). Step 2 — Translation: use [Ollama](/tools/ollama) with [Llama 3.3 70B](/models/llama-3-3-70b) or any 30B+ LLM, prompt: "Translate this transcript from [source] to [target] language. Maintain the same speaking style, tone, and sentence length. Output only the translation." Verify the translation sounds natural by asking a native speaker or back-translating. Step 3 — Voice cloning + TTS: use [XTTS-v2](/tools/xtts-v2) via its Python API or [TTS Generation WebUI](/tools/tts-generation-webui). Extract a 6-10s reference clip of the original speaker's voice, generate TTS with the translated text. Step 4 — Lip-sync: use Wav2Lip (easiest setup) or MuseTalk (better quality). Input: original video + new audio. Output: video with lip movement adjusted to new audio. Hardware: each step can run on [RTX 3060 12GB](/hardware/rtx-3060-12gb). Transcription: 5-15s for 30s audio. Translation: 2-5s via Ollama. Voice cloning: 10-30s. Lip-sync: 15-45s (Wav2Lip) or 30-90s (MuseTalk). Total: 1-3 minutes per 30 seconds of video — ~2-6× real-time. This is an afternoon project for one clip, not a real-time system. The most frustrating beginner failure: the translated audio is 40% longer than the original, and time-stretching makes everyone sound drunk. Pre-check the syllable ratio between source and target language for your pair — if >1.3×, expect audible artifacts from any time-stretch approach and plan to use lip-sync adjustment (Step 4) instead.

For production deployment

Operator-grade recommendation.

Production dubbing requires language-pair-specific quality targets, scalable infrastructure, and human-in-the-loop review for quality-critical content. **Pipeline architecture**: (1) Video ingest → (2) Audio extraction (FFmpeg) + VAD segmentation → (3) faster-whisper large-v3 transcription with word timestamps → (4) LLM translation per segment ([vLLM](/tools/vllm) serving Qwen 3 235B or Llama 3.3 70B) → (5) XTTS-v2 voice cloning per speaker (speaker diarization from [diarization pipeline](/tasks/diarization) identifies unique speakers) → (6) MuseTalk lip-sync adjustment → (7) audio-video merge with time-alignment compensation → (8) Human QA review (translation accuracy, voice quality, lip-sync). **Per-language-pair quality strategy**: Tier 1 pairs (EN↔FR/DE/ES/IT/PT): fully automated with 5% human spot-check. Tier 2 pairs (EN↔JA/KO/ZH): automated pass + human translation review (reviewer checks 100% of translation, 20% of audio). Tier 3 pairs (low-resource): human translation required, AI used for voice cloning and lip-sync only. The cost structure changes: Tier 1 = $0.05-0.10/min self-hosted; Tier 2 = $0.30-0.80/min (human review cost dominates); Tier 3 = $1-3/min (human translation dominates). **Speaker library management**: For series/content with recurring speakers, maintain a speaker voice library. First episode: clone each speaker's voice into a speaker vector stored in [pgvector](/tools/pgvector). Subsequent episodes: retrieve speaker vector, skip the cloning step — 2-3× faster. Speaker verification (ECAPA-TDNN) confirms the right speaker vector matches the right audio segment. This reduces per-episode dubbing cost by 30-50%. **Multi-language simultaneous release**: For content releasing in 10+ languages simultaneously: generate English master → per-language translation pipeline (parallel, one GPU per language pair) → per-language voice cloning + TTS → per-language lip-sync. 10 languages on 10× [RTX 4090](/hardware/rtx-4090): ~20-50 minutes of content/hour (at 2-5× real-time). For Netflix-style "dub into 30 languages" scale, this is a GPU farm, not a single workstation. **When to use local vs API dubbing**: ElevenLabs Dubbing API = $0.10-0.30/min, includes translation + voice cloning + lip-sync. DeepDub (commercial) = $0.20-0.50/min. Self-hosted local = $0.01-0.05/min (GPU only) to $0.30-3.00/min (with human review, depending on language tier). Self-hosting wins for: (a) volume >10,000 min/month, (b) privacy-sensitive content, (c) rare language pairs where APIs don't deliver quality. API wins for: convenience, best quality on common pairs, burst workloads.

What breaks

Failure modes operators see in the wild.

**Translation-timing mismatch.** Symptom: the translated audio is 30-50% longer or shorter than the original video segment. Cause: LLM translation doesn't constrain output length to match input duration — it translates semantically, not temporally. Mitigation: prompt the LLM with length constraint ("translate while keeping the output roughly the same number of words/syllables"), or post-process with text compression/expansion (use a second LLM pass: "shorten this by 20% while preserving meaning"). **Prosody death across translation.** Symptom: original speaker was excited/angry; translated voice is flat monotone. Cause: the pipeline strips prosody at each step — transcription loses emphasis, translation flattens tone, TTS generates neutral-default prosody. Mitigation: emotion labeling on source audio (emotion classifier: happy/sad/angry/neutral per segment) → pass emotion tag to TTS as conditioning → XTTS-v2 with emotion vectors generates matching expression. This recovers ~50-70% of original prosody. **Speaker identity confusion in multi-speaker content.** Symptom: Speaker A's voice clone says Speaker B's translated line. Cause: diarization errors (DER 15-18% on challenging multi-speaker audio) → wrong speaker assigned to audio segment → wrong voice clone used. Mitigation: implement diarization confidence threshold — if speaker label confidence <0.8, flag for human verification. For critical content, human diarization (labeling "who speaks when") is still more accurate than AI diarization. **Lip-sync uncanny valley.** Symptom: mouth shapes are technically correct for the new language but feel "wrong" — the lip movements don't match the speaker's face shape, jaw movement, or natural mouth range. Cause: MuseTalk/Wav2Lip warp the mouth region to match audio but don't respect individual mouth anatomy. Mitigation: fine-tune the lip-sync model on 5-10 minutes of the speaker's talking video (LoRA on MuseTalk face renderer) — this adapts mouth shape generation to individual anatomy and reduces uncanny valley by ~30-50%.

Hardware guidance

**Minimum viable (12 GB VRAM)**: [RTX 3060 12GB](/hardware/rtx-3060-12gb) or [RTX 4060 Ti 16GB](/hardware/rtx-4060-ti-16gb). Runs the full dubbing pipeline sequentially. 30-second clip in 2-5 minutes (2-10× real-time). Can't handle concurrent pipeline stages on one GPU — stages run one at a time. Viable for occasional short-form dubbing (1-10 min/week). **SMB (16-24 GB)**: [RTX 4090 24GB](/hardware/rtx-4090) or [RTX 4070 Ti Super 16GB](/hardware/rtx-4070-ti-super). Whisper large-v3 + XTTS-v2 + MuseTalk share GPU. 30-second clip in 1-2 minutes. Two concurrent dubbing pipelines on RTX 4090. **Enterprise/studio (24-48+ GB)**: [RTX 5090 32GB](/hardware/rtx-5090) or [NVIDIA L40S](/hardware/nvidia-l40s) 48 GB. Multiple concurrent pipelines — Whisper, translation LLM, TTS, and lip-sync on one GPU. For dubbing studios: pipeline-per-GPU architecture. 8× [L40S](/hardware/nvidia-l40s) = 8 concurrent dubbing streams, ~4-8 hours of content/day. **Multi-GPU pipeline architecture**: Whisper GPU (1× [RTX 3060 12GB](/hardware/rtx-3060-12gb) handles transcription for all pipelines) → Translation GPU (1× [RTX 4090](/hardware/rtx-4090) runs vLLM for LLM translation) → TTS GPU pool (2-4× [RTX 4070](/hardware/rtx-4070) for XTTS-v2) → Lip-sync GPU pool (2-4× [RTX 5070 Ti](/hardware/rtx-5070-ti) for MuseTalk). Each stage specialized on the right hardware. This is more cost-efficient than all-stages-on-one-beefy-GPU because stage hardware requirements differ. **Memory per stage**: Whisper large-v3: 3-6 GB. Translation LLM (70B Q4): 35-45 GB. XTTS-v2: 2-4 GB. MuseTalk: 4-8 GB. Wav2Lip: 1-2 GB. Total for concurrent: ~50-65 GB VRAM. Pipeline-per-GPU needs multi-GPU for 70B LLM translation.

Runtime guidance

**If building an automated dubbing pipeline** → Python orchestration with per-stage tool APIs. [faster-whisper](/tools/faster-whisper) for transcription, [Ollama](/tools/ollama) or [vLLM](/tools/vllm) for LLM translation, [XTTS-v2](/tools/xtts-v2) for voice cloning + TTS, MuseTalk for lip-sync. Each stage is a Python function with standardized input/output (audio segment → text → translated text → synthesized audio → lip-synced video). Job queue (Celery + Redis) manages per-clip processing. **If dubbing with [ComfyUI](/tools/comfyui)** → the video-side pipeline: ComfyUI handles the visual components (lip-sync via MuseTalk custom node, face rendering). Audio processing (transcription, translation, TTS) happens outside ComfyUI in Python. ComfyUI receives: original video + new audio (pre-generated) → MuseTalk lip sync → output video. ComfyUI is the video renderer, not the full pipeline. **If you need the simplest end-to-end GUI** → there is no full open-weight dubbing GUI in 2026. Commercial tools (ElevenLabs Dubbing Studio, Rask.ai, DeepDub) provide full GUI. The local AI path requires scripting (Python) or chaining individual tools manually. The closest local option: [TTS Generation WebUI](/tools/tts-generation-webui) for voice cloning + TTS generation, combined with MuseTalk standalone for lip-sync — two separate tools, no unified GUI. **Translation LLM selection**: For Tier 1 language pairs (EN↔FR/DE/ES), [Llama 3.3 70B](/models/llama-3-3-70b) at Q4 provides translation quality competitive with DeepL (BLEU within 3-5 points). For Tier 2 pairs (EN↔JA/KO/ZH), [Qwen 3 235B-A22B](/models/qwen-3-235b-a22b) performs better on Asian languages (trained on more Chinese/Japanese/Korean data). For critical translation: use the LLM as first pass, then human review. The LLM catches 90% of the translation; a human fixes the remaining 10% in 20% of the time it would take to translate from scratch. **Lip-sync model selection**: Wav2Lip for accessibility (works on CPU, 2 GB VRAM, LSE-D 6.8 — best accuracy but visible mouth seam). MuseTalk for production quality (8 GB+ VRAM, LSE-D 7.2, no visible seam, full-face consistency). Wav2Lip for low-resource; MuseTalk for quality-sensitive output. The Wav2Lip + GAN variant with face restoration post-processing (CodeFormer) closes the visible-seam gap with MuseTalk at slightly worse lip-sync accuracy.

Setup walkthrough

  1. Install the pipeline components:

    • STT: pip install faster-whisper (transcribe source audio)
    • Translation: ollama pull aya-expanse:8b (translate transcript)
    • TTS with cloning: pip install f5-tts (speak translation in original voice)
  2. Pipeline script:

# Step 1: Transcribe source audio
from faster_whisper import WhisperModel
stt = WhisperModel("large-v3", device="cuda")
segments, _ = stt.transcribe("source.mp3")
transcript = " ".join([s.text for s in segments])

# Step 2: Translate
import ollama
resp = ollama.chat(model="aya-expanse:8b", messages=[{
    "role": "user",
    "content": f"Translate to Spanish: {transcript}"
}])
translated = resp["message"]["content"]

# Step 3: Synthesize with cloned voice
from f5_tts import F5TTS
tts = F5TTS("F5-TTS", "cuda")
tts.infer(translated, ref_audio="speaker_reference.wav", output="dubbed.wav")
  1. A 1-minute clip takes 3-8 minutes end-to-end on 12 GB GPU. Quality depends on each stage — weak STT → bad transcript → bad translation → even good TTS can't fix it.

The cheap setup

Used RTX 3060 12 GB (~$200-250, see /hardware/rtx-3060-12gb). Runs the full dubbing pipeline: Whisper large-v3 STT at 15-20× real-time, Aya Expanse 8B translation at 40-60 tok/s, F5-TTS cloning at near-real-time. A 5-minute video dubs in ~20-30 minutes. Pair with Ryzen 5 5600 + 32 GB DDR4 + 1TB NVMe. Total: ~$390-440. For CPU-only: Whisper medium + Kokoro TTS (preset voices only) + NLLB-200-distilled-600M (lighter translator) — dubs a 5-minute video in ~1-2 hours. Functional but slow.

The serious setup

Used RTX 3090 24 GB (~$700-900, see /hardware/rtx-3090). Runs the full pipeline: Whisper large-v3 STT at 20-30× real-time, Aya Expanse 32B translation at 25-40 tok/s (dramatically better translation quality than 8B), F5-TTS cloning. A 30-minute video dubs in ~1-2 hours. For production dubbing (entire TV series, 100+ hours), batch pipeline overnight. Total: ~$1,800-2,200. Dubbing quality is a chain: STT accuracy × translation quality × voice cloning fidelity. Invest in the weakest link — often translation for complex content.

Common beginner mistake

The mistake: Running Whisper tiny.en on accented English speech, getting 60% accuracy, translating the garbled transcript, then blaming the TTS for "weird robotic dubbing." Why it fails: The pipeline is only as strong as its weakest link. Whisper tiny.en has ~70% word error rate on accented or noisy speech. The translation model gets garbage input → produces approximate output. The TTS faithfully reads the wrong words. You blame the TTS, but STT is the culprit. The fix: Always use Whisper large-v3 for dubbing source transcription. The 3 GB model is worth it — 95%+ accuracy on clean speech, 85-90% on accented/noisy speech. Check the transcript BEFORE translating. If the transcript has errors, fix them manually or re-transcribe. A 5-minute manual transcript review saves 2 hours of re-dubbing downstream garbage.

Recommended setup for dubbing & translation

Recommended runtimes

Browse all tools for runtimes that fit this workload.

Reality check

Audio models are surprisingly forgiving on hardware. Whisper, Coqui, OpenAI Whisper-cpp all run well on 8-12 GB GPUs. The bottleneck is rarely the GPU; it's audio preprocessing and disk I/O for batch transcription.

Common mistakes

  • Overspending on GPU for audio-only workflows (8-12 GB is enough for Whisper)
  • Running audio + LLM concurrently without budgeting VRAM
  • Using fp32 weights when fp16 / int8 give 2-3x speedup with no quality loss
  • Forgetting audio preprocessing eats CPU cycles — a fast SSD helps more than expected

What breaks first

The errors most operators hit when running dubbing & translation locally. Each links to a diagnose+fix walkthrough.

Before you buy

Verify your specific hardware can handle dubbing & translation before committing money.

Specialized buyer guides
Updated 2026 roundup