WebVTT subtitles
WebVTT defines UTF-8 timed text cues, presentation settings, and cue markup for web-oriented text tracks.
WebVTT is the Web Video Text Tracks format. It gives web-oriented text tracks a defined syntax for UTF-8 cues, settings and markup. The W3C reference used here is the 20 May 2026 Candidate Recommendation Draft.
A small file can look like this:
WEBVTT
station-announcement
00:00:12.500 --> 00:00:15.000 line:85% position:50% align:center size:80%
<v Announcer>The last train leaves at midnight.
The cue occupies 12.5 through 15 seconds. station-announcement is its identifier, not a time or a required numeric counter. The voice annotation names the speaker for the cue's markup; it is not automatically part of the displayed sentence.
The settings describe a cue box
| Setting in the example | Intent |
|---|---|
line:85% |
A percentage-based line position in the rendering area |
position:50% |
The cue's percentage position |
align:center |
Centre alignment of its text |
size:80% |
A cue-box size relative to the relevant dimension |
These settings participate in WebVTT's positioning model. They are not pixels on the original encoded movie and do not guarantee one identical physical location across every player size, writing direction and supported rendering path.
WebVTT also has defined text markup for functions such as emphasis, classes, ruby and voice annotations. Its CSS cue styling is restricted to the specified model. Arbitrary HTML, script or a page's general stylesheet is not a replacement for that model.
Parsing has specific rules
A WebVTT file begins with WEBVTT, is encoded as UTF-8, and uses a decimal point for the timestamp fraction. The blank line after the header and those separating cue blocks are part of its structure.
The cue starts must be in nondecreasing order in a conforming file, and each cue's end must be later than its start. End times need not be in the same order. Two subtitle cues can overlap.
Renaming an SRT file to .vtt does not add the header, change the fraction punctuation, or interpret its presentation extensions. A proper conversion parses the source and writes the target format.
More than one cue can be active
Take cue A from 12 to 15 seconds and cue B from 14 to 16. Between 14 and 15, both are active. A player might use them for two speakers or for dialogue and another annotation. Rendering then needs to handle their boxes and avoid inappropriate collisions.
The original example above has one box. A more complex layout can use multiple cue settings or regions; an app converting the stream into a simpler subtitle representation might not retain those choices.
WebVTT can also carry other text-track uses, such as chapters or timed metadata. That does not make every WebVTT payload a caption for display.
The file and its delivery remain separate
An Emby route can supply text a web player can render separately, including through a suitable subtitle conversion. Another route may use a native renderer. The selected app's behavior determines how much of WebVTT's presentation model it uses.
The WebVTT format describes the text track. Fetching it as a whole resource, delivering it in streaming segments, or storing its payload in a container adds timing and packaging rules outside the simple file shown here. Those rules must preserve the cue's place on the media timeline.