SUBTITLES / 8 MIN READ
SRT vs VTT: the file is decided by whatever opens it next.
Both formats carry the same captions with the same timing. What separates them is the program on the other end — a video editor, a browser, or a person reading. Pick for that, not for the extension.
A subtitle file is a schedule: every cue says when a line appears, when it disappears, and what the viewer reads. SRT and VTT both carry that schedule, so either one preserves the timing of the track it came from. The differences show up the moment another program tries to read the file.
The short answer
- Going into a video editor, or uploading captions back to a platform? SRT — it is the format editing software and upload dialogs expect by default.
- Playing inside a web page or a browser-based player? VTT — the HTML5
<track>element reads it natively. - Only the words matter — notes, a search box, an AI prompt? Neither. Take TXT and stop paying for timing you will not use.
- A platform names a required format? Follow the platform. A general recommendation never outranks an explicit upload rule.
They solve the same problem
It helps to separate two things that get conflated: the track and the file. A track is what YouTube stores — the words plus their timings. A file is one serialisation of that track. SRT and VTT are two serialisations of the same data, which is why converting between them never changes the words or the timing.
What changes is how much structure the file can carry. SRT is deliberately plain: a counter, a time range, a line of text. VTT keeps that and adds a place to put web-specific instructions — where a cue sits on screen, how it is aligned, who is speaking, which CSS class it belongs to.
The same caption, written twice
One cue, identical words and identical timing, in both formats.
1 00:00:02,500 --> 00:00:05,000 Choose the format that matches your next step. 2 00:00:05,200 --> 00:00:08,000 The words do not change. The wrapper does.
WEBVTT 00:00:02.500 --> 00:00:05.000 Choose the format that matches your next step. 00:00:05.200 --> 00:00:08.000 The words do not change. The wrapper does.
Three differences are visible in those four lines, and they are the ones that actually break files:
- The separator — SRT writes milliseconds after a comma (
00:00:02,500); VTT writes them after a period (00:00:02.500). This is the single most common reason a renamed file fails. - The header — A VTT file must begin with the literal line
WEBVTT. An SRT file begins with a cue number. Swap the extensions without swapping the insides and a strict parser rejects the whole file. - The counter — SRT numbers every cue and expects the numbers to be sequential. In VTT the identifier is optional — the blank line and the arrow are what delimit a cue.
The differences that change your choice
| SRT | VTT | |
|---|---|---|
| First line of the file | Cue number 1 | WEBVTT |
| Milliseconds | Comma — 00:00:02,500 | Period — 00:00:02.500 |
| Cue numbering | Sequential, expected by most parsers | Optional identifier |
| On-screen position | Not part of the format | Cue settings: line, position, align, size |
| Styling | A few inline tags, applied differently by each app | CSS classes, plus a STYLE block |
| Speaker labels | No standard field | Built in — <v Name> |
| Native browser support | Needs conversion first | What <track> reads |
| Safe default for | Editors, upload forms, hand editing | Web players, browser captions |
When a platform publishes its own upload rules, those rules override this table. It describes defaults, not guarantees.
Choose SRT when a program has to import it
SRT has been the interchange format for long enough that support is assumed rather than checked. That is its real advantage: not features, but the absence of surprises. Desktop editors, captioning tools, upload dialogs and hand-editing in a text editor all treat it as the baseline case.
It is also the easier format to inspect. Open an SRT in any text editor and the structure is obvious in a way that a file carrying style blocks and cue settings is not — which matters when you are checking a single line against the video before quoting it.
The file goes into Premiere, Final Cut, DaVinci Resolve or a similar editor. A client or upload form asks for .srt by name. You want a timed file a person can read and fix by hand. You have no use for on-screen positioning.
Choose VTT when a browser plays the captions
VTT was designed for the web, and the clearest proof is that the browser's own caption pipeline reads it and nothing else. If you are shipping a <video> element with a <track kind="captions">, the file has to be VTT — no plugin, no conversion step, no player-specific handling.
The extras are the reason to stay in VTT once you are there. A cue can carry its own placement and alignment instead of being pushed around by CSS on the container; <v Speaker> marks who is talking without inventing a convention in the text line; a STYLE block keeps presentation next to the cues it affects.
The video is embedded in a page you control. The player is browser-based and takes a caption track URL. You need cues positioned away from the controls, or two speakers distinguished on screen. A platform asks for WebVTT by name.
Choose TXT when the timing is not the point
There is a third case that gets forced into this comparison and does not belong in it: you do not want a subtitle file at all, you want the words. Pasting a transcript into notes, a document, a spreadsheet or an AI prompt is not a captioning job, and a timed file only adds syntax you have to strip.
Plain text drops the timing entirely: one line per cue, a blank line between them, no cue numbers, no arrows, no header. That is the version you actually want in notes, in a document or in an AI prompt. And because the same track still produces SRT or VTT on demand, nothing is lost by starting with the text — the only thing you give up is the way back to a moment in the video.
Three ways a subtitle file breaks
- Renaming the fileChanging
.vttto.srtchanges the name and nothing else. The timestamps inside still use the wrong separator and the header is still there (or still missing), so a strict parser rejects the file or drops every cue — and the symptom is usually "the subtitles just do not appear", with no error.What to do: Convert the contents, not the extension. Re-export from the source track, or run a real converter, then open the result and check the first two cues. - Losing the WEBVTT lineCopying cues out of a VTT and saving them as a new file is a common way to lose the header. Without
WEBVTTon the first line, browsers treat the file as invalid and show nothing, even though every cue below it is perfectly formed.What to do: The first line of a VTT isWEBVTT— always. If you hand-built the file, add it back and retest in the player, not in a text editor. - Encoding and blank linesCue text with accents or non-Latin scripts needs UTF-8; a BOM at the start of the file is tolerated by some players and rejected by others. Cues are separated by a blank line, and a missing one merges two cues into a single unreadable block.What to do: Save as UTF-8 without a BOM, keep exactly one empty line between cues, and verify in the program that will actually play the file.
Getting either one from a YouTube video
The format question only becomes real once you have a track to write out. On the subtitle page, every track a video publishes is listed before you download — creator-uploaded and auto-generated are labelled separately, because that label tells you whether the wording was written or guessed.
SRT, VTT and TXT all come out of the same track, so switching format does not change the words or the timing. That also means the useful order is: check the track first, then decide the format — not the other way round.
Paste a public YouTube link, read the transcript with timestamps, then save SRT, VTT or TXT. Three extractions a day are free without an account; after that a signed-in account costs 1 credit per video, and a new account starts with 5. Failed extractions are not charged.
Open the subtitle downloaderOne limit worth stating plainly: this reads the caption track YouTube already publishes. It does not transcribe audio, so a video with no track produces no file in any format. That is a property of the source, not of the format you picked.
Decided on a format?
Paste the link, check which tracks the video actually has, and take the one you need.
More on subtitles
- How to download YouTube subtitles (TXT, SRT, VTT)Which subtitle format an editor actually needs, what the timestamps are for, and why some videos have no subtitles to download at all.
- Why does a YouTube video have no subtitles?Captions not enabled, automatic captions still processing, members-only, or the video is private — four situations that look identical, and only one fixes itself.
- What is an SRT file?A number, a time range, the text, a blank line. What each part of a cue does, why every editor still opens one, and three edits that break the file silently.
- How to get a YouTube transcript without timestampsEvery caption track is timed, so anything that writes one out carries the timing with it. TXT drops it — and two regexes rescue a file you already have.
- Downloading subtitles from YouTube StudioSubtitles, the three-dot menu, Download: your own track as SRT, VTT or SBV. What each format is for, and why the menu is absent when the video is not yours.
- Subtitles as LLM input: what to fix before you trainAuto captions repeat themselves, cut mid-sentence and carry applause markers. Four fixes before the text becomes training data — and the rights check first.