SRT, VTT and SBV: subtitle formats explained
In short: all three formats store the same thing — a list of cues, each with a start time, an end time and one or more lines of text — but they write timestamps, numbering and extras differently. Those differences decide what a cleaner has to remove, and why some files come out messier than others.
What a subtitle file contains
A subtitle file is plain text. It is a sequence of cues: blocks that say “show this text from this moment until that moment”. A video player needs the timing; a reader only needs the words. Turning subtitles into a transcript is therefore a matter of keeping the text lines and dropping everything else.
The catch is that “everything else” looks different in each format. A rule that removes SRT timestamps will not recognize SBV ones, and a WebVTT file can carry whole blocks of styling and comments that are not dialogue at all. Below is what each format looks like and what has to go.
SubRip (.srt)
SRT is the oldest and most widespread of the three, named after the SubRip program that popularized it. Each cue has three parts — a sequence number, a timing line and the text — and cues are separated by a blank line:
1
00:00:01,000 --> 00:00:03,200
Hello everyone,
and welcome back.
2
00:00:03,400 --> 00:00:06,000
<i>Today we're looking at</i> [Music]
subtitle formats.
- Timestamps are written as hours, minutes, seconds and milliseconds, with a comma before the milliseconds.
- The sequence number is a counter. It means nothing to a reader, but it sits on its own line and is easy to mistake for dialogue.
- Styling has no formal standard. Many files use HTML-like tags such as
<i>,<b>or<font color="…">, which most players understand. - Encoding is not declared anywhere in the file. Older SRT files are often saved in a legacy encoding such as Windows-1252 rather than UTF-8, which is where garbled accents come from (see Fixing garbled characters in subtitle files).
To get text out of an SRT file you remove the sequence numbers, timing lines and tags. A line of dialogue can also be just a number (“2024”, “42”), so delsub only treats a number as an identifier at the start of a cue block, immediately before a valid timing line. The switch is called Cue identifiers; turn it off to keep the original identifiers.
WebVTT (.vtt)
WebVTT (Web Video Text Tracks) is the format browsers play natively through the HTML <track> element, and it is specified by the W3C. It started out close to SRT, but it adds a header, comments, styling and positioning:
WEBVTT
Kind: captions
Language: en
NOTE This comment is for editors, not viewers.
STYLE
::cue { color: yellow; }
intro
00:00:01.000 --> 00:00:03.200 align:start position:10%
<v Ana>Hello everyone,</v>
and welcome back.
- The header. The file must start with
WEBVTT. Anything after it, up to the first blank line, is header metadata; YouTube putsKind:andLanguage:there. - Timestamps use a period before the milliseconds, and the hours are optional:
01:02.500is valid. - Cue settings such as
align,position,lineandsizecan follow the timing on the same line. - Cue identifiers are optional and can be any text, not just a number —
introin the example. - Blocks that are not dialogue:
NOTEblocks are comments,STYLEblocks hold CSS for the::cuepseudo-element, andREGIONblocks define areas of the screen. Each one runs until the next blank line. - Inline markup:
<v Name>marks the speaker,<c>applies a class, and timestamps such as<00:00:02.100>inside the text drive word-by-word highlighting. YouTube’s automatic captions use the last two on almost every word.
Cleaning a VTT file means removing the header, the NOTE, STYLE and REGION blocks including their bodies, the timing lines with their settings, the inline timestamps and the tags. Note that removing <v Ana> also removes the speaker’s name, since it lives inside the tag.
A text identifier such as intro can look like dialogue. With Cue identifiers on, delsub removes it only in a file with a WEBVTT header, at the start of a block immediately before a valid timing line. Text after a cue’s timestamp remains dialogue. In a pasted fragment without the header, ambiguous text labels are kept for manual review rather than silently discarded.
SBV (.sbv)
SBV is the plain format YouTube has long offered in its caption tools. It is the simplest of the three:
0:00:01.000,0:00:03.200
Hello everyone,
and welcome back.
0:00:03.400,0:00:06.000
Today we're looking at subtitle formats.
- No header and no sequence numbers.
- Start and end times share one line, separated by a comma, usually with a single digit for the hour.
- No styling or positioning.
Only the timing lines need to go, which is why SBV files usually produce the cleanest text.
The three formats side by side
| SRT | WebVTT | SBV | |
|---|---|---|---|
| Header | None | WEBVTT plus optional metadata | None |
| Cue numbers | Required counter | Optional, any text | None |
| Time format | 00:00:01,000 | 00:00:01.000 | 0:00:01.000 |
| Start/end | --> | --> | Comma |
| Styling | Informal tags | Cue settings, CSS, voice and class tags | None |
| Comments | None | NOTE blocks | None |
Which format should you use?
- Captions on your own website: WebVTT. It is the format the
<track>element expects. - Video editors, media players and broad compatibility: SRT, which almost every tool accepts.
- YouTube: YouTube accepts all three when you upload captions, so pick whichever your editing tool exports.
- Reading, quoting, translating or feeding a language model: none of them. Convert the file to plain text first; timing lines and tags only add noise, and a model will happily treat them as content.
Three files, one checked text output
These synthetic downloads express the same two sentences using different structures: SRT, WebVTT and SBV. The VTT includes text identifiers intro and closing, a comment, a style block and a voice tag; the SRT includes numbering and italic markup.
Load each file into delsub with all seven switches on. Each produces exactly:
Hello everyone, and welcome back.
Today we're looking at subtitle formats.
The expected UTF-8 text file includes a final newline. The comparison was reproduced with delsub’s actual decoder, parser and paragraph rebuilder on 21 October 2026; the results record the input and output hashes.
Turn only Cue identifiers off and intro and closing remain, as shown in this exact alternate output. The stored option remains compatible with earlier visits. “Ana”, inside the VTT voice tag, is still absent when markup removal is on: Split on speaker recognizes textual labels such as “Ana:” but does not recover names removed with markup.
Dialogue, headings and music: a checked example
Load this synthetic VTT with all seven switches on. It combines named cues, dialogue dashes, [MUSIC PLAYING], music notes, a numbered instruction, a negative decimal and a URL. The exact output is:
Hello.
Welcome.
Keep these lyrics.
Start with Step 1: open the file.
The symbol ♪ means a note.
It was - .5 degrees.
Visit https://example.com/
Compare the exact UTF-8 output with the version with only Split on speaker off. Each ends with a newline. The latter retains the leading dialogue dashes; word-internal hyphens and numeric minus signs remain in both. “Step 1:” does not create a speaker break.
Speaker detection is conservative: it recognizes conventional capitalized name labels and numbered labels such as “Speaker 2:”, not every possible name or heading. A leading dash followed by words is ambiguous between dialogue and a bullet; turn Split on speaker off to preserve it. Sound effects removes notes on their own or around a complete lyric line, preserving the words; unpaired notes and notes within a sentence remain. Turn Roll-up repeats off too if a singer intentionally repeats a line.
Sources and scope
Primary documentation checked on 21 October 2026. The examples above test delsub’s own behavior; they do not certify every subtitle file or third-party interface.
- W3C WebVTT specification — the WebVTT grammar, cue identifiers, voice spans and UTF-8 requirement.
- YouTube: supported subtitle and closed-caption files — YouTube’s supported SRT, SBV and VTT variants.
Paste any of the examples above into delsub and switch the cleaning rules on and off to see exactly what each one removes. Everything runs in your browser.