Subtitle Formats Explained: SRT vs VTT vs ASS — When to Use Which
Subtitles should be simple. There's text, it appears at certain times, you read it. Done.
Except it's never that simple, is it? You download a subtitle file and it doesn't sync. Or the player can't read it. Or the formatting shows up as garbage characters. Or the subtitles appear but in the wrong place. Or—you get the idea.
Most of these problems come down to one thing: using the wrong subtitle format for your situation. Let's fix that.
The Three Formats You'll Actually Encounter
There are dozens of subtitle formats out there. Most are obsolete, proprietary, or so obscure you'll never see them. In practice, three formats dominate:
SRT (SubRip) — The universal standard. Simple, widely supported, works almost everywhere.
VTT (WebVTT) — The web-native version. Designed for HTML5 video.
ASS (Advanced SubStation Alpha) — The feature-rich option. Supports styling, positioning, and effects.
Let's dig into each one.
SRT: The Reliable Workhorse
SRT has been around since 1998. It's survived because it does one thing well: matching text to timestamps. Nothing fancy, just works.
What an SRT File Looks Like
1
00:00:05,000 --> 00:00:08,500
Hello, welcome to this video.
2
00:00:10,200 --> 00:00:14,800
Today we're going to talk about
something interesting.
3
00:00:16,000 --> 00:00:19,000
Let's get started.
That's it. Sequential numbers, timestamps with millisecond precision, and the text itself. Human-readable, easy to edit in any text editor.
Why SRT Works
Universal compatibility. Every media player—VLC, MX Player, Windows Media Player, IINA, Plex, you name it—supports SRT. Every operating system handles it. Every streaming platform accepts SRT uploads.
Simplicity. No complex syntax to mess up. If your subtitles aren't working, you can open the file in Notepad and see exactly what's wrong.
Easy to create and edit. You don't need special software. Any text editor works. This matters when you're fixing sync issues at 2 AM.
SRT Limitations
No styling. Text is text. You can't specify fonts, colors, sizes, or positions. The player decides how subtitles look.
No metadata. Can't specify language, author, or other information within the file itself.
Basic positioning only. Subtitles appear centered at the bottom. That's it. If dialogue overlaps with on-screen text, you're out of luck.
When to Use SRT
Use SRT when:
- You need maximum compatibility
- You're uploading to YouTube, Vimeo, or other platforms
- You're distributing content and have no control over the player
- Simplicity matters more than aesthetics
Don't use SRT when:
- You need specific styling or positioning
- You're doing anything karaoke-style with timing per syllable
- You're working with multiple speakers who need color-coding
VTT: The Web Standard
WebVTT (Web Video Text Tracks) was created by the W3C specifically for HTML5 video. It's essentially SRT with web-friendly features added.
What a VTT File Looks Like
WEBVTT
00:00:05.000 --> 00:00:08.500
Hello, welcome to this video.
00:00:10.200 --> 00:00:14.800
Today we're going to talk about
something interesting.
00:00:16.000 --> 00:00:19.000
Let's get started.
Notice the differences: WEBVTT header at the top, periods instead of commas in timestamps, and optional cue numbers.
Why VTT Exists
VTT was designed to solve web-specific problems:
Native HTML5 support. The <track> element in HTML5 video expects VTT format. Browsers understand it natively without any JavaScript parsing.
Basic styling. VTT supports some inline formatting: <b>bold</b>, <i>italic</i>, <u>underline</u>. More importantly, you can define CSS styling for cues.
Positioning. You can control where subtitles appear:
00:00:05.000 --> 00:00:08.500 line:0 position:90%
[Speaker in top-right corner]
Metadata support. VTT can include notes, comments, and chapter markers—not just subtitles.
VTT Limitations
Less universal than SRT. Some older media players don't support VTT. Desktop applications tend to prefer SRT.
Styling limitations. While VTT supports more styling than SRT, it's nowhere near as powerful as ASS. Complex effects aren't possible.
Browser inconsistencies. Different browsers render VTT styling slightly differently. Test across browsers if styling matters.
When to Use VTT
Use VTT when:
- You're embedding video in a webpage
- You need multiple track types (subtitles, captions, descriptions)
- You want basic styling that CSS can control
- Accessibility features matter (screen readers understand VTT)
Don't use VTT when:
- Your audience primarily uses desktop media players
- You need guaranteed consistent styling across all players
- Complex visual effects are required
ASS: The Power User's Choice
ASS (Advanced SubStation Alpha) is the format anime fansubbers love. It's overkill for most purposes—but when you need its capabilities, nothing else comes close.
What an ASS File Looks Like
[Script Info]
Title: Example Subtitle
ScriptType: v4.00+
Collisions: Normal
PlayDepth: 0
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:05.00,0:00:08.50,Default,,0,0,0,,Hello, welcome to this video.
Yeah. It's complicated. That's the price of flexibility.
Why ASS Exists
ASS was designed for scenarios where presentation matters as much as content:
Complete style control. Fonts, colors, sizes, outlines, shadows, transparency—you control everything.
Precise positioning. Place text anywhere on screen. Move it during playback. Stack multiple layers.
Animation and effects. Fade in/out, move across screen, rotate, scale, color transitions. Some ASS subtitles are essentially motion graphics.
Multiple styles per file. Different characters can have different colored subtitles. Signs can use different fonts than dialogue.
ASS Limitations
Limited player support. Many players render ASS with degraded or ignored styling. Some don't support it at all.
Complexity. The format is difficult to edit by hand. You need specialized software like Aegisub.
File size. ASS files are larger than SRT/VTT equivalents, sometimes significantly so for styled content.
Browser support is poor. Web-based players typically can't render ASS properly. Styling gets stripped or mangled.
When to Use ASS
Use ASS when:
- Styling is essential to the viewing experience (foreign text overlays, for example)
- You're distributing files specifically for desktop playback
- You need character-specific visual differentiation
- The content will be played in VLC, mpv, or other ASS-capable players
Don't use ASS when:
- You need web compatibility
- Universal playback is priority
- Simple text display is sufficient
Common Problems and Solutions
"Subtitles Aren't Showing"
Check the filename. Most players auto-detect subtitles when the subtitle file has the exact same name as the video file (minus extension). movie.mp4 should pair with movie.srt.
Check the encoding. SRT files should typically be UTF-8. Some players struggle with other encodings, especially for non-Latin characters.
Check the format. If you're playing in a browser and the player only supports VTT, an SRT file won't work. Convert it.
"Subtitles Are Out of Sync"
This is almost always a timing issue in the subtitle file itself. The subtitles were created for a different version of the video—different frame rate, different starting point, or edited cuts.
Quick fixes:
- Most players let you adjust subtitle timing on the fly (VLC: J/H keys)
- Use a tool like Subtitle Edit to permanently adjust timestamps
- Search for subtitles that match your specific video release
Prevention: When downloading subtitles, match them to your exact video source/release.
"Weird Characters Instead of Text"
Character encoding issue. The file is probably in a legacy encoding (like Windows-1252 or ISO-8859-1) but the player expects UTF-8.
Fix: Open the file in a text editor, re-save as UTF-8. Or use VLC's subtitle encoding options.
"Styling Isn't Working"
If using SRT: SRT doesn't support styling. What you see is what you get.
If using VTT: Check that your player/browser actually renders VTT styling. Many don't fully implement the spec.
If using ASS: Make sure your player supports ASS styling. VLC does. Many others don't, or only partially.
Converting Between Formats
Format conversion is usually straightforward:
SRT ↔ VTT: These formats are nearly identical. The main differences are the header and timestamp formatting. Many online tools convert instantly.
SRT/VTT → ASS: Easy conversion, but you lose nothing because the original had no styling.
ASS → SRT/VTT: The text converts, but you lose all styling, positioning, and effects. Only do this if you absolutely need the simpler format.
Tools:
- Subtitle Edit (desktop, free, does everything)
- Online converters work for basic SRT ↔ VTT
- FFmpeg can extract and convert embedded subtitles
The Practical Bottom Line
For most people: Use SRT. It works everywhere, it's easy to edit, and styling usually doesn't matter that much.
For web developers: Use VTT. It's what the <track> element expects and enables accessibility features.
For styled foreign content: Use ASS, but know your audience needs compatible players.
The best subtitle format is the one that actually displays correctly on your target platform. Start with SRT unless you have a specific reason not to—you probably won't need anything fancier.