How to add subtitles to a video for free (.vtt)
2026-07-25
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 lives | How to attach the .vtt |
|---|---|
| YouTube | Studio → Subtitles → Add → Upload file. YouTube accepts .vtt directly. |
| Your own website | A <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 editors | Import as a caption/subtitle file to position or burn in. |
| Upload 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.
- Choose closed captions for YouTube, your website and any long-form content. They are the accessible default: screen-reader-adjacent tooling, viewers in loud or silent environments, and non-native speakers all benefit, and accessibility standards (WCAG, and broadcast rules in many countries) are written around toggleable captions.
- Burn them in only when the platform gives you no caption slot — social
clips are the classic case. The workflow is the same up to the last step: generate the
.vtt, import it into the editor, render. Creators cutting short clips out of longer recordings do this constantly; OverlayMax is built for that clip-and-caption workflow on recorded streams.
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.
- Captions drift out of sync. The timestamps are generated from the audio of
the exact file you uploaded, so against that file they are right. Drift appears when the
.vttis attached to a different cut — an edited version with an intro added or dead air trimmed. Attach captions to the same cut you transcribed, or transcribe the final cut. Order matters: edit first, subtitle last. - Cues are too long to read. A fast talker can produce a cue that fills three lines. Players wrap the text, but if a specific cue bothers you, split it in a text editor: duplicate the cue, divide the words, and split the time range at roughly the point the sentence breaks.
- Wrong words in names and jargon. Product names, surnames and acronyms are
the usual casualties. Fix them in the transcript before downloading and every occurrence is
corrected at once; a find-and-replace across the
.vttis the after-the-fact equivalent.
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.