Skip to content
All guides

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

SRTWebVTT (.vtt)ASS (.ass)
Best forUniversal exchange, YouTube, editorsWebsites and HTML5 videoStyled captions, karaoke, burn-in
Time format00:01:02,50000:01:02.5000:01:02.50
PrecisionMillisecondsMillisecondsCentiseconds
StylingBasic tags, player-dependentCSS via ::cue, classesFull: fonts, colours, outlines, animation
PositioningMostly not standardCue settings (line, position, align)Exact pixel positions
SupportAlmost everywhereBrowsers, most platformslibass-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, align and vertical.
  • Voice tags (<v Sam>) mark the speaker, which helps accessibility and styling.
  • NOTE blocks allow comments, and STYLE blocks 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 / PlayResY define 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).
  • Alignment uses numpad positions: 2 is bottom-centre, 5 is middle-centre, 8 is top-centre.
  • MarginV lifts 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 WEBVTT header — 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.

· srt

How to Split or Merge SRT Files Without Breaking the Timing

Step-by-step guide to splitting an SRT file at a timestamp, merging several SRT parts into one, and combining two subtitle tracks — with the offset and renumbering rules that keep everything in sync.

· burn-in

How to Burn Subtitles Into a Video: Hardsubs vs Softsubs

The difference between hardcoded (burned-in) and soft subtitles, when to use each, and step-by-step ways to burn SRT or ASS captions into a video with FFmpeg, HandBrake or your video editor.

Back to all guides