Subtitle file formats compared: SRT, VTT, TTML, ASS, SAMI and more

Eight subtitle formats side by side — what each one looks like, what it can express, where it is used, and which to choose for web, broadcast, anime or archive.

Eight formats are in common use, they overlap heavily, and the differences between them are almost entirely about how much presentation the file is allowed to carry. At one end SRT holds text and timings and nothing else. At the other, ASS specifies fonts, colours, rotation and animation, and TTML specifies a full styling and layout model in XML.

Here they are side by side, followed by what each one looks like and when to pick it.

The comparison

Format Extension Origin Styling Positioning Multi-language Typical use
SubRip .srt SubRip (de facto) none none one file per language universal interchange, video platforms
YouTube .sbv Google none none one file per language YouTube caption upload
WebVTT .vtt W3C CSS via ::cue cue settings, regions one file per language HTML5 <track>, web video
SAMI .smi, .sami Microsoft CSS classes limited yes, in one file legacy Windows Media, archives
ASS / SSA .ass, .ssa SubStation Alpha extensive: fonts, colours, effects full, per-event one file per language anime fansubs, karaoke, typesetting
TTML / DFXP .ttml, .dfxp W3C full XML styling model regions and layout yes, in one file broadcast, streaming delivery
MicroDVD .sub MicroDVD player inline control codes limited one file per language legacy, frame-based sources
SubViewer .sub SubViewer minimal none one file per language legacy

Two columns are worth pausing on.

Multi-language in one file. SAMI and TTML can carry several languages in a single document; the rest cannot. That sounds convenient and is usually a trap for a translation workflow — it makes the file a merge conflict waiting to happen and couples every language’s release to every other’s. One file per language per format is the arrangement that survives contact with a team.

Frame-based versus time-based. MicroDVD addresses cues by frame number, not timestamp. Change the frame rate of the video and every cue moves. Every other format on this list is time-based and immune to that.

What each one looks like

SubRip (.srt)

1
00:00:00,580 --> 00:00:04,270
In the last video, we showed
that if you had a line, which

Sequence number, timecode with a comma before milliseconds, text, blank line. No specification, no styling, no encoding declaration — and near-total player support. Covered in detail in SRT vs VTT.

YouTube (.sbv)

0:00:06.373,0:00:10.373
hundreds of millions of users of social networks around the World

0:00:10.681,0:00:14.681
have completely changed how to communicate online and build your brand

SRT with the sequence numbers removed and the timecodes joined by a comma. Google’s caption upload format; almost never seen outside that context.

WebVTT (.vtt)

WEBVTT

NOTE Keep this under two lines for the mobile player

intro
00:00:00.000 --> 00:00:04.000 position:50% align:center
Welcome to this video tutorial

The web-native format: mandatory header, dot before milliseconds, cue settings for positioning, STYLE blocks carrying CSS, REGION blocks for roll-up captions, and NOTE blocks for comments. UTF-8 is required, which quietly eliminates the encoding guesswork that plagues SRT.

SAMI (.smi, .sami)

