Add Subtitles to a Video

Drop in a video and an .srt or .vtt file. Burn the captions into the picture, or attach them as a track the viewer can switch off. Neither file leaves your device.

Burned in, or alongside

These are not two settings of the same thing. Burning in draws the captions onto the frames, so from that point on they are picture: indistinguishable from anything else that was filmed, impossible to switch off, and impossible to lose. That is exactly what you want for a clip going to a social platform, where the sound is off by default and any subtitle track you attached was thrown away at upload.

A separate track keeps the words as words. The viewer chooses whether to see them, a screen reader can read them, and the video itself is untouched — the streams are copied rather than re-encoded, so the file comes back in seconds with no loss at all. The catch is that it depends on the player honouring the track, and plenty do not.

If you are not sure which you want: burn in for anything you are publishing to someone else's platform, use a track for anything you control, and do both if it matters — run the tool twice.

A caption file is a transcript

It is worth being explicit about why this one runs locally. A subtitle file is the complete text of everything said in the recording, timed to the second. Uploading a video and its captions to a web service to have them joined together hands over both the footage and a searchable transcript of it — a legal deposition, a medical consultation, an internal all-hands. Here, both files are read by the page and processed by an ffmpeg build compiled to WebAssembly that runs inside your browser. There is no server to send them to.

Right-to-left text, and the font that has to be there

Rendering Arabic or Hebrew correctly takes two separate things: reordering the line so it runs the right way, and shaping the letters so they join. Both are present here. What is easy to forget is the third: a browser has no fonts to lend an ffmpeg build, so unless one is supplied deliberately, every caption renders as nothing at all — with no error, on a video that encoded perfectly. The font is served from this site along with everything else, and covers Latin, Greek, Cyrillic, Hebrew and Arabic.

Add Subtitles FAQ

What is the difference between burning in and a separate track?

Burned-in captions are painted into the picture itself. They survive anything — re-uploading, screen recording, a player with no subtitle support — and they cannot be turned off, ever. A separate track stores the words beside the video as MP4 timed text, so a viewer can switch them on and off, and so can search engines and screen readers read them. The trade is that some players ignore the track entirely, and most social platforms strip it on upload. If the video is going to Instagram or TikTok, burn it in.

Does adding a separate track re-encode my video?

No, and that is the main reason to prefer it when it fits. The picture and the sound are copied across byte for byte and the captions are muxed in beside them, so a half-hour video finishes in about the time it takes to read the file and comes out identical in quality. Burning in has to re-encode every frame, which takes real time and costs one generation of quality.

Is my video uploaded to have captions added?

No. Both the video and the caption file are read inside this page, and the work is done by an ffmpeg build compiled to WebAssembly that runs on your own machine. Nothing is sent anywhere, which is worth caring about here: a caption file is a full transcript, so uploading one to a converter hands over everything that was said as well as the recording.

Which caption files can I use?

SubRip (.srt) and WebVTT (.vtt). Both are read here and normalised to one form before anything is encoded, so WebVTT's extras — cue settings, voice tags like <v Speaker>, styling classes — are stripped rather than being drawn on screen as literal text. Anything unreadable in the file is counted and reported to you instead of being silently dropped.

Why does the separate track need an MP4?

Because MP4 timed text is an MP4 feature. WebM, AVI and MKV each carry subtitles a different way, and moving a WebM's video into an MP4 to attach one would mean either a re-encode or a copy that most players choke on. Rather than half-supporting it, the tool says up front that a separate track needs an MP4, M4V or MOV. Burning in works on any of them.

Do right-to-left languages work?

Yes. Arabic and Hebrew are reordered by FriBidi and shaped by HarfBuzz — Arabic letters join up the way they should — and the font shipped with the tool carries the glyphs for both, along with Greek and Cyrillic. This is a genuinely common failure elsewhere: a renderer with no bidi support prints the line backwards, and one with no glyphs prints a row of empty boxes.

My captions are out of sync. Can this fix that?

Not by shifting them, no — this attaches the file as it is. What it does do is check the timings against the real length of your video and tell you when captions start after the video has ended, which is the usual sign the file was made for a different cut. Fixing an offset means editing the caption file itself.