| File extension | .srt | .vtt |
|---|
| MIME type | application/x-subrip, never formally registered — some upload forms treat an SRT file as plain text. | text/vtt, registered. A server must send this type or the browser will not load the track. |
|---|
| First line | The first cue's number. There is no header, so an SRT file cannot be identified from its opening bytes. | WEBVTT, mandatory. Anything after it on the same line is a title and is ignored. |
|---|
| Timestamp | 00:01:02,500 — a comma before the milliseconds. | 00:01:02.500 — a dot before the milliseconds. |
|---|
| Hours field | Always written, even for a five-second mark: 00:00:05,000. | Optional. 00:05.000 is a valid five-second mark. |
|---|
| Cue label | A sequential number above the timing. Positional, so it is renumbered whenever cues are added or removed. | An optional name — any text without an arrow. Used by scripts and stylesheets, never shown to viewers. |
|---|
| Positioning | None. Where a caption lands on screen is the player's decision. | Cue settings written after the end timestamp: align, line, position, size and vertical. |
|---|
| Styling | Not specified. Players tolerate a few tags such as italic and bold by convention, and disagree about the rest. | Bold, italic, underline, class and voice tags, plus the ::cue selector in CSS. |
|---|
| Comments | No comment syntax exists. | NOTE blocks, which players skip. |
|---|
| Text encoding | Undeclared. This is where garbled accents come from: the player guesses, and sometimes guesses wrong. | UTF-8, required by the specification. |
|---|
| Played by | Desktop players, and most upload forms that accept a separate caption file. | Browsers, through the HTML5 track element — the usual reason to convert. |
|---|