DEV Community

Syed Masood Shah
Syed Masood Shah

Posted on

How to Dub Videos Locally: 10-Minute Setup (2026)

The moment I told a friend my video player could translate foreign films as they play, their first question wasn't about the tech. It was "what's it uploading?" The honest answer is nothing, and that's the whole reason I built it the way I did. Dubbing videos locally used to mean a batch job that ran overnight. These days a laptop can do it in real time, and you don't have to mail your films to a server to get there.

Fair warning going in: dubbing is harder than transcription because of timing. A sentence has to be spoken in the time the original sentence took. That's the constraint everything else dances around. If you're okay with a natural delay of a sentence or two, it reads fine and stays accurate.

What "dubbing videos locally" actually takes

You need four pieces, and none of them are exotic: a way to capture the audio, a transcriber, a translator, and a text-to-speech engine. On Windows, the capture piece is the one that bit me hardest, so you'll forgive me starting there.

Step 1: Get the audio out of the tab

A browser tab with a playing video is a walled garden. The trick that worked for me is a loopback capture — recording the audio the tab is sending to your speakers instead of trying to read the video file. The Windows loopback device made this trivial in the end, but it took me a while to find it. If you've ever watched a recording tool return nothing but silence, this is the step you were missing.

Step 2: Transcribe with Whisper

Once the audio is flowing into a pipe, Whisper turns it into text. Stream it in chunks rather than waiting for the whole film, and you get usable partial lines instead of a blob at the end. You want Python 3.10+ on the box. No GPU required — it helps, but Whisper runs fine on CPU for this.

Step 3: Translate with a local LLM

This is where LM Studio earns its keep. Load a small model (~2GB) and point it at each transcribed line. Because it's local, you can drip context in — character names, register, tone — without privacy concerns. And you can nudge it toward natural speech instead of word-for-word translation, which is what makes the dub watchable rather than robotic.

Step 4: Speak it with matching voice

Neural TTS (I use Kokoro) reads the translation back. The autopilot of all this is pitch detection: it looks at the pitch of the original speaker and picks a male or female voice to match, so a two-character scene doesn't collapse into one monotone narrator. The original audio ducks under the dub so you still hear the film, just quieter.

That's the whole pipeline. Install the models once — about 2GB — and everything after that runs offline. No account, no per-minute fee, no upload.

I packaged all of this into a Windows app and a browser extension because I got tired of re-assembling the parts by hand. There's a one-time $19 copy over at https://symshah.gumroad.com/l/livedub if you'd rather skip the wiring. Either way, dubbing videos locally is very doable in 2026 — you just need the patience to get the audio out of the browser first.

FAQ

Does it need a GPU? No. It runs on CPU, it's just snappier with one.

Is anything uploaded? No. Transcription, translation, and speech all happen on your machine.

Why the delay before it talks? It can't translate until the speaker finishes the sentence — same as every dubbing tool. It's honest, not broken.

Top comments (0)