SRT vs VTT vs ASS

Three formats, one decision. Here is the short version and the reasoning behind it.

Blog · 10 August 2026 · 7 min read

Short answer

Use SRT. It works in every editor and on every platform that takes a subtitle file, which is why it is the safe default.

Use VTT only when the video plays on your own website. Use ASS only when the caption styling itself matters, such as word-by-word highlighting, and remember no social platform accepts it. For Reels, Shorts and TikTok, no file works at all: you burn the captions into the video.

Every subtitle tool offers to export SRT, VTT, and sometimes ASS, with no explanation of the difference. The choice matters more than it looks: pick wrong and you either lose all your styling or hand a client a file their system rejects.

The short version: use SRT unless you have a specific reason not to. Use VTT for web players. Use ASS when the styling is the point.

Side by side

SRTVTTASS
Full nameSubRip SubtitleWebVTTAdvanced SubStation Alpha
StylingNone, basic bold and italic at mostLimited, via CSS-like cuesFull: fonts, colours, outlines, position, animation
PositioningNoYesYes, pixel precise
Karaoke and word timingNoPartialYes
YouTubeYesYesNo
Instagram and TikTokNot directly, burn in insteadNoNo
Premiere, Final Cut, ResolveYesYesYes, with varying fidelity
HTML5 videoNoYes, this is its purposeNo
Safe defaultYesFor web onlyOnly when styling matters

SRT: the one that works everywhere

SRT is the oldest and simplest of the three. A cue number, a start and end timestamp, the text, and a blank line. That is the entire format.

Its limitation is its strength. Because it carries no styling, nothing can go wrong in translation between systems, and essentially every editor, platform, and player accepts it. When you send an SRT to a client, it will open.

Choose SRT for YouTube uploads, for handing files to an editor, for archival, and any time you are not sure. Note the milliseconds separator is a comma, not a full stop. A file using full stops is the single most common reason an SRT gets rejected.

VTT: the one built for browsers

WebVTT was designed for the HTML5 video element. If captions are going to play on your own website, VTT is the correct answer and SRT will simply not load.

It is close to SRT in structure, with two differences that trip people up: the file must begin with the line WEBVTT, and timestamps use a full stop before the milliseconds rather than a comma. Renaming an .srt to .vtt does not convert it.

VTT also supports positioning and simple styling, which is useful when a caption would otherwise cover a logo or a lower third.

ASS: the one that carries the look

Advanced SubStation Alpha stores styling as part of the subtitle data: typeface, size, primary and outline colour, shadow, rotation, exact screen position, and timed effects including karaoke-style word highlighting.

This is the format behind the caption styles you see on Reels and Shorts, where each word pops as it is spoken. That effect is impossible in SRT, which has no concept of a word within a cue.

The catch is support. No social platform accepts an ASS upload. Its real use is as an intermediate: you keep the styling in ASS, render it into the video, and publish the rendered file. If you are handing work to an editor who will do the final render in Premiere or Resolve, ASS preserves your design in a way SRT cannot.

What each file actually looks like

Opening one in a text editor removes most of the mystery, and it is the fastest way to spot why a file is being rejected.

SRT

A number, a time range, the text, then a blank line. That blank line is not optional, and a missing one is the most common reason a file fails to load.

1
00:00:01,240 --> 00:00:03,100
Haan doston, aaj hum banayenge

2
00:00:03,220 --> 00:00:05,900
ek simple recipe jo sabko pasand aayegi

VTT

Nearly identical, with two differences that matter: the WEBVTT header, and a full stop rather than a comma before the milliseconds.

WEBVTT

00:00:01.240 --> 00:00:03.100
Haan doston, aaj hum banayenge

ASS

A different shape entirely. A header defines named styles, then each line references one. This is what lets the file carry its own look.

[V4+ Styles]
Style: Pop,Montserrat,64,&H00FFFFFF,&H00000000,-1,0,3,2

[Events]
Dialogue: 0,0:00:01.24,0:00:03.10,Pop,,0,0,0,,Haan doston, aaj hum banayenge

If a file is being refused, check these three things first: the comma against full stop in the timestamps, the blank line between cues, and whether a stray WEBVTT header ended up in a file named .srt.

Converting between them

Renaming the file does not convert it. The timestamp punctuation and the header differ, so a renamed file is simply a broken file with a new extension.

The cleaner route is to avoid converting at all. Generate the formats you need from the same transcript, so each one is produced directly rather than degraded from another.

Encoding, and why captions turn into boxes

A subtitle file is plain text, and plain text needs an encoding: the rule that maps bytes to characters. Get it wrong and the words arrive as question marks, boxes, or nonsense symbols.

Save as UTF-8 without a byte order mark. UTF-8 covers every script. The byte order mark is a few invisible bytes some Windows editors add at the start, and several players read them as part of the first cue number, which breaks the entire file.

This bites hardest with Devanagari, where the viewer also needs a font containing those glyphs. Roman-script captions avoid the whole class of problem, since plain Latin characters render correctly in essentially any encoding and any font. That tradeoff is covered in the guide on Devanagari against Roman script.

What to pick, by where the video is going

A practical habit: export both a burned-in video and an SRT for every project. The video ships today, and the SRT is what lets you cut the same footage into a different format next month without re-transcribing it. Our SRT file generator produces both from one upload, so keeping the pair costs you nothing extra.

A note on Hindi and Hinglish captions

Format choice interacts with script choice. Devanagari text in an SRT depends on the player having a font that renders it, and on the file being saved as UTF-8. Get either wrong and the viewer sees boxes.

Roman-script Hindi sidesteps that entirely. "kya baat hai" is plain Latin characters, which every font and every platform on earth renders correctly, in every one of these three formats. It is one of the reasons DesiCaptions writes Hinglish and Hindi captions in Roman script rather than Devanagari.

Tools for this

Free to try, no credit card needed.

Caption your next video in minutes

Free plan, no credit card. Hindi and Hinglish captions in clean Roman script.

Start for free

Frequently asked questions

Can I convert an SRT to a VTT by renaming the file?

No. VTT requires a WEBVTT header line at the top, and its timestamps use a full stop before the milliseconds where SRT uses a comma. Renaming produces a file the browser will reject. Any subtitle tool will convert properly in one step.

Which format does Instagram accept?

None of them for Reels. Instagram has its own auto-caption feature, but it will not import your subtitle file. To control how captions look on Reels, burn them into the video before uploading.

Why does my SRT show strange characters?

Almost always an encoding problem. Save the file as UTF-8 without a byte order mark. This bites hardest with Devanagari and other non-Latin scripts, and does not happen at all with Roman-script captions.

Is ASS worth using if I only post to social media?

Not as a delivery format, since no platform accepts it. It is worth it as the thing that holds your caption design before rendering, especially for word-by-word highlighting, which SRT cannot express.