Both formats do the same job: pair lines of text with timecodes. You will hit the choice the moment any transcription tool offers you two download buttons.
The short answer: SRT for video editors and social platforms, VTT for the open web. When in doubt, SRT — it is accepted almost everywhere.
What they look like
SRT (SubRip) — numbered blocks, comma before milliseconds:
1
00:00:00,000 --> 00:00:03,520
Hello, this is a test.
2
00:00:03,520 --> 00:00:07,128
Paste a link and get the transcript.
VTT (WebVTT) — WEBVTT header, period before milliseconds, no numbering required:
WEBVTT
00:00:00.000 --> 00:00:03.520
Hello, this is a test.
00:00:03.520 --> 00:00:07.128
Paste a link and get the transcript.
That is genuinely most of the difference. A comma, a period, a header line, and optional cue numbers.
Where each one works
| Destination | SRT | VTT |
|---|---|---|
| Premiere Pro / Final Cut / DaVinci | ✅ | ⚠️ varies |
| CapCut | ✅ | ❌ |
| YouTube upload | ✅ | ✅ |
| Instagram / TikTok (via editor) | ✅ | ❌ |
HTML5 <track> element | ❌ | ✅ required |
| Vimeo | ✅ | ✅ |
| VLC and desktop players | ✅ | ✅ |
The one hard rule in this table: HTML5 video only accepts VTT. If you are putting subtitles on your own website, SRT will not load — the browser ignores it.
What VTT can do that SRT cannot
VTT is the newer format and carries extras that SRT has no syntax for:
- Positioning. Place a cue at the top of the frame to avoid covering a lower third.
- Styling. CSS-like rules, plus
<b>,<i>,<c.classname>inline. - Cue identifiers. Name a cue and target it from JavaScript.
- Chapters and metadata tracks, not just subtitles.
- Comments via
NOTE, which SRT cannot represent at all.
In practice, almost nobody uses these. The overwhelming majority of VTT files in the wild are SRT with a different punctuation style.
What SRT has going for it
Ubiquity, and nothing else. It is older, simpler, and every tool built in the last twenty years reads it. That is a real advantage when you are handing a file to someone whose workflow you do not control.
Converting between them by hand
If you have one and need the other, the conversion is mechanical:
SRT → VTT
- Add
WEBVTTand a blank line at the top - Replace
,with.in timecodes - Cue numbers can stay — VTT tolerates them
VTT → SRT
- Delete the
WEBVTTheader and anyNOTEblocks - Replace
.with,in timecodes - Add sequential numbers before each cue if the player is strict
- Strip any positioning or styling attributes after the timecode
Any transcription tool that exports both is doing exactly this internally — including ours, which produces both from the same timestamped output.
Things that break subtitles regardless of format
- Encoding. Save as UTF-8. Non-English characters turn into mojibake in anything else. UTF-8 with BOM occasionally confuses older players; without BOM is safer.
- Overlapping timecodes. A cue that starts before the previous one ends is invalid. Some players silently drop it, others refuse the whole file.
- Cues that are too long. Two lines, roughly 42 characters per line, is the readable ceiling. Longer cues get truncated or spill off-screen.
- Cues that are too short. Under about one second is unreadable no matter how few words it holds.
- Line breaks inside a cue. A single
\nsplits the line; a blank line ends the cue. Getting this wrong merges or truncates subtitles.
Which should you actually pick
Ask where the file is going:
- Into a video editor → SRT
- Onto your own website → VTT (nothing else works)
- To a client, destination unknown → SRT
- To YouTube → either
- You want styling or positioning → VTT, and check the player supports it before you invest effort
Common questions
Can one file hold two languages? No. Both formats are single-language. Multiple languages means multiple files, selected by the player.
Do timecodes need to start at zero? No, but they must be monotonically increasing. Files that start mid-timeline are valid and common when subtitling a clip from a longer piece.
What about ASS/SSA? Advanced SubStation Alpha handles karaoke effects, complex typography and animation. It is standard in anime fansubbing and almost nowhere else. If you do not already know you need it, you do not.
Why does my SRT show up blank in a browser? Because browsers do not read SRT. Convert it to VTT — see above.