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.