Updated August 1, 2026
What Is a VTT File? WebVTT Format & How to Open .vtt Files
VTT stands for Web Video Text Tracks (commonly called WebVTT) — a W3C-standardized plain-text subtitle file for HTML5 web video. It's the format the HTML5 <track> element officially uses, and it's Apple HLS's subtitle format of choice. Below: the acronym meaning, .vtt file structure, how to open VTT files, format comparison to SRT/ASS/SCC/TTML, and three ways to create one.
Key takeaways
- ●VTT = Web Video Text Tracks (WebVTT). A W3C-standardized plain-text subtitle file for HTML5 web video via the
<track>element. - ●File structure: WEBVTT header + cues. Line 1 must be the literal “WEBVTT”, then a blank line, then each cue: optional identifier, timecode (HH:MM:SS.mmm --> HH:MM:SS.mmm), caption text, blank line separator.
- ●Origin: W3C, drafted 2010. Designed as a modernization of SRT for browsers — adding a required header, styling support, cue positioning, and a formal specification SRT never had.
- ●Primary use: HTML5 web video. The only officially supported subtitle format in the HTML5 spec, plus Apple HLS streaming subtitle segments. Video.js, Plyr, Shaka Player all expect VTT.
- ●Open with any text editor. Notepad, TextEdit, VS Code all handle .vtt files. Subtitle Edit and Aegisub give proper sync editing.
- ●VTT vs SRT: period vs comma + WEBVTT header + styling. Trivial to convert either direction. Use VTT for HTML5 web video; use SRT for YouTube uploads, video editors, and universal delivery.
What does VTT stand for?
VTT stands for Web Video Text Tracks — the full format name is WebVTT. In writing, both “VTT file” and “WebVTT file” refer to the same thing; .vtt is the filename extension you save it as. The format was drafted by the W3C in 2010 as part of the HTML5 effort, evolving from an earlier WHATWG proposal originally called WebSRT (Web Subtitle Resource Tracks). It reached W3C Candidate Recommendation status and is now the format the HTML5 <track> element officially uses.
Source: W3C WebVTT: The Web Video Text Tracks Format (verified August 2026).
VTT file definition and meaning
A VTT file is a plain-text subtitle and caption file that stores captions and their timing information for web video. The file has a .vtt extension, must start with the literal string WEBVTT on its first line, and pairs each caption with a start and end timecode that tells the video player when to show it. Unlike SRT, VTT supports basic CSS-like styling, cue positioning, and metadata payloads — features that browsers need for accessible, responsive web video.
Multiple VTT files (one per language) work identically alongside a video — .vtt files in plural are the standard delivery format for multi-language HTML5 subtitle tracks (movie.en.vtt, movie.es.vtt, movie.fr.vtt), each attached via its own <track> element.
Beyond captions and subtitles, WebVTT also carries chapters (kind="chapters") and metadata payloads (kind="metadata") — a single file format serving multiple text-track roles in the HTML5 spec. If you have a plain SRT file and need a VTT, the conversion is two find-and-replace edits away.
WebVTT format and structure — .vtt anatomy
Every VTT file has this shape: a header line, a blank line, then one or more cues. Each cue has:
- Optional cue identifier — any text on a line before the timecode arrow. Used to reference the cue from CSS or JavaScript. Skippable.
- Timecode line — in the format
HH:MM:SS.mmm --> HH:MM:SS.mmm. The period before milliseconds is the WebVTT rule (SRT uses a comma). Optional cue settings can follow (position, alignment, line, size). - Caption text — one or more lines of caption text. Supports inline styling tags (
<i>,<b>,<c.className>). - Blank line — separates this cue from the next.
Working example (3 cues)
WEBVTT 1 00:00:00.000 --> 00:00:03.500 Welcome to the tutorial. 2 00:00:03.500 --> 00:00:07.200 Today we're looking at the WebVTT subtitle file format. 3 00:00:07.200 --> 00:00:11.000 line:90% The format is simple — the quirks are where the file breaks.
Copy this into any text editor, save as example.vtt with UTF-8 encoding, and it's a valid WebVTT file you can attach to an HTML5 <track> element or drop into VLC.
The line:90% on cue 3 is a cue setting — it positions the caption at 90% down the video frame. WebVTT supports position, line, size, align, and vertical settings after the timecode. SRT has none of this. For the deep dive on subtitle formats generally, see what is an SRT file.
Origin — where WebVTT came from
WebVTT emerged from a specific problem: by 2010, HTML5 had introduced the <video> element, but there was no standard way to attach captions to browser-rendered video. The dominant subtitle format at the time — SRT — was widely used but never formally specified; each parser handled edge cases differently. Browsers needed a real spec.
The WHATWG initially proposed a format called WebSRT (Web Subtitle Resource Tracks) — essentially SRT with a required header and formal grammar. The proposal was refined by the W3C into WebVTT, renamed to reflect that the format serves multiple text-track roles beyond subtitles (captions, chapters, descriptions, metadata). The first public working draft appeared in 2010; the specification advanced through W3C Candidate Recommendation status over the following years.
Three things drove adoption. First, the HTML5 <track> element officially uses WebVTT — every browser vendor implemented it. Second, Apple adopted WebVTT for HLS streaming subtitle segments, giving it a major distribution role beyond the browser. Third, modern web video players (Video.js, Plyr, Shaka Player, hls.js) all expect VTT as their default subtitle format.
Today WebVTT is the web's answer to what SRT is for creator tools — the universal option in its context. Its parent, SRT, remains dominant everywhere else. Neither has replaced the other; they coexist because they optimize for different delivery paths.
What VTT files are used for
Six common workflows for VTT files in 2026:
HTML5 <track> element
The HTML5 <video><track kind="subtitles" src="captions.vtt" srclang="en"></video> pattern is the browser-native way to attach captions. WebVTT is the only format officially supported by the HTML5 spec here.
HLS streaming subtitle segments
Apple's HLS protocol supports segmented WebVTT files delivered alongside audio and video segments in an HLS playlist. Widely used in modern streaming players (Video.js, Shaka Player, hls.js).
Web accessibility (WCAG 2.1)
WCAG 2.1 Level A requires captions on prerecorded video. A properly delivered VTT via the <track> element satisfies this for self-hosted HTML5 web video without needing external players.
Video.js, Plyr, Shaka Player
Modern web video frameworks expect WebVTT for their subtitle APIs. Uploading a VTT to your CDN and pointing the player at it is the standard integration.
Chapters and metadata tracks
HTML5 <track> supports kind="chapters" and kind="metadata" — both use WebVTT syntax. Chapters let viewers jump between named sections; metadata tracks carry JSON payloads synced to video time.
YouTube upload (also accepts SRT)
YouTube Studio → Subtitles → Upload file accepts both .srt and .vtt with timing. No SEO advantage for either — pick whichever your workflow produces.
VTT vs SRT vs ASS vs SCC vs TTML
WebVTT is one of several subtitle formats — each optimized for a different delivery context. Here's where each fits.
WebVTT (.vtt)
2010 (W3C draft), Candidate Rec.Timecode
HH:MM:SS.mmm (period)
Styling
CSS-like styling, positioning, cue metadata
Supports: HTML5 <track> element, HLS streaming, modern web video
Best for: HTML5 web video, browser-native subtitles, HLS caption tracks
SRT (SubRip)
~2001-2002 (from SubRip DVD tool)Timecode
HH:MM:SS,mmm (comma)
Styling
None
Supports: YouTube, Premiere, DaVinci, CapCut, VLC, virtually every platform
Best for: Universal subtitle delivery, YouTube uploads, video editor timelines
SSA / ASS
SSA 1998, ASS 2003Timecode
H:MM:SS.cc (centiseconds)
Styling
Full styling — fonts, colors, positions, karaoke effects
Supports: Aegisub, MPV, VLC, anime players
Best for: Anime fansubs, karaoke, precise styling control
SCC (Scenarist)
1990s (US broadcast)Timecode
Binary CEA-608 encoding
Styling
Broadcast-specific (position, italics, colors)
Supports: US broadcast delivery pipelines, professional caption software
Best for: US FCC-compliant broadcast captions
TTML / IMSC1.1
TTML 2010, IMSC 2016 (W3C)Timecode
XML-based, multiple options
Styling
Extensive XML styling model
Supports: Netflix, streaming OTT delivery
Best for: Streaming platform delivery (Netflix uses IMSC1.1)
Practical rule of thumb: VTT for HTML5 web video; SRT for almost everything else. Use ASS for karaoke or precise styling control (anime fansubs). Use SCC or TTML/IMSC only if you're shipping to US broadcast or Netflix respectively. For the legal and accessibility framing around when captions are required, see captions vs subtitles.
How to open VTT files (viewers, editors, and text editors)
VTT files are plain text — any text editor opens them.
Text editors (any OS)
- Notepad (Windows built-in)
- TextEdit (Mac built-in — Format → Make Plain Text first)
- VS Code (cross-platform, free)
- Sublime Text (cross-platform)
- gedit (Linux)
- vim, nano (terminal-based)
Subtitle editors (proper tools)
- Subtitle Edit (Windows, free, MIT license) — best all-around VTT editor with waveform sync and validation
- Aegisub (cross-platform, free, BSD license) — advanced timing, originally built for ASS but handles VTT
- Jubler (Java, free) — cross-platform alternative
- VLC — will play a VTT alongside a matching video (same folder, same base filename)
If double-clicking a VTT launches a media player, that's because the player is trying to load the file as a subtitle track. To edit the VTT text itself, right-click → Open With → choose a text editor.
How to create a VTT file
Three creation paths, ordered fastest to slowest:
1. AI generation (fastest — 5-15 minutes per video hour)
Upload audio or video to a modern AI transcription tool — VexaScribe, Descript, Rev AI, or comparable. Whisper Large-v3 produces timestamps automatically at 90-95% accuracy on clean audio. Most generators export both SRT and VTT from the same transcription pass — no separate step needed for VTT specifically.
2. Free desktop tools (medium — 30-60 minutes per video hour)
Subtitle Edit (Windows) or Aegisub (cross-platform) give you waveform sync, syntax checking, and reading-speed enforcement. Both export WebVTT via File → Save As → WebVTT (.vtt). Best when you want free tools with professional control or you're translating existing captions.
3. Manual in a text editor (slowest — 2-4 hours per video hour)
Type the WebVTT format directly in Notepad, TextEdit, or VS Code. Start with WEBVTT on line 1, then a blank line, then each cue. Zero cost, deep control, very slow. Best only for tiny files (under 5 minutes) or when learning the format hands-on.
Convert between VTT and SRT
Both directions are trivial — the formats are close cousins.
VTT → SRT
- Delete the
WEBVTTheader line at the top. - Delete any STYLE, NOTE, or REGION blocks.
- Find-and-replace:
.in timecodes →,(only the ms separator). - Save with
.srtextension and UTF-8 encoding. - Styling, positioning, and cue settings will be stripped — SRT can't represent them.
SRT → VTT
- Add
WEBVTTon line 1, then a blank line. - Find-and-replace:
,in timecodes →.(only the ms separator). - Save with
.vttextension and UTF-8 encoding. - All content preserved; the VTT stays styling-free unless you add cue settings later.
For a client-side conversion that runs in your browser (no upload), use our VTT to SRT converter — it reports honestly what got stripped in the process.
Common WebVTT quirks that trip people up
Four things that break VTT files in practice:
Missing WEBVTT header
The literal string WEBVTT must be on line 1, with a blank line after it before the first cue. Missing this header — the most common VTT authoring mistake — makes strict browsers reject the whole file. This is the biggest structural difference from SRT.
Period vs comma in timecodes
WebVTT uses a period before milliseconds (00:01:23.500). SRT uses a comma (00:01:23,500). Getting this wrong is the #1 way VTT files break in HTML5 <track> — the browser silently skips cues.
UTF-8 encoding required
The W3C spec mandates UTF-8. Windows Notepad's default (ANSI / Windows-1252) breaks accented characters and non-Latin scripts and technically makes the file invalid. Always save with UTF-8. Notepad: File → Save As → Encoding: UTF-8. VS Code uses UTF-8 by default.
CORS headers when served remotely
When an HTML5 <track> loads a VTT from a different origin than the page, the server must send Access-Control-Allow-Origin. Otherwise the browser blocks the file silently and no captions appear. Also set the MIME type to text/vtt.
Frequently asked questions
What does VTT stand for?
VTT stands for Web Video Text Tracks — commonly written as WebVTT. It's a W3C-standardized subtitle and caption format designed specifically for HTML5 web video via the <track> element. First drafted around 2010 as a modernization of SRT, WebVTT became a W3C Candidate Recommendation and is the format the HTML5 spec requires for browser-native captions. The .vtt file extension is the standard extension; WebVTT is the format name and .vtt is the filename you save it as.
What is a VTT file used for in practice?
Three main workflows. (1) HTML5 web video: the <video> element's <track kind="subtitles" src="captions.vtt"> loads a VTT file for browser-native captions — this is the only officially supported HTML5 subtitle format. (2) HLS streaming: Apple's HLS protocol uses WebVTT for segmented subtitle tracks in HLS playlists. (3) Video accessibility: VTT is what modern web frameworks (Video.js, Plyr, Shaka Player) expect for WCAG 2.1 caption compliance. For non-web workflows (YouTube upload, Premiere, DaVinci), SRT is more universally accepted — but many modern platforms accept both.
What's the difference between VTT and SRT?
Four key differences. (1) Timecode separator: VTT uses a period before milliseconds (00:01:23.500); SRT uses a comma (00:01:23,500). (2) File header: VTT files must start with the literal "WEBVTT" on the first line; SRT has no header. (3) Styling: VTT supports CSS-like styling, cue positioning, and metadata; SRT is styling-free. (4) Delivery context: VTT is HTML5's official caption format; SRT is universal across YouTube, video editors, and desktop players. For HTML5 web video use VTT; for creator workflows use SRT.
How do I open a VTT file?
Any text editor. VTT files are plain text — Notepad on Windows, TextEdit on Mac (Format → Make Plain Text first), VS Code, Sublime, vim, or nano will open them. For proper subtitle editing with sync verification, use Subtitle Edit (Windows, free) or Aegisub (cross-platform, free). If double-clicking a VTT file launches a media player instead, the player is trying to load it as a subtitle track; right-click → Open With → choose a text editor to edit the text itself.
How do I create a VTT file?
Three paths. (1) AI generation (fastest): upload audio or video to VexaScribe, Descript, or Rev — a valid VTT drops out in minutes at 90–95% accuracy. (2) Free desktop tools: Subtitle Edit or Aegisub let you time captions against a waveform, then export → WebVTT (.vtt). (3) Manual in a text editor: type WEBVTT on the first line, add a blank line, then cue after cue in the format "00:00:00.000 --> 00:00:03.500\nCaption text\n\n" — save with .vtt extension and UTF-8 encoding. See our SRT generator (outputs both SRT and VTT).
What's the WebVTT file format structure?
Each file starts with the literal "WEBVTT" on line 1, then a blank line, then one or more cues. Each cue has: (1) an optional cue identifier line (any text before the arrow), (2) a timecode line in HH:MM:SS.mmm --> HH:MM:SS.mmm format with optional cue settings after the second timecode, (3) the caption text on one or more lines, and (4) a blank line separator. Cue settings can control position, alignment, line, and size. Save with .vtt extension and UTF-8 encoding.
Can I convert VTT to SRT?
Yes, and both directions are trivial. Manual VTT→SRT: open in text editor, delete the WEBVTT header line and any styling blocks, use find-and-replace to change every "." in timecodes to ",", save as .srt. Automated conversion: our client-side VTT to SRT converter handles it in-browser (no upload). Subtitle Edit also handles it via File → Save as → SubRip (.srt). Converting from VTT to SRT will strip any styling, positioning, or metadata — SRT can't represent those.
Is VTT the same as WebVTT?
Yes — WebVTT is the format name, .vtt is the filename extension. "VTT file" and "WebVTT file" are the same thing. The W3C specification calls the format WebVTT (Web Video Text Tracks); the filename is customarily .vtt to keep it short. In writing, both are accepted; in the spec text, WebVTT is preferred for the format and .vtt for file references.
What character encoding should a VTT file use?
UTF-8 — required by the W3C spec. WebVTT files are always UTF-8 encoded; unlike SRT (where UTF-8 is a strong convention but not strictly enforced), VTT files that use another encoding are technically invalid and may fail to parse in strict browsers. Windows Notepad's default (ANSI / Windows-1252) breaks accented characters, non-Latin scripts, and emoji. Always save VTT with UTF-8 encoding. VS Code and Subtitle Edit use UTF-8 by default.
Does YouTube accept VTT files?
Yes. YouTube Studio's Subtitles → Upload file accepts both .srt and .vtt files with timing. For a creator uploading captions to YouTube, either format works identically — pick whichever your workflow already produces. VTT does not give any SEO or feature advantage over SRT on YouTube; the platform normalizes both to its internal caption representation. Use VTT specifically when you're delivering HTML5 web video via a <track> element or an HLS pipeline.
Related guides
What is an SRT file?
The other universal subtitle format — SubRip Text, plain-text with HH:MM:SS,mmm timecodes
VTT to SRT converter
Client-side subtitle format conversion — both directions, honest report of what got stripped
SRT / VTT generator
Generate subtitle files from any audio or video with Whisper Large-v3 — 30 min free at signup
How to create an SRT file
3 methods — manual, free desktop tools, or AI generation. Trivially converts to VTT
Captions vs subtitles
The technical and legal difference between captions and subtitles — formats, regulations, when to use each
What is closed captioning?
Definition, CC vs subtitles vs SDH, how modern captions are made, and when you legally need them
How to add subtitles to a video
Step-by-step per platform — YouTube, Premiere, DaVinci, CapCut, iPhone
Need a VTT file for your video?
Skip the manual work — upload your audio or video and get Whisper-generated SRT and VTT in minutes. 30 minutes free at signup, no credit card.