IntlPull
Comparison
12 min read

SRT vs VTT vs SBV vs ASS: Complete Subtitle Format Comparison 2026

Technical comparison of SRT, WebVTT, SBV, and ASS subtitle formats. Learn the differences, when to use each, and how to convert between them.

IntlPull Team
IntlPull Team
Feb 12, 2026
On this page
Summary

Technical comparison of SRT, WebVTT, SBV, and ASS subtitle formats. Learn the differences, when to use each, and how to convert between them.

SRT vs VTT vs SBV vs ASS: Complete Subtitle Format Comparison 2026

Choosing the right subtitle format can make the difference between seamless playback and broken rendering, professional styling and plain text, universal compatibility and platform lock-in. Whether you're building a video platform, managing a YouTube channel, or distributing content to streaming services, understanding subtitle format differences is crucial.

This comprehensive guide compares the four major subtitle formats—SRT, WebVTT, SBV, and ASS—covering their technical specifications, use cases, compatibility, and practical conversion strategies. By the end, you'll know exactly which format to use for your project.

Why Subtitle Format Choice Matters

Subtitle formats aren't just containers for text and timecodes—they determine:

  • Playback compatibility: Some formats only work on specific platforms
  • Styling capabilities: From plain text to pixel-perfect positioning
  • File size: Impacts loading speed and storage costs
  • Editing complexity: Affects workflow efficiency
  • Accessibility compliance: Legal requirements in many regions

Let's dive into each format.


The Four Major Subtitle Formats

1. SRT (SubRip Subtitle) — The Universal Standard

Created: 2000 Extension: .srt Mime Type: text/plain or application/x-subrip

Format Structure

SRT
11
200:00:01,500 --> 00:00:04,200
3Welcome to subtitle format comparison.
4
52
600:00:04,300 --> 00:00:07,800
7SRT is the most widely supported format.
8
93
1000:00:08,000 --> 00:00:11,500
11It uses comma separators for milliseconds.

Key Characteristics

  • Timecode format: HH:MM:SS,mmm --> HH:MM:SS,mmm (comma separator)
  • Styling: Basic HTML tags (<i>, <b>, <u>) only
  • Positioning: None
  • Metadata: None
  • Encoding: UTF-8 recommended (but often breaks with legacy encodings)

Pros

Universal compatibility: Works on 99% of video players ✅ Simple structure: Easy to parse and edit manually ✅ Small file size: Plain text, minimal overhead ✅ Human-readable: Can be edited in any text editor ✅ YouTube/Vimeo native support: Upload directly without conversion

Cons

No advanced styling: Can't control font, color, or position ❌ No metadata: No language tags, captions vs subtitles distinction ❌ Encoding issues: UTF-8 not enforced, leads to broken characters ❌ Limited accessibility: No semantic tags for sound effects vs dialogue

When to Use SRT

  • Video hosting platforms: YouTube, Vimeo, Wistia default format
  • Maximum compatibility: Distributing to unknown players
  • Simple content: No styling needs beyond basic italics/bold
  • Translation workflows: Easiest format for translators to work with

2. WebVTT (Web Video Text Tracks) — The Web Standard

Created: 2010 (W3C Standard) Extension: .vtt Mime Type: text/vtt

Format Structure

VTT
1WEBVTT
2
3NOTE This is a WebVTT file with styling
4
5STYLE
6::cue {
7  background-color: rgba(0,0,0,0.8);
8  color: white;
9  font-family: sans-serif;
10}
11
1200:00:01.500 --> 00:00:04.200
13Welcome to WebVTT format.
14
1500:00:04.300 --> 00:00:07.800
16<v Speaker1>WebVTT supports voice tags.
17
1800:00:08.000 --> 00:00:11.500 align:start position:10%
19It uses periods for milliseconds.

Key Characteristics

  • Timecode format: HH:MM:SS.mmm --> HH:MM:SS.mmm (period separator)
  • Header required: Must start with WEBVTT
  • Styling: Full CSS via STYLE blocks and inline cue settings
  • Positioning: Precise control with align:, position:, line:, size:
  • Metadata: NOTE blocks, KIND attribute (captions vs subtitles)
  • Voice tags: <v Name>Text</v> for speaker identification

Pros

W3C standard: Native HTML5 <track> element support ✅ Advanced styling: Full CSS control over appearance ✅ Semantic metadata: Distinguish captions, subtitles, descriptions ✅ Positioning: Pixel-perfect placement for on-screen text ✅ Accessibility: Best support for screen readers and accessibility features

