Subtitles Are More Format-Dependent Than You'd Expect
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 Comparison at a Glance
| 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 |
SRT — The Universal Fallback
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.
SRT File Structure
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:
- A sequence number
- A timestamp line:
HH:MM:SS,mmm --> HH:MM:SS,mmm(note: comma as millisecond separator, not period) - The subtitle text (one or more lines)
- A blank line to separate entries
SRT Styling
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.
SRT Platform Support
| 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.
VTT — The Web Standard
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.
VTT File Structure
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:
- Starts with a
WEBVTTheader line - Uses periods as millisecond separators (not commas)
- No mandatory sequence numbers
- Supports cue identifiers (optional names for individual cues)
VTT Styling and Positioning
VTT 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.
Using VTT With HTML5 Video
<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.
ASS/SSA — The Feature-Rich Desktop Format
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:
- Custom fonts and font sizes per subtitle entry
- Precise RGB color control with opacity
- Outline and shadow effects
- Exact pixel-level positioning
- Karaoke highlighting (syllable-by-syllable highlighting synchronized with audio)
- Drawing commands for custom shapes and lines
- Soft and hard line breaks with separate timing
ASS File Structure
[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.
When to Use ASS
ASS is appropriate for:
- Anime and fansubs where styled subtitles are conventional
- Karaoke lyrics with syllable highlighting
- Videos requiring subtitles positioned at non-standard locations (top of screen, multiple speakers simultaneously)
- Post-production workflows using Aegisub for subtitle creation and editing
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.
SBV — YouTube's Legacy Format
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.
TTML — Broadcast and Streaming Standards
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 Format Requirements
| 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 |
Converting Between Subtitle Formats
FFmpeg Subtitle Conversion
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.
Using Subtitle Edit (Free Software)
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.
Fixing Timing Drift
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
Creating Subtitles Automatically
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.
Accessibility and Legal Requirements
In many countries, video captions are legally required for certain content:
- US ADA / Section 508: Requires captions for public-facing video content from covered organizations
- EU Accessibility Directive: Applies to public sector websites and apps
- UK PSBAR: Public Sector Bodies Accessibility Regulations
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.
Frequently Asked Questions
Which subtitle format should I use for YouTube?
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.
Can I add styled subtitles (custom fonts, colors) to a YouTube video?
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.
How do I burn subtitles into a video?
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.
How do I add subtitles to an MKV file without re-encoding?
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.
What's the difference between .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.
Summary
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.



