How to Add Subtitles in Multiple Languages to One Video
Add subtitles in multiple languages to one video: transcribe once, translate into layers, and pick one of three deliveries — separate files, tracks, or burn-in.
Adding subtitles in multiple languages to one video is three decisions, not one long task: transcribe once in the original language, add each other language as a translation layer on those same timings, then pick how you deliver it — separate files, one video with switchable tracks, or one burned-in copy per language. Almost every painful multilingual subtitle workflow goes wrong because those steps were done in the wrong order.
This walks through the order that works, what translation does to timing and fonts along the way, and which delivery format each platform actually accepts.
Transcribe once, translate into layers
The mistake that costs the most time is running speech recognition again for every language.
Speech recognition does two things at once: it produces text, and it produces the cue boundaries — where each subtitle starts and ends. The text differs per language. The boundaries should not. If you transcribe the same video five times, you get five sets of slightly different boundaries, and now a sync fix in Spanish does nothing for the German file. Multiply that by a two-hour recording and the workflow collapses.
Translating the transcript instead keeps one timeline:
- One transcription of the spoken language, with real timings.
- One round of corrections — names, product terms, punctuation.
- N translations of that corrected text, all inheriting the same cue boundaries.
Step 2 is where the leverage is. A misspelled surname fixed before translation is fixed everywhere. The same surname fixed afterwards is eight separate edits.
In Sablate this is literally how a job is structured: a translation is a layer added to an existing transcription, not a new job. The offline translator (Argos) runs on your machine; DeepL, OpenAI and Claude are available if you bring your own API key. Worth knowing about the offline path: Argos publishes almost nothing but pairs with English on one side, so a pair like Turkish to German has no direct package and is composed through English as an intermediate hop. It works, and it is the reason a Turkish-to-German line reads slightly flatter than a Turkish-to-English one.
Pick the delivery format before you start
This decides your entire export, so decide it first.
| Separate files per language | One MKV, one track per language | Burned-in copy per language | |
|---|---|---|---|
| Viewer can switch language | On the platform | In the player | No |
| Styling survives | Minimal (bold, italic, colour) | Yes, ASS track | Yes, exactly as designed |
| Works on YouTube / Vimeo | Yes, upload each file | No | Yes, it is just video |
| Works on TikTok / Reels / Shorts | No | No | Yes |
| Works offline / on a TV or USB stick | Needs matching filenames | Yes, one file | Yes |
| Re-encodes the video | No | No, streams are copied | Yes, once per language |
| Cost of adding a 9th language | One more small file | One more track | One more full encode |
The pattern most people land on: files for the platforms that accept them, one MKV for archive and local playback, and burn-in only for the one or two languages their main audience speaks.
If you are unsure which of .srt, .vtt and .ass a given platform wants, the format comparison covers exactly what each one carries.
What translation does to your timing
Translated subtitles break in a specific, predictable way: the timing is still right, and the line is now unreadable.
English into Spanish, French, Italian or Portuguese commonly runs 20 to 30 percent longer. German compounds run long in a different way — fewer words, but words that do not fit a 42-character line. The cue still starts and ends where the speaker started and ended. The viewer simply cannot read that many characters in 1.8 seconds.
The measurement for this is characters per second (CPS), and the reference numbers are Netflix's per-language style guides:
| Language | Reading speed, adult programmes | Characters per line |
|---|---|---|
| English (USA) | Up to 20 CPS | 42 |
| Russian | Up to 17 CPS | 42 |
| Korean | Up to 12 CPS | 16 |
| Chinese (Simplified) | Up to 9 CPS | 16 |
| Japanese | Up to 4 CPS | 13 full-width |
Those limits are not arbitrary strictness. A Japanese subtitle carries far more meaning per character, so the same second of speech needs far fewer of them on screen, and a machine translation that fills the cue to the English limit is unreadable.
The fix is never to move the timestamps — they match the audio, which is the one thing you cannot change. The fix is to shorten the wording or split the cue in two. Sablate's editor flags any cue over 17 CPS while you edit, which is the right alarm for most Latin and Cyrillic languages and a deliberately loose one for Japanese and Korean; treat it as a floor, not a certificate.
Give each language a font that can draw it
This one is invisible until the moment you render, and then it is very visible.
Display caption faces — the heavy condensed fonts that make captions look like captions — mostly cover Latin, Cyrillic and Greek and nothing else. Point one at Arabic, Hebrew, Thai, Devanagari, Hangul or CJK and you get empty boxes, in a video you have already spent twenty minutes encoding.
Sablate handles this by checking the script of each language layer and substituting a system font that actually contains those glyphs, on both the preview and the burn-in, so what you see in the editor is what lands in the file. Each language layer also carries its own style, which matters for more than fonts: a size that reads well in English is often too large for a 16-character Korean line.
Uploading multiple language subtitles to YouTube
YouTube accepts one subtitle file per language per video, uploaded in its own step. There is no multi-language subtitle file to upload — the "multiple languages" live in the platform, not the file.
- YouTube Studio, then Subtitles, then your video.
- Add Language, pick the language, then Upload file.
- Upload the
.srtor.vttfor that language. - Repeat per language. Title and description translations are a separate section.
Two things worth knowing. YouTube's own auto-translate is free and instant, which is genuinely hard to beat on cost — but it translates its own auto-transcript, so any word the recogniser got wrong is now wrong in every language. And YouTube renders every caption in the player's own style, so styling in your file is not what viewers see. If the look matters, burn it in.
Where each tool lands
| Sablate | YouTube auto-translate | Subtitle Edit | Cloud caption tools | |
|---|---|---|---|---|
| Price | $29 one-time | Free | Free, open source | Typically $16–23 per month |
| Video leaves your machine | No, unless you enable a cloud API key | Yes | No | Yes |
| One transcription, many language layers | Yes | Yes, from its own transcript | Yes, manually | Varies |
| Per-language style and script font | Yes | No, player style only | No | Rarely |
| Multi-track MKV export | Yes (Pro) | No | Via external muxing | No |
| Long recordings | No length limit on Pro | Whole video | No limit | Often billed per minute |
| Free tier that covers a full video | No — 10 minutes on Free | Yes, any length | Yes, everything | Usually watermarked |
Subtitle Edit deserves the honest note: it is free, it is excellent, and it can do transcription and translation. What it asks for in return is setup — models, tools and muxing configured separately — and it does not produce styled burn-in. If you enjoy that kind of configuration, it is the best free answer in this category.
Exporting the result
Once the layers exist, the export is the short part:
- Per-language subtitle files —
.srt,.vttor.txt, one per language, for platform uploads. - One MKV with every language — each language written as its own ASS track with a proper language tag, the caption font attached to the file, and the first track marked default. The video and audio are stream-copied, so nothing is re-encoded and the export takes seconds rather than an encode. Pro.
- Burned-in video — one render per language, at 16:9, 9:16 or 1:1. This is the only delivery that survives TikTok, Reels and Shorts. How burn-in works goes through the quality side.
On the Free plan a job carries one offline translation layer, and the first job that runs past the ten-minute wall may carry three. Pro removes the limits for a single $29 payment — see pricing for exactly what that covers.
The short version
Transcribe once. Correct that transcript before you translate anything. Add languages as layers on the same timings. Check reading speed and fonts per language, because both change when the text does. Then export the one delivery your platform actually accepts — and if that answer is "all three", it is the same work either way.