Cons

Not universal: Older video players don't support it ❌ More complex: Requires understanding of cue settings ❌ Larger file size: Styling blocks add overhead ❌ YouTube conversion: YouTube converts VTT to SRT internally

When to Use WebVTT

  • HTML5 video players: Modern web applications
  • Accessibility compliance: Legal requirements (ADA, WCAG 2.1)
  • Custom styling: Brand-specific subtitle appearance
  • Multiple tracks: Captions, subtitles, audio descriptions in one file
  • Live streaming: HLS and DASH protocols use VTT

3. SBV (SubViewer) — The YouTube Format

Created: 2005 (adopted by YouTube 2010) Extension: .sbv Mime Type: text/plain

Format Structure

SBV
10:00:01.500,0:00:04.200
2Welcome to SBV format.
3
40:00:04.300,0:00:07.800
5This is YouTube's preferred format.
6
70:00:08.000,0:00:11.500
8Notice the single-line timecode format.

Key Characteristics

  • Timecode format: H:MM:SS.mmm,H:MM:SS.mmm (no leading zeros on hours)
  • No sequence numbers: Just timecode and text
  • Single line timecodes: Start and end on one line separated by comma
  • No styling: Not even basic HTML tags
  • Minimal structure: Blank lines separate subtitle blocks

Pros

YouTube native: Fastest upload/processing on YouTube ✅ Simplest format: Even easier than SRT to parse ✅ Small file size: Minimal overhead ✅ No numbering errors: Can't mess up sequence numbers

Cons

YouTube only: Limited platform support ❌ No styling: Not even italics or bold ❌ No metadata: Can't specify language or type ❌ Hours ambiguity: Leading zero optional (inconsistent parsing)

When to Use SBV

  • YouTube content: If you're exclusively uploading to YouTube
  • Auto-generated subtitles: YouTube's API returns SBV format
  • Maximum simplicity: When you want the least complexity

4. ASS/SSA (Advanced SubStation Alpha) — The Anime Standard

Created: 1998 (SSA), 2001 (ASS advanced version) Extension: .ass or .ssa Mime Type: text/x-ass

Format Structure

ASS
1[Script Info]
2Title: My Anime Subtitles
3ScriptType: v4.00+
4Collisions: Normal
5PlayDepth: 0
6
7[V4+ Styles]
8Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
9Style: Default,Arial,20,&H00FFFFFF,&H000088EF,&H00000000,&H80000000,-1,0,0,0,100,100,0,0,1,2,0,2,10,10,10,1
10
11[Events]
12Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
13Dialogue: 0,0:00:01.50,0:00:04.20,Default,,0,0,0,,Welcome to ASS format!
14Dialogue: 0,0:00:04.30,0:00:07.80,Default,,0,0,0,,{\c&H00FFFF&}This text is cyan!
15Dialogue: 0,0:00:08.00,0:00:11.50,Default,,0,0,0,,{\pos(640,500)}Positioned exactly at these coordinates.

Key Characteristics

  • Timecode format: H:MM:SS.cc (centiseconds, not milliseconds!)
  • Style definitions: Comprehensive styling system with named styles
  • Override tags: Inline {\tag} for per-word styling
  • Positioning: Pixel-perfect \pos(x,y), \move(x1,y1,x2,y2)
  • Effects: Karaoke timing (\k), animations, rotations
  • Layers: Multiple subtitle layers for overlays

Pros

Maximum control: Pixel-perfect styling and positioning ✅ Animation support: Movement, fades, karaoke effects ✅ Professional quality: Used in broadcast anime and fansubs ✅ Complex formatting: Multiple fonts/colors in one subtitle ✅ Reusable styles: Define once, apply to all subtitles

Cons

Complexity: Steep learning tool, not hand-editable ❌ Limited compatibility: Mainly VLC, MPC-HC, mpv, Plex ❌ Large file size: Style definitions add significant overhead ❌ Web incompatible: No browser support, requires conversion ❌ Overkill: 99% of use cases don't need this power

When to Use ASS

  • Anime fansubs: Industry standard for fan translations
  • Karaoke videos: Timing effects for sing-alongs
  • Professional production: Broadcast-quality styling requirements
  • Artistic subtitles: Creative positioning and effects
  • Video overlay graphics: Signs, on-screen text translation

