Add Subtitles

Put a caption file onto a video — burned into the frame, or as a track the player can switch off.

Secure server processingVideoWorkingNo account needed

What this tool does

Add Subtitles takes two files at once, your video and a caption file, and hands both to FFmpeg on the OmniKitly processing service. SRT, VTT and ASS captions are accepted, and the two routes on offer differ in a way worth understanding before you choose: burning writes the words into the pixels themselves, while attaching stores them as a separate stream alongside the picture.

Burning re-encodes. Every frame is decoded and written again as H.264 in an MP4 with AAC audio, at CRF 23 — a fixed quality level with no control over it here. Of the four style controls, two behave: placement puts the lines at the top or the bottom of the frame, and the size runs from 10 to 72, though that number is a subtitle-style value rather than a pixel height, so the same setting draws far bigger letters on a 4K frame than on a 720p one. There is no font family picker, no background box and no margin control, and none of these four appear on the other route because nothing there changes appearance.

Burned text takes a size from 10 to 72, a fill colour and a top-or-bottom position, and libass draws it with a dark outline behind each letter unless you turn that off. The outline is worth keeping on a busy picture: white text over a bright sky is hard to read without it, and the outline costs nothing. The size is a style value scaled to the frame rather than a pixel height, so the same number looks larger on a 360p clip than on a 4K one — check the result at the resolution you are shipping.

Attaching a track is the cheaper operation and the much faster one: the video and audio streams are copied across untouched, so nothing is re-encoded and no quality is lost. Three consequences follow from how that copy is written. The result is always a Matroska .mkv file, whatever container went in; the captions are rewritten as SRT text, which drops cue positioning outright and reduces an ASS file's colours and sizes to SRT font tags that many players ignore; and every other stream in the source is carried over too. That last one bites, because Matroska holds only video, audio and subtitles — a recording with the timecode track an iPhone or an action camera writes is refused on this route with a general failure message, while burning the same file works.

The limitation that matters most is the one at the very start: this does not listen to your video. There is no speech recognition in it anywhere, so the caption file has to exist already, with timings that already line up — nothing here can shift a track running half a second early. The work itself runs on the processing service because a browser has no encoder equal to it, so both files travel there over an encrypted connection, and the uploads, the finished video and the job record are deleted together when the retention window expires, six hours by default. The ceilings are 200 MB per file and ten minutes of processing, and a source longer than three hours is refused outright.

How to use it

  1. Add the video and the caption file together. Both belong in the same job. Whichever file is not an .srt, .vtt or .ass is treated as the video, so the order you pick them in does not matter — but a job with no caption file at all is refused by name.
  2. Choose how they are added. A switchable subtitle track when the viewer should be able to turn the words off, or burned into the picture when they have to be visible everywhere the file lands.
  3. Set the burned-in text, if that is the route you took. Size, fill colour and top-or-bottom placement all apply. Leave the dark outline on unless the picture behind your captions is plain, since it is what keeps them legible over a bright or busy frame.
  4. Download the result. Burning returns an MP4, attaching returns an MKV. Both are named after your video with -subtitled on the end, and the job reports the finished size.

Processing & privacy

Secure server processing. This operation requires temporary server processing.

Common use cases

Captions for a social feed

Timelines autoplay muted and discard subtitle tracks on upload, so words that are not in the picture are never read. Burning is the version that survives.

A translated track for a talk or a film

A translator hands back an SRT. Attaching it leaves the original picture bit-for-bit intact and lets the viewer switch the words off when they do not need them.

Making an existing recording accessible

A meeting or lecture transcribed elsewhere gets its captions attached without a re-encode, so the archived file loses nothing in quality on the way through.

Proofing a caption file before you publish

Burn a throwaway copy and watch it. Timing drift, overlong lines and lines that outstay the shot are obvious on screen in a way they never are in a text editor.

Questions

Does this write the subtitles for me?
No. There is no transcription here at all — the tool needs a caption file you already hold. Produce one in an editor, through a transcription service or by hand, then bring it and the video together.
Are my files uploaded?
Yes. FFmpeg does the work on the OmniKitly processing service, so the video and the caption file are sent over an encrypted connection, and the uploads, the output and the job record are deleted when the retention window expires — six hours by default.
Can I change the colour of the burned-in text?
Yes. The swatch sets the fill, and the dark outline behind each letter is a separate tick box. A caption file that carries its own styling is a different matter: an ASS file's own colours are overridden by these controls when you burn it in.
Why did the attached-track version come back as an MKV?
Because that is the container this route writes, whatever you sent in. MP4 stores captions with a different codec, and rather than vary the format by input the job always produces Matroska — which plays in VLC, MPV and most media boxes, but is refused by Safari and by some televisions. Burn the captions in if the output has to be an MP4.
The attached-track job failed on a clip straight off my phone. Why?
Most likely a timecode track. Plenty of phone and camera recordings carry one, the job hands every source stream to Matroska, and Matroska takes only video, audio and subtitles — so the whole thing stops. Burning the captions in avoids it, as does remuxing the clip to strip the extra track first.
Which caption formats can I use?
SRT, VTT and ASS. Attaching rewrites whichever you send as SRT text: cue positions are lost, and an ASS file's colours and sizes survive only as SRT font tags that many players quietly ignore. Burning honours the file's timings and then applies the style settings on top.
Does burning lose quality?
Yes. It decodes and re-encodes every frame at a fixed quality level, and re-encodes the audio to AAC alongside it, so the output is one generation down from the source. Attaching a track copies both streams as they are and costs nothing at all.
My captions are out of sync — can I correct that here?
No. There is no offset or stretch control, so the timestamps in the file are used as written. Fix them in a subtitle editor first, then run the job with the corrected file.
Can I add two subtitle tracks in one go?
No. One caption file is used per job, the first one found among the uploads. On the attached-track route a subtitle stream the source video already carried is kept as well and rewritten as SRT, so the new track sits beside it rather than replacing it.

Related tools