VTT File Documentation
Summary
The .vtt extension has two very different meanings. To Crestron’s AV design software it is a VisionTools Pro-e Project, the binary project file that stores a touch-panel interface layout. In practice, though, the overwhelming majority of .vtt files are WebVTT (Web Video Text Tracks): plain-text subtitle and caption files for HTML5 video, MIME type text/vtt, whose first line is literally WEBVTT. Check the first bytes to tell them apart.
Technical details
| Feature | Value |
|---|---|
| SITE format name | VisionTools Pro-e Project |
| SITE developer | Crestron Electronics |
| SITE format type | AV touch-panel interface project (binary), VisionTools Pro-e (VT Pro-e) |
| Opened with (SITE) | Crestron VisionTools Pro-e |
| File extension | .vtt |
| Dominant real meaning | WebVTT — Web Video Text Tracks (subtitles/captions) |
| WebVTT MIME type | text/vtt |
| WebVTT developer | W3C / WHATWG |
| WebVTT format type | Plain UTF-8 text, timed cues for HTML5 <track> |
| WebVTT open standard | Yes (W3C WebVTT specification) |
| Introduced (WebVTT) | ~2010, derived from SubRip (SRT) |
| WebVTT signature | First line is the literal text WEBVTT (optional UTF-8 BOM before it) |
| Timecode syntax | 00:00:01.000 --> 00:00:04.000 (period before milliseconds) |
| vs SRT | SRT uses a comma in timecodes and no WEBVTT header |
| WebVTT features | Cue positioning, CSS ::cue styling, voice/class spans, regions, NOTE blocks |
| Related extensions | .srt, .ass, .ssa, .sub, .sbv |
| WebVTT specification | w3.org/TR/webvtt1/ |
What is a VTT file?
The .vtt extension carries two unrelated formats, and it is worth naming both plainly. In the SITE database, .vtt is a VisionTools Pro-e Project: the project file that Crestron’s VisionTools Pro-e (VT Pro-e) software saves when you design the interface for an AV touch panel. That is a real but specialised binary format opened only by Crestron’s tooling.
For almost everyone who encounters a .vtt today, however, the file is WebVTT (Web Video Text Tracks): a plain-text subtitle or caption file for HTML5 video. WebVTT is a W3C standard, was derived from SubRip (SRT) around 2010, and is the format the HTML5 <track> element loads to display captions in a browser. Its MIME type is text/vtt. Because the two formats share three letters but nothing else, the rest of this article covers WebVTT in depth (the file you almost certainly have) and returns to the VisionTools project at the end.
The WEBVTT header line
A WebVTT file is human-readable UTF-8 text, so you can open it in any editor. The specification requires that it begin with a specific signature: the very first line must be the string WEBVTT. Nothing may come before it except an optional UTF-8 byte-order mark (EF BB BF). The header line may be exactly WEBVTT, or WEBVTT followed by a space or tab and then free text used as a title or note.
WEBVTT - English captions for demo.mp4
00:00:01.000 --> 00:00:04.000
Welcome to the demonstration.
00:00:04.500 --> 00:00:07.200
This line appears a little later.
After the header comes a blank line, then a sequence of cues. If the first bytes are not WEBVTT, a conforming parser rejects the file, which is why a stray byte before the header, or saving the file in the wrong encoding, makes captions silently fail to load. This same rule is the reliable way to distinguish a WebVTT subtitle file from a VisionTools Pro-e project: the subtitle file starts with legible WEBVTT text, the Crestron project does not.
The cue: identifier, timings and payload
A cue is the unit that puts one caption on screen for one interval. It has up to three parts: an optional identifier line, a mandatory timing line, and one or more lines of payload text.
intro-1 <- optional cue identifier
00:01:12.500 --> 00:01:15.000 line:80% align:center
Here is the <i>caption</i> text,
which may span two lines.
The identifier is any label on its own line before the timings; it lets scripts and CSS target a specific cue and must not itself contain -->. The timing line is the heart of the cue: a start time, the literal arrow --> surrounded by spaces, and an end time. Times are written hours:minutes:seconds.milliseconds (hours optional), and the crucial detail is the period before the milliseconds, 00:01:12.500. This is the single most common difference from SRT, which uses a comma (00:01:12,500). Trailing the timings are optional cue settings such as line: (vertical position), position: (horizontal), align:, size: and vertical:, which place and orient the caption on the video.
Payload markup: voices, classes and timestamps
The cue text is not entirely plain: WebVTT defines a small set of inline tags that SRT lacks. A voice span, <v Speaker>...</v>, labels who is talking and can be styled per speaker. A class span, <c.loud>...</c>, attaches a CSS class. Basic <i>, <b> and <u> tags give italic, bold and underline. A timestamp tag inside a cue, like <00:01:13.000>, marks the moment individual words should highlight, which is how karaoke-style word-by-word captioning works. Because the text is HTML-like, the characters &, < and > in real dialogue must be escaped as &, < and >.
NOTE, STYLE and REGION blocks
Between cues, WebVTT allows three special blocks that SRT has no equivalent for. A NOTE block is a comment ignored on playback; it runs until the next blank line and cannot contain -->. A STYLE block embeds CSS that targets the pseudo-element ::cue, so captions can be coloured, given a background or a specific font directly from the file:
STYLE
::cue {
color: #fff;
background: rgba(0,0,0,0.6);
}
::cue(v[voice="Narrator"]) { color: #9cf; }
REGION
id:speaker width:40% lines:3 regionanchor:0%,100% viewportanchor:10%,90%
A REGION block defines a rectangular area of the video with its own size and anchor, so groups of cues can scroll within a fixed box rather than always sitting along the bottom edge. These styling and positioning features are the technical reason WebVTT is preferred over SRT for accessible, styled web captions: the presentation travels with the timing in one file the browser renders natively.
Loading WebVTT into an HTML5 video
You rarely “open” a .vtt by itself. On the web it is attached to a <video> through a <track> child, and the browser parses and renders it:
<video controls src="clip.mp4">
<track src="captions.vtt" kind="captions"
srclang="en" label="English" default>
</video>
The kind attribute distinguishes captions, subtitles, descriptions, chapters and metadata tracks, all of which use the same WebVTT syntax. Desktop players such as VLC and MPV auto-load a .vtt that shares the video’s name and folder, and editors like Subtitle Edit open it directly for retiming. Because the file is text, fixing a typo or nudging a timecode is a matter of editing lines and saving as UTF-8, which is essential so accented and non-Latin characters display correctly.
Converting WebVTT to SRT
The most common WebVTT task after simply displaying it is converting to and from SRT, because the two are nearly the same format. The mechanical differences are small and precise: strip the WEBVTT header and any NOTE/STYLE/REGION blocks and cue settings, number the cues sequentially (SRT requires an integer before each cue), and swap the period in each timecode for a comma. That is nearly all a converter does, which is why the round trip is essentially lossless for plain dialogue and can even run client-side in a browser. Tools like Subtitle Edit and ffmpeg handle it, as do many web converters.
The VisionTools Pro-e Project (the SITE meaning)
The other .vtt, and the name in this SITE’s database, is a VisionTools Pro-e Project from Crestron Electronics. VisionTools Pro-e is Windows software used to design the graphical interface shown on Crestron AV control touch panels: button layouts, pages, joins and feedback for a room-control system. The .vtt holds that project as a binary file, and it opens only in VisionTools Pro-e (later Crestron tooling superseded it). It is not text, does not begin with WEBVTT, and has nothing to do with subtitles. If your .vtt is one of these, opening it in a text editor shows binary data rather than readable cues, and you need Crestron’s software to work with it.
FAQ
What is the difference between VTT and SRT?
Both are timed-text subtitle formats and are almost identical. WebVTT (.vtt) is the HTML5 web-captions standard: it starts with a WEBVTT header and uses a period in timecodes (00:00:01.000). SRT has no header, numbers its cues, and uses a comma (00:00:01,000). WebVTT additionally supports styling, positioning and regions.
How do I know which kind of VTT I have?
Open it in a text editor. If the first line reads WEBVTT and you see timecoded caption text, it is a WebVTT subtitle file. If it shows binary data, it is likely a Crestron VisionTools Pro-e Project that needs VisionTools Pro-e to open.
Why are there strange characters in my WebVTT file?
That is an encoding mismatch. WebVTT must be UTF-8; re-save the file as UTF-8 in Subtitle Edit or a text editor so accents and non-Latin scripts render correctly.
References
- W3C — WebVTT: The Web Video Text Tracks Format
- MDN — Web Video Text Tracks Format (WebVTT)
- Subtitle Edit — editor and VTT↔SRT converter
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.