SRT, VTT, ASS: subtitle formats and what conversion loses

3 min read · Updated 2026-09-12

Subtitle files are small text files, which makes people assume converting between them is trivial. The timings are trivial. The styling is not — and the difference between these formats is almost entirely about how much styling they can express.

The three formats

FormatWhat it holds
SRT (SubRip)Numbered cues: a start time, an end time, and lines of text. Essentially no styling.
VTT (WebVTT)The same model, plus a header, optional positioning and CSS-style cues. This is what browsers read.
ASS / SSA (Advanced SubStation Alpha)Full styling: named styles, fonts, colours, outlines, shadows, exact positioning, rotation, karaoke timing, animation.

Why the format matters more than it looks

All three describe the same underlying thing: a list of cues, where a cue is a start time, an end time, and some text. If that is all your subtitles contain, the formats are genuinely interchangeable and converting between them changes nothing but syntax.

ASS is the exception, and it is a big one. Fansubbed anime, karaoke, and any subtitle track where the text is positioned around on-screen elements rely on ASS's override tags — inline codes that set fonts, colours, outlines, positions, and per-syllable timing. None of that has any representation in SRT.

So converting ASS to SRT is not a syntax change. It is a deliberate discard: the override tags are stripped and only the timed lines survive. If the subtitles were doing anything visually interesting, the interesting part is gone.

SRT to VTT, and why you would

This is the most common subtitle conversion and the most benign. WebVTT is what an HTML `<track>` element reads — if you are putting a video on a web page with captions, VTT is not optional, it is the format the browser accepts.

The changes are cosmetic: a `WEBVTT` header line is added at the top, and the millisecond separator in the timestamps changes from a comma (`00:01:23,456`) to a full stop (`00:01:23.456`). The cue text itself is untouched. This is why the two formats are so nearly the same file — VTT was designed as SRT with somewhere to grow.

VTT to SRT is the same transformation in reverse, for players and editors that predate WebVTT and only take SubRip.

Extracting subtitles from a video

A video file can carry subtitles as an embedded stream alongside the video and audio. Extracting them is not a conversion of the video at all: ffmpeg maps the first subtitle stream out of the container and rewrites it as SRT or VTT. The picture and the audio are discarded, and what you get back is a small text file.

Two things about this catch people out. First, the video must actually contain a subtitle stream — we probe for one before starting and stop with a clear error if there is none. Second, and more importantly, burned-in subtitles are not a subtitle stream. If the text is part of the picture, there is nothing to extract, and no tool can do anything about it short of running OCR over every frame.

You can usually tell which you have by trying to turn subtitles off in a player. If they disappear, they are a stream. If they stay, they are painted into the video.

Converting to plain text

Subtitle to TXT produces a transcript: the timestamps go, the cue numbering goes, and what is left is the dialogue as continuous text. It is the right output when you want to read, search, or feed the content into something else.

It is the wrong output if you intend to put the subtitles back onto a video later, because the timing information is not recoverable from the text.

Practical guidance

  • Publishing video on the web: VTT. Nothing else works with a `<track>` element.
  • Uploading to a video platform or handing to a player: SRT. It is the universal interchange format and everything accepts it.
  • Preserving styled or positioned subtitles: keep the ASS. Convert a copy to SRT if you need a plain version, but do not treat the SRT as a replacement.
  • Working with a multi-language release: only the first subtitle track is extracted per pass. Run one extraction per track.
  • Editing timings: do it in the format you will deliver in. Round-tripping through a format with less precision is an easy way to introduce drift.

Try it

Read next

SRT, VTT, ASS: subtitle formats and what conversion loses · Convert Everything