Format Comparison Table

FeatureSRTWebVTTSBVASS
Timecode separatorComma (,)Period (.)Period (.)Period (.)
Timecode precisionMillisecondsMillisecondsMillisecondsCentiseconds
Hour formatAlways 2 digitsAlways 2 digitsVariableVariable
Sequence numbersRequiredOptionalNoneNone
Basic stylingHTML tagsHTML + CSSNoneFull control
PositioningNoneCue settingsNonePixel-perfect
MetadataNoneNOTE blocksNoneScript Info
Voice tagsManual (dashes)<v> tagsNoneName field
File size (1000 lines)~50 KB~80 KB~45 KB~150 KB
Hand-editable✅ Easy⚠️ Moderate✅ Easy❌ Difficult
YouTube support✅ Yes✅ Converted✅ Native❌ No
Vimeo support✅ Yes✅ Yes❌ No❌ No
HTML5 <track>⚠️ Limited✅ Full❌ No❌ No
VLC player✅ Yes✅ Yes✅ Yes✅ Yes
Accessibility⚠️ Basic✅ Excellent❌ Poor⚠️ Moderate
Browser support⚠️ Via parsing✅ Native❌ No❌ No
Learning curveEasyModerateEasyDifficult
Best forUniversalWeb/A11yYouTubeAnime/Pro

Deep Dive: Timecode Format Differences

This is the #1 source of conversion errors. Let's break it down:

SRT Timecode Format

00:00:01,500 --> 00:00:04,200
HH:MM:SS,mmm --> HH:MM:SS,mmm
^^        ^                  ^
Always 2  Comma              Arrow with spaces
digits    separator

WebVTT Timecode Format

00:00:01.500 --> 00:00:04.200
HH:MM:SS.mmm --> HH:MM:SS.mmm
^^        ^                  ^
Always 2  Period             Arrow with spaces
digits    separator

SBV Timecode Format

0:00:01.500,0:00:04.200
H:MM:SS.mmm,H:MM:SS.mmm
^        ^             ^
Variable Period        Comma separator
hours    separator     (NO arrow)

ASS Timecode Format

0:00:01.50,0:00:04.20
H:MM:SS.cc,H:MM:SS.cc
^        ^           ^
Variable Period      Centiseconds
hours    separator   (NOT milliseconds!)

Critical conversion note: ASS uses centiseconds (1/100 second), not milliseconds (1/1000 second). When converting from SRT/VTT/SBV to ASS, you must divide milliseconds by 10:

SRT: 00:00:01,500 (1 second + 500 milliseconds)
ASS: 0:00:01.50   (1 second + 50 centiseconds)

Styling Capabilities Comparison

SRT: Basic HTML Tags Only

SRT
1
00:00:01,000 --> 00:00:03,000
<i>Italics</i> and <b>bold</b> and <u>underline</u>

Supported tags: <i>, <b>, <u>, <font color="..."> (player-dependent)

No support for: Font family, size, position, background color

WebVTT: Full CSS Control

VTT
1STYLE
2::cue {
3  font-family: 'Arial', sans-serif;
4  font-size: 18px;
5  color: white;
6  background-color: rgba(0,0,0,0.8);
7  text-shadow: 2px 2px 4px #000;
8}
9
10::cue(b) {
11  color: #FFD700;
12  font-weight: bold;
13}
14
1500:00:01.000 --> 00:00:03.000 align:center position:50% line:90%
16This subtitle is <b>styled with CSS</b>!

Positioning attributes:

  • align:start|center|end - Horizontal alignment
  • position:X% - Horizontal position (0-100%)
  • line:X% - Vertical position (0-100%)
  • size:X% - Width of subtitle box

ASS: Pixel-Perfect Control

ASS
Dialogue: 0,0:00:01.00,0:00:03.00,Default,,0,0,0,,{\c&H00FFFF&\fs24\b1}Cyan 24pt bold text
Dialogue: 0,0:00:03.00,0:00:05.00,Default,,0,0,0,,{\pos(640,500)}Positioned at x=640, y=500
Dialogue: 0,0:00:05.00,0:00:07.00,Default,,0,0,0,,{\move(100,500,1820,500,0,2000)}Scrolling text!

