SRT vs VTT vs ASS: Subtitle Formats Explained
What SRT, WebVTT and ASS subtitle files are, how their syntax differs, what each supports for styling and positioning, and which one to use for YouTube, the web, video editors and burned-in captions.
- subtitle formats
- srt
- basics
If you’ve ever exported subtitles, you’ve faced the dropdown: SRT, VTT, ASS, and sometimes a dozen more. They all store the same basic thing — text plus start and end times — but they differ in syntax, styling power and where they’re accepted. Picking the wrong one leads to rejected uploads, lost formatting or captions that render as raw code.
This guide compares the three formats you’ll meet most often and tells you which to choose.
The short answer
| SRT | WebVTT (.vtt) | ASS (.ass) | |
|---|---|---|---|
| Best for | Universal exchange, YouTube, editors | Websites and HTML5 video | Styled captions, karaoke, burn-in |
| Time format | 00:01:02,500 | 00:01:02.500 | 0:01:02.50 |
| Precision | Milliseconds | Milliseconds | Centiseconds |
| Styling | Basic tags, player-dependent | CSS via ::cue, classes | Full: fonts, colours, outlines, animation |
| Positioning | Mostly not standard | Cue settings (line, position, align) | Exact pixel positions |
| Support | Almost everywhere | Browsers, most platforms | libass-based players and tools |
If you’re unsure, export SRT. It’s the lowest common denominator and almost every tool can convert it into the others.
SRT (SubRip Subtitle)
SRT comes from SubRip, an old Windows tool for ripping subtitles from DVDs. Its format was never formally standardised, but it is so simple that it became the de facto exchange format.
Structure
Each cue has four parts: a sequence number, a timing line, one or more text lines and a blank line.
1
00:00:01,000 --> 00:00:03,200
Welcome back to the channel.
2
00:00:03,400 --> 00:00:06,000
Today we're fixing
out-of-sync subtitles.
Things to know:
- The timestamp uses a comma before the milliseconds. Using a period is one of the most common reasons an SRT fails to load in strict tools.
- Hours are always present (
00:). - Cue numbers should be sequential. Many players ignore them, but some tools validate them.
- Encoding should be UTF-8. Older files in legacy encodings show garbled accents and non-Latin characters.
Styling
Many players understand basic HTML-like tags — <i>, <b>, <u> and sometimes <font color="..."> — but support varies. Some players also honour ASS-style alignment codes such as {\an8} to move a cue to the top of the screen. None of this is guaranteed, so treat SRT as a plain-text format.
Where it’s used
YouTube, Vimeo, Facebook, most video editors (Premiere Pro, DaVinci Resolve, Final Cut Pro via import), VLC, mpv and media servers all accept SRT. It’s also the usual delivery format when a client asks for “a subtitle file”.
WebVTT (Web Video Text Tracks)
WebVTT is a W3C specification designed for HTML5 video. It looks like SRT at first glance, which is deliberate, but it adds features that matter on the web.
Structure
WEBVTT
intro
00:01.000 --> 00:03.200
Welcome back to the channel.
00:03.400 --> 00:06.000 line:10% align:center
<v Sam>Today we're fixing
out-of-sync subtitles.
Key differences from SRT:
- The file must start with
WEBVTT. - Timestamps use a period and hours are optional.
- Cue identifiers (like
intro) are optional and can be any text. - Cue settings after the timestamp control placement:
line,position,size,alignandvertical. - Voice tags (
<v Sam>) mark the speaker, which helps accessibility and styling. NOTEblocks allow comments, andSTYLEblocks can hold CSS.
Styling
On a web page, you style captions with the ::cue pseudo-element:
video::cue {
background: rgba(0, 0, 0, 0.8);
color: #fff;
font-size: 1.1em;
}
video::cue(.highlight) {
color: #facc15;
}
Browser support for ::cue properties is limited to a subset (colour, background, font, text decoration and a few others), so don’t expect full layout control.
Where it’s used
WebVTT is the format of the HTML <track> element and is used by most web video players and streaming setups (for example, HLS commonly carries WebVTT subtitles). YouTube and Vimeo accept it too.
ASS (Advanced SubStation Alpha)
ASS is the successor to SSA (SubStation Alpha) and comes from the fansubbing world, where people wanted typeset, styled and animated subtitles. It is far more powerful than SRT or VTT, and correspondingly more complex.
Structure
An ASS file is split into sections:
[Script Info]
ScriptType: v4.00+
PlayResX: 1080
PlayResY: 1920
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,72,&H00FFFFFF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,4,0,2,60,60,420,1
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.00,0:00:03.20,Default,,0,0,0,,Welcome back to the channel.
Notes:
PlayResX/PlayResYdefine the coordinate space. Here it’s a 1080×1920 vertical frame.- Colours are written as
&HAABBGGRR— note the blue-green-red order and that the alpha byte means transparency (00 is opaque). Alignmentuses numpad positions: 2 is bottom-centre, 5 is middle-centre, 8 is top-centre.MarginVlifts captions away from the edge — useful for keeping them clear of app UI on vertical video.- Timestamps have only centisecond precision.
Styling
Beyond styles, inline override tags let you change anything per cue or per word: {\b1} for bold, {\c&H00FFFF&} for colour, {\pos(540,1200)} for exact placement, {\fad(150,150)} for fades, and {\k} tags for karaoke-style word highlighting. That’s what makes ASS the go-to format for the bold, word-by-word captions popular on short-form video.
Where it’s used
ASS is rendered by libass, which powers mpv, VLC and FFmpeg’s subtitles and ass filters, and is natively supported in MKV containers. It is not a good delivery format for social platforms or most web players — styling will be lost or the file rejected. Instead, ASS is usually used as an intermediate step to burn captions into the video (see how to burn subtitles into a video).
Which format should you use?
- Uploading to YouTube or Vimeo: SRT (or VTT).
- Hosting video on your own website: WebVTT with the
<track>element. - Sending files to an editor or client: SRT unless they specify otherwise.
- Styled captions for TikTok, Reels or Shorts: design in ASS, then burn in.
- Archiving a film with multiple tracks: MKV with SRT or ASS tracks inside.
Converting between formats
Converting SRT ↔ VTT is lossless for the text and timing. Converting from ASS to SRT or VTT drops styling and positioning. FFmpeg handles the basics:
ffmpeg -i subs.srt subs.vtt
ffmpeg -i subs.srt subs.ass
ffmpeg -i subs.ass subs.srt
After converting, always open the file and spot-check a few cues — especially line breaks and special characters.
Common format mistakes
- Wrong decimal separator — comma in SRT, period in VTT.
- Missing
WEBVTTheader — browsers will refuse the file. - Wrong encoding — save as UTF-8 to avoid garbled characters.
- Missing blank line between cues — the next cue gets merged into the previous one.
- Overlapping cues — allowed in VTT and ASS, but many SRT tools show only one at a time.
CutMySub is being built to import and export SRT, WebVTT and ASS so you can move between them without hand-editing. Find out what’s coming.