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 |
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 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)
{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
-
SRT vs VTT: which subtitle format should you use?
The differences between SubRip and WebVTT that actually matter, how to convert between them, and which one to pick for the web, for broadcast and for translation.
-
Placeholder formats cheat sheet: %s, %@, %{name}, {{name}}, {0}
Every string placeholder syntax you will meet, which language or framework uses it, and what breaks when a translator retypes one by hand.
-
Subtitle file formats WebTranslateIt supports (documentation)
Per-format documentation for every subtitle format, with parsing details and data mapping.
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.