Override tags (partial list):

  • \c&HBBGGRR& - Primary color (hex, BGR format!)
  • \fs## - Font size
  • \b1 / \b0 - Bold on/off
  • \i1 / \i0 - Italic on/off
  • \pos(x,y) - Absolute position
  • \move(x1,y1,x2,y2) - Animated movement
  • \fad(in,out) - Fade in/out (milliseconds)
  • \t(start,end,\tag) - Transform over time

Platform Compatibility Matrix

PlatformSRTWebVTTSBVASS
YouTube✅ Native✅ Converted✅ Native❌ Not supported
Vimeo✅ Native✅ Native❌ Convert❌ Not supported
Wistia✅ Native✅ Native❌ Convert❌ Not supported
Facebook✅ Yes (as SRT)❌ Convert❌ Convert❌ Not supported
HTML5 <video>⚠️ Polyfill✅ Native❌ Polyfill❌ Not supported
VLC Player✅ Full support✅ Full support✅ Full support✅ Full support
MPC-HC✅ Full support✅ Full support✅ Full support✅ Full support
Plex✅ Full support✅ Full support⚠️ Limited✅ Full support
Kodi✅ Full support✅ Full support✅ Full support✅ Full support
Apple TV✅ Full support✅ Full support❌ Convert❌ Not supported
Android TV✅ Full support✅ Full support⚠️ Limited⚠️ Limited
Roku✅ Full support✅ Full support❌ Convert❌ Not supported
AWS MediaConvert✅ Input/Output✅ Output❌ Convert❌ Not supported
FFmpeg✅ Full support✅ Full support✅ Full support✅ Full support

Legend:

  • ✅ Native support, no conversion needed
  • ⚠️ Limited support, may lose features
  • ❌ Not supported, must convert first

When to Use Each Format: Decision Tree

START: What's your use case?
│
├─ Uploading to YouTube?
│  ├─ Only YouTube? → SBV
│  └─ Multi-platform? → SRT
│
├─ Building a web application?
│  ├─ Need accessibility compliance? → WebVTT
│  ├─ Need custom styling? → WebVTT
│  └─ Basic playback only? → SRT
│
├─ Anime fansubbing or karaoke?
│  └─ → ASS
│
├─ Maximum compatibility (unknown players)?
│  └─ → SRT
│
├─ Professional broadcast?
│  ├─ Web delivery? → WebVTT
│  ├─ Styled delivery? → ASS
│  └─ Universal delivery? → SRT
│
└─ Translation workflow?
   └─ → SRT (easiest for translators)

How to Convert Between Formats

Method 1: Online Converter (IntlPull)

Use IntlPull's free subtitle converter:

  1. Upload your subtitle file (any format)
  2. Select target format
  3. Download converted file

What gets preserved:

  • Timecodes (automatically adjusted for format differences)
  • Text content
  • Basic styling (if target format supports it)

What gets lost:

  • Advanced styling when converting to simpler formats (ASS → SRT loses colors/positioning)
  • Metadata (notes, script info)

Method 2: Command-Line (FFmpeg)

FFmpeg supports all four formats:

Terminal
1# SRT to WebVTT
2ffmpeg -i input.srt output.vtt
3
4# WebVTT to SRT
5ffmpeg -i input.vtt output.srt
6
7# SRT to ASS (with default styling)
8ffmpeg -i input.srt output.ass
9
10# ASS to SRT (loses all styling)
11ffmpeg -i input.ass output.srt
12
13# SBV to SRT
14ffmpeg -i input.sbv output.srt

Pro tip: When converting from ASS to SRT/VTT, FFmpeg strips all styling. To preserve some formatting, manually adjust before conversion.

Method 3: Programmatic (Python Example)

Python
1import pysubs2
2
3# Load subtitle file (auto-detects format)
4subs = pysubs2.load("input.srt")
5
6# Modify if needed
7for line in subs:
8    line.text = line.text.upper()  # Example: uppercase all text
9
10# Save as different format
11subs.save("output.vtt")  # Saves as WebVTT
12subs.save("output.ass")  # Saves as ASS
13subs.save("output.sbv")  # Saves as SBV

Library supports: SRT, WebVTT, ASS/SSA, MicroDVD, MPL2, TMP, Sub


Real-World Format Selection Examples

Example 1: YouTube Educational Channel

Scenario: Tutorial videos in English, expanding to Spanish and French

Recommendation: SRT