<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { font-family: Arial; font-size: 14pt; color: white; }
.ENUSCC { name: English; lang: en-US; }
.FRFRCC { name: French; lang: fr-FR; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=0>
<P Class=ENUSCC>Welcome to the presentation
<P Class=FRFRCC>Bienvenue à la présentation
</BODY>

Microsoft’s HTML-like format. Each SYNC block is a start time in milliseconds, and CSS classes tag each paragraph with a language — so one file holds every language at once. Largely legacy now, but common in archives and older corporate video libraries, and the multi-language layout means a SAMI file is often the only copy of a translation that exists.

ASS / SSA (.ass, .ssa)

[Script Info]
Title: Example Subtitles
ScriptType: v4.00+
PlayResX: 1920
PlayResY: 1080

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, ...
Style: Default,Arial,48,&H00FFFFFF,&H000000FF,...

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.00,0:00:05.00,Default,,0,0,0,,Welcome to this video presentation
Dialogue: 0,0:00:05.00,0:00:10.00,Default,,0,0,0,,Today we'll learn about subtitles

An INI-like structure in three sections: metadata, named styles, and timed Dialogue events referencing those styles. The text field can carry override tags{\b1}bold{\b0}, {\c&HFF0000&} for colour, {\pos(320,240)} for absolute position, plus transforms and animation.

This is the format of choice where typesetting matters: anime fansubbing, karaoke, and any case where a sign in the video needs a translated overlay matching its perspective. It is also the format where translation is most fragile, because those override tags live inline with the words and must come through untouched.

TTML / DFXP (.ttml, .dfxp)

xml
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml"
    xmlns:tts="http://www.w3.org/ns/ttml#styling"
    xml:lang="en">
  <head>
    <styling>
      <style xml:id="defaultStyle" tts:fontFamily="Arial"
             tts:textAlign="center" tts:color="white"/>
    </styling>
    <layout>
      <region xml:id="bottom" tts:origin="10% 80%" tts:extent="80% 20%"/>
    </layout>
  </head>
  <body>
    <div region="bottom">
      <p begin="00:00:01.000" end="00:00:05.000" style="defaultStyle">
        Welcome to this video presentation
      </p>
    </div>
  </body>
</tt>

The W3C standard, and the one broadcast and streaming delivery specifications are written against. Full separation of styling, layout and content; xml:lang on any element; regions; and timing expressed as either begin/end or begin/dur. DFXP is the older name for the distribution profile; IMSC, the profile most large platforms actually require, is a constrained TTML.

Verbose to read and to write, and the right answer when the delivery specification says so.

MicroDVD (.sub)

sub
{1}{1}29.970
{653}{716}PLANNING: Tailor Project
{716}{812}BASED ON A STORY BY:|Yoshioka Hitoshi

Frame numbers in braces, then text, with | marking a line break. The first line usually declares the frame rate. Frame-addressed timing makes it fragile — the file is only correct for the exact video it was authored against.

SubViewer (.sub)

00:01:31.00,00:01:33.00
String1

00:01:34.32,00:01:36.72
String2

Start and end times in centiseconds, then text. Simple, legacy, and sharing the .sub extension with MicroDVD despite being unrelated — worth sniffing the content rather than trusting the extension.

Choosing one

If you are… Use
Playing video in a browser WebVTT — the only format <track> accepts
Uploading to YouTube, Vimeo or a social platform SRT (or SBV for YouTube’s own tooling)
Delivering to broadcast or a streaming platform TTML / IMSC, per their delivery spec
Typesetting signs, karaoke, or anything visually elaborate ASS
Exchanging between tools, or unsure SRT — it converts cleanly into everything else
Reading an old archive whatever it is in; convert to SRT or VTT and keep the original

The general principle: author in the richest format your pipeline genuinely needs, and generate the simpler ones from it. Going from ASS or TTML down to SRT is lossy but mechanical; going the other way means re-doing work by hand.

Translating subtitles

Whatever the format, the same three constraints apply, and none of them are about the file.

The time window is fixed. A translated cue has to be readable in the seconds the original occupies. German and Finnish routinely run 20–30% longer than English, so the translator’s job is compression as much as translation — and they need to be told that before they start, not in review.

Reading speed caps the length. Roughly 15–20 characters per second for adult viewers. A two-second cue holds about 35 characters regardless of what needs saying. Setting an explicit per-segment character limit turns this from a review argument into a constraint the editor enforces as the translator types.

Markup has to survive. ASS override tags, VTT cue settings, TTML style references and SAMI class attributes are all structure, not content. A tool that hands a translator the raw line and hopes for the best will eventually get a file that no longer parses.

WebTranslateIt reads and writes all eight formats above. In each case the timing, styling and structural metadata round-trips untouched while only the subtitle text is exposed as translatable segments — VTT NOTE blocks arrive as developer comments, ASS style names and layer/effect data are preserved alongside the segment, and inline override tags stay in the text for exact round-tripping. Once the text is segmented, translation memory, machine translation and batch operations apply the same way they would to any other language file.

Frequently asked questions

What is the most widely supported subtitle format?
SubRip (.srt). It has no formal specification, which is precisely why it is universal — the format is simple enough that every player implemented it, and simple enough that no player disagrees about what it means.
Which subtitle format do streaming services use?
TTML and its DFXP profile. It is a W3C XML standard that carries styling, layout, timing metadata and multiple languages in one document, which is what broadcast and streaming delivery specifications require. IMSC, the subtitle profile used by most large platforms, is a constrained TTML.
What is the difference between ASS and SSA?
ASS (Advanced SubStation Alpha) is the successor to SSA (SubStation Alpha), adding richer styling, transforms and effects. Both use the same sectioned INI-like structure, so tools generally handle them together. ASS is the one still in active use, largely in anime fansubbing and elsewhere that typesetting matters.
Which subtitle format is easiest to translate?
SRT and SBV, because the text sits on its own lines with nothing else around it. ASS is the hardest, because dialogue lines carry inline override tags that must survive translation intact. In any format the real requirement is a tool that exposes only the text and round-trips the timing and styling untouched.

Keep reading

Translate your app without the spreadsheet round-trip

WebTranslateIt reads the file formats and placeholder syntax described on this page, validates them as translators work, and syncs the results straight back into your repository.