How to add subtitles to a video for free (.vtt)

A subtitle file is simpler than it looks: plain text, where each caption is a timestamp pair and a line of speech — 00:01:04.000 --> 00:01:07.200 followed by the words spoken in those 3.2 seconds. The format is called WebVTT and the file extension is .vtt. What makes subtitling tedious is not the format, it is producing hundreds of those timed cues by hand: subtitling a 10-minute video manually takes well over an hour. This guide does it in minutes, free, in two moves: generate the .vtt from the video's own audio, then attach it wherever the video plays.

Step 1: generate the .vtt from your video

Drop the video file on the WhoSayAh home page. Video containers — mp4, mov, mkv, webm — upload as-is, because only the audio track is read; there is no strip-to-audio step. Files up to 100 MB and 60 minutes are transcribed free, with no account, and both limits are checked at upload time so an oversized file is rejected in seconds rather than after a wait.

In the upload dialog, leave the language on auto-detect unless the video is short or noisy, and enter how many people speak. That second field matters for subtitles specifically: with speaker labels on, each cue is attributed to a voice, so the finished captions can say who is talking — the difference between <v Anna>We'll ship Friday and a bare line floating under a two-person interview. When the transcript completes, press Name speakers to replace Speaker 1, Speaker 2 with real names, then download the .vtt. The transcription guide covers the quality levers in detail — microphone distance and crosstalk decide far more than any setting.

Fix wording before downloading, not after: a correction made in the transcript lands in every cue automatically, while editing the .vtt by hand means hunting through timestamped blocks in a text editor. The file is deleted from our side regardless — the uploaded video as soon as the transcript is ready, the transcript itself after 24 hours, as the privacy policy commits.

Step 2: attach the .vtt where the video plays

WebVTT is the subtitle format the web standardised on, which is why one file covers every destination below without conversion.

Where the video livesHow to attach the .vtt
YouTubeStudio → Subtitles → Add → Upload file. YouTube accepts .vtt directly.
Your own websiteA <track> element inside HTML5 <video> — one line of markup.
Desktop players (VLC, mpv)Put the .vtt in the same folder with the same name as the video; it loads automatically.
Video editorsImport as a caption/subtitle file to position or burn in.
LinkedInUpload captions with the video (LinkedIn expects .srt — see the conversion note below).

On your own site, the whole integration is: <track kind="subtitles" src="talk.vtt" srclang="en" label="English" default> inside the <video> element. Every modern browser renders it natively — no JavaScript, no player library. Viewers toggle the captions with the player's CC button.

A note on .srt, the older subtitle format some platforms still expect: it is the same idea with a slightly different timestamp syntax (comma instead of dot for milliseconds, no WEBVTT header). Any free subtitle converter, or even a careful find-and-replace, turns a .vtt into an .srt in under a minute. Start from .vtt: it is the standard the web is moving to, and it supports speaker names in cues, which .srt does not.

Closed captions vs burned-in subtitles

A .vtt file gives you closed captions: a separate text track the viewer can turn on and off, which search engines can read, and which you can correct or translate later without touching the video. Burned-in (open) subtitles are pixels rendered into the frames — always visible, styled exactly as you like, but permanent and invisible to search.

There is also a search argument for the closed-caption route: caption text is indexable, so a 30-minute talk becomes 4,000+ indexable words describing exactly what the video contains. A video with captions ranks for what was said in it; a video without them ranks for its title.

If the captions look wrong

Three problems account for nearly every bad subtitle experience, and all three are fixable without redoing the transcription.

Subtitling more than one video

For a single talk, interview or lecture, the two steps above are the whole job — a 30-minute video is typically transcribed in well under 10 minutes, and attaching the file takes one. Doing it per-file stops making sense somewhere around "dozens of videos a week": a course catalogue, a meeting archive, a VOD library. At that scale the bottleneck is not transcription but keeping captions synced with a catalogue — every re-upload, every edit, every language. That is a platform problem rather than a file problem, and it is what CrocOTT handles: captions managed alongside the VOD catalogue itself instead of hand-attached one file at a time.

The per-file limits here are 100 MB and 60 minutes — the terms list them in full. A longer video splits cleanly: cut it by time marker (any free editor does this without re-encoding), transcribe the parts, and concatenate the .vtt files, offsetting the second file's timestamps by the split point.

Frequently asked questions — quick answers

Is the .vtt download really free?

Yes. Transcription, speaker labels and both downloads (.txt and .vtt) are free within the per-file limits, with no account and no watermark.

Do the subtitles include who is speaking?

Yes, when speaker labels are on. Cues carry the speaker name once you have named the voices, in WebVTT's standard voice-span form, so players that support it show who says each line — essential for interviews and panels.

Can I edit the subtitles afterwards?

A .vtt is plain text — any text editor opens it. But correct wording in the transcript before downloading when you can; it is faster than editing timestamped cues by hand.

What about videos of calls and meetings?

Same workflow — a recorded Meet or Zoom call is just a video file. The Meet guide and the Zoom guide cover getting the recording in the first place.

Generate a .vtt from your video