The Caption Track That Refuses to Load
You did everything right. You exported your video, you exported the captions, you uploaded both. The video plays fine. The captions? Nowhere. The little "CC" button is either missing or does nothing when you click it.
You open the caption file to check it isn't empty, and you're greeted by this:
```
WEBVTT
00:00:01.000 --> 00:00:04.000
Welcome back to the channel.
```
That word at the top — `WEBVTT` — is the whole story. You've got a VTT file, and the thing you handed it to was expecting something else. Here's what a VTT actually is, why it keeps not showing up, and how to fix it in about ten seconds.
What a VTT File Actually Is
VTT stands for Web Video Text Tracks, and the format's full name is WebVTT. It's a plain-text file — you can open it in any text editor — that tells a video player *what* text to show and *when* to show it.
It was built by the same people who build web browsers, specifically for HTML5 video. When a webpage plays a video with the native `
Every VTT file follows the same simple pattern:
```
WEBVTT
1
00:00:01.000 --> 00:00:04.000
This line shows for three seconds.
2
00:00:04.500 --> 00:00:07.200
Then this one takes over.
```
A required `WEBVTT` header on the first line, then a series of "cues" — each one a start time, an arrow, an end time, and the text to display. That's the entire format. It's readable, editable by hand, and tiny (a full hour of captions is usually well under 100 KB).
Why Your Captions Won't Show Up
VTT looks almost identical to SRT — the other big caption format — and "almost identical" is exactly why things break. Here are the usual culprits.
The player only speaks SRT
This is the big one. VTT is the language of *web browsers*. But a huge amount of software was built around SRT (SubRip), the older, more universal subtitle format. Desktop players, TVs, media servers like Plex, and most video *editing* software expect SRT and quietly ignore a VTT file — or refuse to import it at all.
The two formats are close cousins. SRT uses a comma before the milliseconds (`00:00:01,000`), VTT uses a period (`00:00:01.000`), and VTT adds that `WEBVTT` header plus optional styling. To a strict SRT parser, those differences are enough to make the whole file look like garbage. When that happens, the fastest fix is to convert it: run the file through VTT to SRT and hand the player the format it was actually waiting for.
The header is missing or the file was renamed
A WebVTT file that doesn't start with `WEBVTT` on the very first line is invalid, full stop. Browsers will reject it silently. This happens more than you'd think — someone opens an SRT file, saves it as `.vtt`, and never adds the header. Renaming the extension does not convert the file. The insides have to match the label.
The video and the caption file aren't linked
For HTML5 video, the VTT doesn't magically attach itself. It has to be declared in the page with a track element:
```
```
If that `
The timestamps drift or overlap
If your cue end times are earlier than their start times, or two cues cover the exact same instant, players get confused and may drop captions. A caption that flashes for a fraction of a second, or one that never disappears, is usually a timestamp problem inside the cue.
VTT vs SRT: Which One Do You Actually Need?
Short version:
VTT is technically the more capable format — it supports positioning, colors, and text styling that SRT can't touch. But that extra power is exactly what trips up simpler players. When in doubt about compatibility, SRT is the format that plays *everywhere*, even if it looks plainer.
When You Just Want the Words
Sometimes you don't want captions at all — you want the transcript. Maybe you're repurposing a video into a blog post, feeding the script to a summarizer, or just want to search the dialogue.
Reading a raw VTT by hand is miserable: every line is wrapped in timestamps and cue numbers. Strip all of that out and get clean, readable text with VTT to TXT. You get the spoken words, minus the timing scaffolding — ready to paste anywhere.
How to Open and Edit a VTT File
Because it's plain text, you already have everything you need:
One warning: don't try to "fix" a VTT by manually renaming it to `.srt`. The comma-vs-period difference and the leftover `WEBVTT` header will break a strict SRT parser. Use a real conversion so the timestamps and structure get rewritten correctly.
Bottom Line
A VTT file is a WebVTT caption track — the web's native format for subtitles and captions, and the thing your browser, YouTube export, or video tool tends to hand you by default. It's clean, tiny, and readable.
The trouble starts the moment it leaves the browser. Desktop players, TVs, media servers, and editing apps mostly want SRT, and they'll ignore a VTT without so much as an error message. So when your captions won't show up, the question is almost never "is the file broken?" — it's "does this player speak VTT or SRT?"
Match the format to the player. Keep VTT for the web, convert to SRT for everything else, and pull plain text when you just want the words. Ten seconds of converting beats an hour of wondering why the CC button does nothing.