Accessibility & Standards

Captions

Definition

WCAG requires captions for prerecorded video with sound under success criterion 1.2.2, at Level A, and for live video under 1.2.4, at Level AA. On the web they normally arrive as a separate WebVTT file with a .vtt extension, referenced from a track element inside the video. SRT files are common in desktop players but browsers do not read them natively, so a .srt usually has to be converted before publishing. The other distinction is where the text lives: open captions are burned into the video frames and cannot be switched off, closed captions sit in the sidecar file and can be toggled, restyled and translated. Closed is the better default, because the text stays selectable, searchable and editable without re-encoding the video.

Why It Matters

Around 1.5 billion people live with some hearing loss, by WHO estimates, and the audience for captions is far wider than that — most feed video is watched with the sound off, and anyone in a shared office or on a train is in the same position. Accuracy is the part that gets skipped. Automatic speech recognition on clean studio audio is good; on two people talking over each other with product names in the mix it is not, and industry caption quality targets sit at around 99 per cent word accuracy for a reason. A five-minute demo has roughly 700 words in it, so 95 per cent accuracy means about 35 wrong words — enough to change what a viewer thinks your product does.

How It Works

A WebVTT file is plain text. The first line reads WEBVTT, then each cue is a timestamp range in the form 00:00:04.000 followed by an arrow and 00:00:07.500, with the caption text on the lines beneath and a blank line between cues. You reference it with a track element inside the video element, setting kind to captions, srclang to the language code, a human-readable label such as English, and the default attribute on the one you want enabled. Two serving details matter on a static host: the file needs the text/vtt MIME type, and if the caption file sits on a different origin from the page, the video element needs the crossorigin attribute and the caption host needs to send permissive CORS headers, or the track silently fails to load.

Real-World Example

A team publishes a 40 MB product demo as 'demo.mp4' at demo.99helpers.site, with 'demo-en.vtt' beside it in the same folder. Because both files sit on the same origin, no CORS setup is needed and the track loads on first play. The captions were machine-generated and then corrected by hand, which took about twenty minutes for five minutes of footage and fixed nine product names the recogniser had mangled. 99helpers serves both files as static assets with the right MIME types; it does not transcribe audio or generate captions, so you produce the .vtt with a captioning tool or service first and upload the result.

Common Mistakes

  • Publishing raw auto-captions without a correction pass — names, jargon and numbers are exactly the words recognition gets wrong, and exactly the words viewers need
  • Uploading an .srt and pointing a track element at it — browsers read WebVTT, so the track loads nothing and the video appears to have no captions
  • Captioning the speech and nothing else — a caption track has to name the speaker when it is not obvious and note meaningful sound, such as a door closing or an alarm
  • Serving the caption file from another domain without CORS — the video plays, the track fails, and the browser reports it only in the console

Related Terms

Put a file online in seconds

Drop in a document, an image, a page or a whole static website and share the link — free, with no build step and no server to set up.

Host a file free →