Subtitle File Formats Explained: SRT, VTT, ASS, SBV, TTML
Compare SRT, VTT, ASS/SSA, SBV, and TTML subtitle formats. Learn which format each platform requires, how to convert between them, and how to style captions correctly.

Compare SRT, VTT, ASS/SSA, SBV, and TTML subtitle formats. Learn which format each platform requires, how to convert between them, and how to style captions correctly.

A subtitle file is a plain text document with timestamps. In theory, the format differences should be trivial. In practice, every video platform has its own required format, styling support varies wildly, and uploading the wrong format can result in garbled timing, broken characters, or silent failure where the platform ignores your file entirely.
The five formats that cover 95% of real-world subtitle use cases are SRT, VTT, ASS, SBV, and TTML. Each has specific strengths, limitations, and required use cases. This guide explains all five and covers conversion between them.
| Format | Full Name | Styling Support | Platform Support | File Size |
|---|---|---|---|---|
| SRT | SubRip Text | Basic HTML tags | Universal | ~5 KB/hr |
| VTT | WebVTT | CSS classes, cues | Web/HTML5 | ~6 KB/hr |
| ASS/SSA | Advanced SubStation Alpha | Full (fonts, colors, positioning, effects) | Desktop players, Aegisub | ~10 KB/hr |
| SBV | SubViewer | Minimal | YouTube (legacy) | ~5 KB/hr |
| TTML | Timed Text Markup Language | XML-based styling | Broadcast, Netflix, Amazon | ~15 KB/hr |
SubRip Text (SRT) is the most widely supported subtitle format in existence. If you do not know which format a platform accepts, try SRT first. It was extracted by a program called SubRip that "ripped" subtitle data from DVD subpicture streams and saved them as text files — hence the format.
1
00:00:04,200 --> 00:00:07,650
The exploration team reached the summit
at dawn on the third day.
2
00:00:08,100 --> 00:00:10,500
No one had expected the weather
to cooperate so perfectly.
3
00:00:11,200 --> 00:00:14,000
They set up camp and waited
for the light to improve.
Each subtitle entry has:
HH:MM:SS,mmm --> HH:MM:SS,mmm (note: comma as millisecond separator, not period)Basic SRT supports a minimal set of HTML-like tags:
<b>bold text</b><i>italic text</i><u>underlined text</u><font color="#FF0000">colored text</font>Most players render these tags, but support is not guaranteed across all platforms. Use them sparingly and test on your target platform.
| Platform | SRT Support |
|---|---|
| YouTube | Yes |
| Vimeo | Yes |
| Yes | |
| Twitter/X | Yes |
| TikTok | Yes (auto-generation preferred) |
| VLC | Yes |
| Windows Media Player | Yes |
| macOS QuickTime | Yes |
HTML5 <video> | No (use VTT) |
SRT's only significant gap is native HTML5 video — browsers do not implement SRT directly. Use VTT for web embedding.
WebVTT (Web Video Text Tracks) is the W3C standard for subtitles in HTML5 video. It extends SRT's capabilities with CSS-based styling, positioning, and metadata regions.
WEBVTT
00:00:04.200 --> 00:00:07.650
The exploration team reached the summit
at dawn on the third day.
00:00:08.100 --> 00:00:10.500
No one had expected the weather
to cooperate so perfectly.
Key differences from SRT:
WEBVTT header lineVTT allows per-cue positioning and CSS styling:
WEBVTT
STYLE
::cue {
font-size: 1.2em;
background: rgba(0, 0, 0, 0.7);
color: white;
}
::cue(b) {
color: yellow;
}
00:00:04.200 --> 00:00:07.650 position:50% align:center line:85%
The exploration team <b>reached the summit</b>
at dawn on the third day.
The cue settings on the timestamp line control position, alignment, and vertical placement. line:85% places the subtitle 85% down the video frame, which is the standard bottom-caption position.
<video controls>
<source src="video.mp4" type="video/mp4" />
<track src="subtitles.vtt" kind="subtitles" srclang="en" label="English" default />
<track src="subtitles-es.vtt" kind="subtitles" srclang="es" label="Español" />
</video>
The <track> element's kind attribute accepts subtitles, captions, descriptions, chapters, and metadata. subtitles shows text translations; captions includes non-speech audio descriptions (sound effects, speaker IDs) — the distinction matters for accessibility.
Advanced SubStation Alpha (ASS) and its predecessor SubStation Alpha (SSA) are subtitle formats designed for anime fansubs and content requiring elaborate styling. ASS supports everything SRT cannot:
[Script Info]
Title: Example Subtitles
ScriptType: v4.00+
PlayResX: 1920
PlayResY: 1080
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, ...
Style: Default,Arial,40,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,...
[Events]
Format: Layer, Start, End, Style, Actor, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:04.20,0:00:07.65,Default,,0,0,0,,The exploration team reached the summit
The style definitions at the top are global; individual dialogue entries can override them with inline style tags like {\b1}bold{\b0} or {\c&H0000FF&}blue text.
ASS is appropriate for:
ASS is not appropriate for direct upload to YouTube, Vimeo, or social platforms — they either reject it or strip the styling. Convert to SRT before uploading.
SubViewer (SBV) was YouTube's own subtitle format before they added broader SRT and VTT support. It is structurally similar to SRT:
0:00:04.200,0:00:07.650
The exploration team reached the summit.
0:00:08.100,0:00:10.500
No one had expected the weather to cooperate.
The main difference from SRT: timestamps use H:MM:SS.mmm format (hours as single digit, period as millisecond separator) and no sequence numbers.
YouTube still accepts SBV, but SRT is the better choice — it is equally supported with no format-specific quirks. If you download subtitles from YouTube and get .sbv files, convert them to SRT for universal compatibility.
Timed Text Markup Language (TTML) is an XML-based subtitle format developed by the W3C and used extensively in broadcast television, Netflix, Amazon Prime Video, and Hulu.
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml"
xmlns:tts="http://www.w3.org/ns/ttml#styling">
<head>
<styling>
<style xml:id="s1" tts:color="white" tts:fontSize="100%"/>
</styling>
</head>
<body>
<div>
<p xml:id="p1" begin="00:00:04.200" end="00:00:07.650" style="s1">
The exploration team reached the summit
</p>
</div>
</body>
</tt>
TTML's XML structure makes it verbose but highly precise. Netflix uses a TTML-based format called DFXP (Distribution Format Exchange Profile) for their subtitle delivery specifications.
Most video creators do not need TTML directly. It becomes relevant when delivering content to major streaming platforms, broadcast networks, or professional distribution workflows.
| Platform | Required Format | Notes |
|---|---|---|
| YouTube | SRT, VTT, SBV, TTML | SRT recommended |
| Vimeo | VTT, SRT | VTT preferred |
| SRT | Only SRT supported | |
| Twitter/X | SRT | Auto-captions generated; manual SRT upload available |
| TikTok | SRT (via Creator Center) | Limited to desktop upload |
| Netflix (delivery) | TTML / DFXP | Partner portal specs |
| Amazon Prime | TTML | IMF package requirements |
| HTML5 video | VTT | SRT not natively supported |
| VLC | SRT, VTT, ASS, SSA | All major formats |
| Kodi | SRT, VTT, ASS | All major formats |
| mpv | SRT, VTT, ASS | All major formats |
FFmpeg handles most subtitle format conversions as part of video remuxing, or for standalone subtitle conversion:
# SRT to VTT
ffmpeg -i subtitles.srt subtitles.vtt
# VTT to SRT
ffmpeg -i subtitles.vtt subtitles.srt
# ASS to SRT (loses styling)
ffmpeg -i subtitles.ass subtitles.srt
# Extract subtitles from an MKV container
ffmpeg -i video.mkv -map 0:s:0 -c:s srt output_subtitles.srt
The MKV extraction command is particularly useful — MKV files often contain embedded subtitle tracks that you need to extract before processing separately.
Subtitle Edit is the most capable free subtitle editing application on Windows. It supports over 200 subtitle formats, includes spell-checking and synchronization tools, and can batch convert entire folders.
If subtitles are consistently ahead or behind by a fixed amount (say, 1.5 seconds off throughout the entire file), FFmpeg can apply a global timing offset:
# Shift all subtitles 1.5 seconds later
ffmpeg -itsoffset 1.5 -i subtitles.srt -c copy output.srt
# Shift all subtitles 0.8 seconds earlier (use negative value)
ffmpeg -itsoffset -0.8 -i subtitles.srt -c copy output.srt
For new content, automatic speech recognition is often faster than manual subtitle creation:
OpenAI Whisper produces high-quality subtitles in SRT format:
pip install openai-whisper
whisper video.mp4 --output_format srt --language en
Whisper runs locally, handles multiple languages, and produces SRT files with accurate timing. For 10 minutes of clear speech, processing takes 1–5 minutes depending on your hardware.
YouTube, Vimeo, and TikTok also auto-generate captions — download and edit these rather than starting from scratch.
Pro Tip: If you are generating subtitles for accessibility compliance (WCAG 2.1 AA), captions must include non-speech audio descriptions like [applause], [music plays], and speaker identification. Most auto-generated subtitles only capture speech — review and add these manually.
In many countries, video captions are legally required for certain content:
Closed captions (CC) are different from subtitles: captions include audio descriptions for deaf and hard-of-hearing viewers, while subtitles assume the viewer can hear but does not understand the language. Use kind="captions" (not kind="subtitles") in your HTML5 <track> element for accessibility compliance.
SRT. YouTube accepts it natively, it is simple to create and edit with any text editor, and it avoids any format-specific upload issues. VTT also works on YouTube, but offers no advantage over SRT for this platform.
YouTube strips most subtitle styling and renders everything in its own default caption appearance. Users can customize caption appearance themselves in YouTube's caption settings. If you need precise styling control over how captions appear, you must burn the subtitles into the video itself (hardcoded subtitles) rather than using a separate subtitle track.
FFmpeg's subtitles filter hardcodes an SRT file into the video:
ffmpeg -i video.mp4 -vf "subtitles=subtitles.srt" -c:a copy output_burned.mp4
For ASS styling during burn-in, use the ass filter instead:
ffmpeg -i video.mp4 -vf "ass=subtitles.ass" -c:a copy output_burned.mp4
Burned subtitles cannot be toggled off by viewers. Use soft subtitles (separate track) wherever possible.
MKV containers can hold multiple subtitle tracks. Use FFmpeg to add a subtitle track without re-encoding the video:
ffmpeg -i video.mkv -i subtitles.srt -c copy -c:s srt -metadata:s:s:0 language=eng output.mkv
The -c copy copies video and audio without re-encoding; -c:s srt copies the subtitle stream as SRT. The resulting MKV contains both the original video/audio and the new subtitle track.
.srt and .sub files?.sub can refer to two different formats: MicroDVD (.sub paired with .idx index file) and SubRip's obsolete binary format. MicroDVD files use frame numbers instead of timestamps, which means they are not directly compatible with SRT tools without knowing the video's frame rate. If you have a .sub/.idx pair, use VLC or FFmpeg to convert to SRT first.
For most practical purposes, SRT handles all online platform uploads, VTT handles HTML5 web embedding, and ASS handles desktop playback requiring advanced styling. Convert ASS/SSA/SBV files to SRT before uploading anywhere that expects standard captions.
For videos destined for major streaming platforms like Netflix or Amazon, TTML to their specific delivery profile is required — check the platform's partner delivery guide for exact specifications.
ConvertIntoMP4's video converter and MP4 converter support MKV and other container formats that commonly contain subtitle tracks. For converting between video formats while preserving embedded subtitle streams, use the -c:s copy flag in FFmpeg to carry subtitle tracks through without re-encoding.
ConvertIntoMP4 Team
The ConvertIntoMP4 editorial team — engineers, designers, and media specialists building the fastest free file converter on the web.