Translate subtitles without uploading the video

Bring an .srt or generate one here, pick a language, and get it back with every timing exactly where it was. The default translator runs on your own device and sends nothing at all.

Free on your device. No account, no watermark.

Five ways to translate, and only one of them is the usual one

Most tools give you a single translation engine and a queue. Here the engine is a choice, and the one selected by default is the one that never sends your text anywhere.

On this device — the default

Chrome’s own built-in translation, running in the browser. Free, no key, and nothing is uploaded. It is what you get if you change nothing.

A model on your own machine

The OpenAI-compatible option takes any server speaking that API, including Ollama or LM Studio running on the same computer. The text goes to localhost and no further.

Your own key, your own cost

Claude for long, context-dependent dialogue; DeepL for a dedicated translator rather than a general model; or any OpenAI-compatible service. The key stays in the page and is never written to disk.

Ours, if you would rather not have a key

Translation on our own backend, paid in credits and priced before you run it. No key and no account with anyone else. Every other option on this page is free.

The timings do not move

This is the part that goes wrong elsewhere, so it is worth saying how it is handled. A translation pass rewrites the words inside each cue and touches nothing else: the number of cues, and every start and end time, come out exactly as they went in.

A miscount stops the job

If a translator sends back a different number of lines than it was given, the run fails with the counts rather than guessing which line belongs to which cue. One wrong guess would push everything after it out of sync, and you would not notice until you watched it.

Sixty cues at a time

Subtitles go over in batches of sixty — roughly three minutes of speech. Small enough that one refusal does not cost the whole file, large enough that the translator still sees a conversation rather than a list of disconnected lines.

Twenty target languages

English, both written forms of Chinese, Japanese, Korean, Spanish, Portuguese, French, German, Italian, Russian, Arabic, Hindi, Indonesian, Thai, Vietnamese, Turkish, Polish, Dutch and Ukrainian.

Original and translation together

Stack both on the same cue, in either order, with the original set smaller so it reads as a reference. Both lines export, and both burn into the video if you want them there.

How to translate an .srt file

You do not have to generate the subtitles here first. Open the video, then open the .srt or .vtt you already have — from a translator, an editor or another tool. If the characters come out garbled, choose the file’s text encoding and it is read again.

Pick a target language, leave the translator on On this device unless you want something else, and run it. Correct any line that reads oddly — every cue is a text box, and the timestamp beside it jumps the video to that moment. Then export .srt, .vtt or .ass, or burn the result into an MP4.

Why not the usual online translator

The ordinary route is to upload your subtitle file, or your whole video, to a site that translates it on a server and sends a copy back. For a film, a lecture or anything under an NDA, that is the moment the content leaves your control — and you are trusting a deletion policy you cannot check.

Here the video never moves at all, under any option. On the default translator nothing moves: the work happens in the tab. If you do pick a cloud translator, what goes over is the subtitle text and nothing else — no file name, no audio, no video.

Questions

Does translating upload my video?

No. Only the subtitle text is sent, and only if you choose a cloud translator. The video never leaves your machine under any option. The default translates on your own device and sends nothing at all.

Will the subtitles still line up with the video?

Yes. Translation rewrites the words in each cue and nothing else — the cue count and every start and end time come through untouched. If a translator returns a different number of lines than were sent, the job stops rather than guessing which line belongs where, because a single miscount would push every cue after it out of sync.

Can I show the original and the translation together?

Yes, stacked on the same cue, with either one on top. The original can be set smaller than the translation so it reads as a reference rather than competing with it. Both lines export and both burn into the video.