Why:

  • YouTube native support
  • Easy for translators to work with
  • No styling needs (YouTube's player handles display)
  • Maximum compatibility if you later embed videos elsewhere

Example 2: SaaS Product Demo on Website

Scenario: Marketing video with branded styling on landing page

Recommendation: WebVTT

Why:

  • HTML5 <track> native support
  • Custom CSS for brand colors and fonts
  • Accessibility compliance for WCAG 2.1
  • Can position subtitles below UI elements

Example 3: Anime Fansub Community

Scenario: Translating and styling anime with creative typography

Recommendation: ASS

Why:

  • Industry standard for fansubs
  • Pixel-perfect positioning for on-screen sign translation
  • Color coding for different speakers
  • Karaoke timing for opening/ending songs

Example 4: Corporate Training Platform

Scenario: Internal videos with multiple language tracks

Recommendation: SRT for production, WebVTT for web player

Why:

  • Translators work with SRT (easiest format)
  • Convert to WebVTT for web player deployment
  • SRT source files for archival and future platform changes

File Encoding: The Hidden Compatibility Killer

All formats support Unicode, but encoding errors are the #1 cause of broken subtitles:

Common Issues

Problem: Characters display as "é" instead of "é" Cause: File saved as ISO-8859-1 but read as UTF-8

Problem: Chinese/Japanese characters show as "??????" Cause: File saved without BOM (Byte Order Mark) on Windows

Problem: Apostrophes show as "’" Cause: Smart quotes encoded in Windows-1252 but read as UTF-8

Solution: Always Use UTF-8

When creating or editing subtitle files:

Terminal
1# Check current encoding
2file -bi input.srt
3
4# Convert to UTF-8
5iconv -f ISO-8859-1 -t UTF-8 input.srt -o output.srt
6
7# Or use dos2unix for line ending conversion + UTF-8
8dos2unix -n input.srt output.srt

Text editor settings:

  • VS Code: Bottom-right encoding selector → "Save with Encoding" → UTF-8
  • Sublime Text: File → Save with Encoding → UTF-8
  • Notepad++: Encoding → Convert to UTF-8

Web uploads: Most platforms (YouTube, Vimeo) auto-detect encoding, but you'll avoid issues by standardizing on UTF-8 from the start.


Subtitle Format Future: What's Coming?

TTML (Timed Text Markup Language)

W3C standard used in broadcast and streaming (Netflix, Amazon Prime). XML-based, more complex than WebVTT but with similar capabilities.

Status: Used by enterprises, not casual creators.

IMSC (TTML Profile for Internet Media Subtitles)

Simplified TTML profile gaining traction in OTT streaming.

Status: Emerging standard, limited tooling.

WebVTT v2

Proposed additions to WebVTT standard:

  • Region styling (non-rectangular subtitle areas)
  • Animation improvements
  • Better accessibility metadata

Status: In draft, may arrive 2027-2028.


Frequently Asked Questions

Can I use SRT on my website?

Technically yes, but you'll need JavaScript to parse and render it (HTML5 <track> expects WebVTT). Better to convert SRT → WebVTT.

Why does YouTube convert my WebVTT to SRT?

YouTube's internal processing uses SRT. They convert uploaded WebVTT files and strip advanced styling for consistency across devices.

Can I edit ASS files by hand?

Possible but painful. Use subtitle editing software like Aegisub (free, open-source, designed for ASS).

Do I need different subtitle files for mobile vs desktop?

No. Modern players adapt subtitle rendering to screen size. Just ensure your text length follows CPS (characters per second) guidelines.

What's the best format for Netflix/Disney+?

They use proprietary formats (TTML/IMSC). If you're delivering to them, they'll provide specifications and conversion tools.


Conclusion

For 90% of use cases: Start with SRT for maximum compatibility and translator-friendliness. Convert to WebVTT if you need web-native features or accessibility compliance. Only use ASS if you need professional styling or are working in the anime community. SBV is only worth using if you're exclusively on YouTube.

Quick reference:

  • Universal compatibility → SRT
  • Web applications → WebVTT
  • YouTube exclusive → SBV
  • Creative styling → ASS

Convert for free at IntlPull Subtitle Converter.


Related Tools:

For teams managing subtitle workflows at scale, explore IntlPull's TMS platform with translation memory, multi-format support, and automated conversions.

Tags
subtitles
srt
vtt
sbv
ass
subtitle-formats
comparison
2026
IntlPull Team
IntlPull Team
Engineering

Building tools to help teams ship products globally. Follow us for more insights on localization and i18n.