Reference
SRT, VTT and plain text — which one you need.
The three subtitle outputs, what each one carries, where each is accepted, and the two mistakes that break a file.
SRT and WebVTT store the same thing — timed caption cues — but differ in three ways: SRT numbers each cue and uses a comma before the milliseconds, while WebVTT starts with a WEBVTT line, uses a period, needs no index, and can carry positioning and styling. A plain-text transcript carries no timings at all.
There are dozens of subtitle formats and you will realistically only meet three. SubRip (.srt) is the universal one. WebVTT (.vtt) is the web one. A plain-text transcript is not a subtitle format at all but gets asked for in the same breath, so it belongs in the same reference.
The differences between SRT and VTT are small, boring and load-bearing: get one character wrong and a player rejects the file silently. What follows is what each format actually contains, where each is accepted, and how to convert between them without breaking anything.
SubRip (.srt)
The universal format. Numbered cues, comma before the milliseconds, no styling. Accepted by YouTube, LinkedIn, Vimeo, VLC and every major editor.
WebVTT (.vtt)
The web format, required by the HTML5 <track> element. Period before the milliseconds, a WEBVTT header line, and optional positioning and cue styling.
Plain text (.txt)
The words with no timings. For show notes, blog posts, translation briefs and searchable archives — not for a video player.
Burned-in video
Not a file format but the fourth option: the words as pixels. The only way to carry a font, a colour, a position and motion.
The differences that matter
Both formats are UTF-8 text listing cues in order. The distinctions are these, and they are the whole of it for practical purposes.
- The header
- A WebVTT file must begin with the line `WEBVTT`. An SRT has no header and begins with the first cue’s index.
- The decimal separator
- SRT: `00:00:04,120` with a comma. WebVTT: `00:00:04.120` with a period. This is the single most common conversion error.
- The cue index
- SRT numbers every cue from 1. WebVTT does not require an index; a line before the timing is treated as an optional cue identifier.
- Markup escaping
- WebVTT treats `&`, `<` and `>` as cue markup, so literal ones must be escaped as `&` `<` `>`. SRT has no escaping and shows them raw.
- Styling and position
- WebVTT can carry cue settings and a STYLE block. SRT carries neither — a plain SRT is text and timings, nothing more.
Converting between them without breaking the file
Going from SRT to VTT is three edits: add a `WEBVTT` line and a blank line at the top, change every timestamp comma to a period, and escape any literal `&`, `<` or `>` in the text. The cue indices can stay — WebVTT will read them as cue identifiers and ignore them.
Going the other way, strip the header, change the periods back to commas, add 1-based indices if there are none, and drop any cue settings or STYLE blocks, since SRT cannot express them. Anything positioned or styled in the VTT loses that on the way across, which is not a conversion bug but the format doing what it does.
The way to avoid all of it is to generate both from the same transcript rather than converting one into the other. Downloading an SRT and a VTT from the same corrected words takes two clicks and cannot introduce a mismatch.
Which one each destination wants
When in doubt, SRT. It is accepted almost everywhere a subtitle file is accepted at all, and where a platform prefers VTT it usually still takes SRT and converts internally. VTT becomes necessary specifically when you are wiring a `<track>` element into an HTML5 video player yourself, or when you need a caption positioned somewhere other than the default.
SRT vs WebVTT vs transcript
| SubRip (.srt) | WebVTT (.vtt) | Transcript (.txt) | |
|---|---|---|---|
| First line | Cue index `1` | `WEBVTT` | The words |
| Timestamp | `00:00:04,120` | `00:00:04.120` | None |
| Cue index | Required, 1-based | Optional identifier | n/a |
| Escaping | None — raw characters | `&` `<` `>` | None |
| Styling / position | No | Cue settings + STYLE | No |
| HTML5 <track> | Not supported | Required format | No |
| YouTube upload | Yes | Yes | No |
| LinkedIn composer | Yes | No | No |
All three are free and unlimited downloads on every LumaCaption plan, generated from the same corrected transcript so they cannot drift apart.
How it works
Transcribe once
Word-level timings come from your audio. The video file is never uploaded.
Correct the words
Fix names and jargon in the transcript, not in three separate files afterwards.
Download whichever formats you need
SRT, VTT and plain text, from the same words. Free and unlimited on every plan.
Common questions
What is the difference between SRT and VTT?
Four things. A WebVTT file starts with the line `WEBVTT` and an SRT does not; SRT timestamps use a comma before the milliseconds (`00:00:04,120`) and WebVTT uses a period (`00:00:04.120`); SRT requires a 1-based cue index and WebVTT treats a line before the timing as an optional identifier; and WebVTT escapes `&`, `<` and `>` as cue markup while SRT shows them raw. WebVTT can also carry positioning and styling, which SRT cannot.
Can I just rename a .srt file to .vtt?
No. At minimum you need to add the `WEBVTT` header line and change the timestamp commas to periods; without those a strict parser rejects the file. You should also escape any literal `&`, `<` or `>` in the text, since WebVTT reads them as markup.
Which format does YouTube want?
YouTube accepts both SRT and WebVTT in its subtitle upload. SRT is the safer default across platforms generally — LinkedIn’s composer, for instance, takes an .srt file and not a .vtt.
Why can’t my subtitle file carry my caption style?
Because SRT has no styling at all, and WebVTT’s styling is limited to what a web player chooses to honour. A font, an accent colour, word-by-word motion and a specific position on the frame can only be delivered as pixels — that is, burned into the video. Most workflows take both: the subtitle file for platforms that read files, the burned-in export for platforms where the look is the point.
Is a plain-text transcript a subtitle format?
No — it has no timings, so no player can use it as captions. It is for show notes, blog posts, translation briefs and searchable archives.
