• Free
  • No watermark
  • Nothing uploaded
  • No signup

Free Subtitle Generator: Auto Captions, Burned In

Drop in a video and Whisper, OpenAI's open speech model, writes word-timed captions right in this browser tab. Pick a style, fix any word, and download an MP4 with the captions burned in, ready for TikTok, Reels, Shorts or X. Or grab an SRT or VTT file.

MP4, MOV or WebM. Your video stays on your device.
  1. Choose a video
  2. Make captions
  3. Style & fix
  4. Download

or drop it here. MP4, MOV, WebM and other videos your browser can play. Audio files work too (captions only).

Your video never leaves your device. On first use the browser downloads the speech model from Hugging Face and the ONNX runtime from jsDelivr. No audio, video or text is sent to them, or to us.

How to generate subtitles for a video

  1. Choose a video. It plays right here, and nothing is uploaded.
  2. Pick a model and the spoken language. Base is a good start; Small is more accurate, especially for languages other than English.
  3. Press Make captions. The first run downloads the model; after that, captions appear part by part on the video.
  4. Pick a caption style, position and size. Vertical videos start with the big Shorts pop style, where the word being said lights up.
  5. Play the video and fix what's wrong: edit text, type new times, split, merge or delete lines, or use Find & replace for a name Whisper misheard.
  6. Press Download video with captions for an MP4 with the captions burned in, or download an SRT or VTT file.

How it works, and what stays private

Captions come from Whisper, the speech recognition model OpenAI released as open source in 2022, run by Transformers.js and ONNX Runtime Web inside your browser tab. The page reads the audio track from your video, transcribes it with word-level timings, and groups the words into captions using your layout settings. The video plays from your own disk; nothing about it is sent anywhere.

What the page does download, on first use only:

  • The model, from Hugging Face (huggingface.co). The browser keeps the files, so the next run starts without downloading them again unless the browser clears its storage.
  • The ONNX runtime, from jsDelivr (cdn.jsdelivr.net). The WebAssembly engine that runs the model, about 21 MB.
  • Your draft and the MP4 stay on this device. The captions you are working on are kept in this browser's storage so a reload doesn't lose them, and the captioned video is encoded right here.
  • Nothing of yours goes out. Your video, its audio and the captions are never sent to Hugging Face, jsDelivr or EasyTest. Google Analytics counts page views and that a run or download happened (with the model name, never the text), and Google AdSense shows ads outside the tool.

With WebGPU, Whisper runs on the graphics chip, which is usually much faster than the processor-only WebAssembly (WASM) path that every browser can use. The tool shows which one yours will use.

Choosing a model

ModelDownload (WASM)Download (WebGPU)Use it for
Tiny45 MB124 MBA fast first draft of clear English
Base81 MB211 MBMost talking-head videos with clean audio
Small253 MB591 MBOther languages, accents, background music
Large v3 Turbo1.1 GB2.9 GBThe best accuracy here, on a desktop with plenty of memory

Bigger models make fewer mistakes, but they download more, use more memory and run slower. Speed depends mostly on your device; when a run finishes, the tool tells you how long it took, which is a better guide than any general figure.

Caption length and timing

Short captions are easier to read. Netflix's English style guide allows 42 characters per line and two lines per caption, and its general requirements cap a single caption at 7 seconds, which is where this tool's defaults come from. Vertical videos start with one line of 18 characters, the short, punchy look short-video apps use; change it any time.

Each caption is cut from Whisper's word timings, so it starts when its first word starts and ends when its last word ends. Captions break at the end of a sentence, at a pause of 0.8 seconds or longer, or when the next word would go over your limits. A word timing can be off by a fraction of a second, so check the start of fast exchanges and fix a time by typing it.

How accurate are automatic subtitles?

Whisper was trained on 680,000 hours of audio from the web, and its accuracy varies a lot by language: the Whisper paper shows languages with more training data doing much better. We don't quote a percentage, because the audio matters more than the model. Expect to fix a few things:

  • Names and jargon, which often come out as similar-sounding common words.
  • People talking over each other, where usually only one voice is captioned.
  • No speaker labels. Whisper doesn't say who is speaking; add names or dashes yourself.
  • Music and silence, where the model can repeat itself or, rarely, caption words that weren't said. Delete those lines.

Tips for better captions

  • Choose the spoken language instead of detection, especially if the video opens with music.
  • If a video has loud music under the speech, Small handles it noticeably better than Tiny or Base.
  • Edit with the video playing: the current caption is highlighted in the list, and a click on any caption jumps there.
  • For vertical videos, Shorts pop or Word highlight with one short line reads best on a phone; keep captions in the middle so app buttons don't cover them.
  • Change the layout settings to try a different look without transcribing again. If you’ve already edited captions, press Re-split to apply them.

Frequently asked questions

Is my video uploaded?
No. The audio is taken from the video and transcribed inside this browser tab, and the captioned MP4 is made there too. On first use the browser downloads the Whisper model from Hugging Face (huggingface.co) and the ONNX runtime from jsDelivr (cdn.jsdelivr.net); nothing from your video is sent to them, or to us.
Is there a watermark?
No. The MP4 is made from your own video and the captions you see, with nothing added: no watermark, no logo, no end card. It is free and needs no account.
How do I put the subtitles into the video itself?
Press Download video with captions (MP4). The page draws the captions into every frame in the style you picked and saves an MP4 with the original sound, ready for TikTok, Reels, Shorts or X. Browsers that can't make MP4 files record a WebM in real time instead. For trimming, music or titles, import the SRT into the free Video Editor.
Should I use SRT or VTT?
SRT is the one most video sites and editors accept, including YouTube. VTT is the format web video players use with the HTML track element. They hold the same captions; only the header and the millisecond separator differ.
Can I change the line length after generating?
Yes. Change the characters per line, lines per caption or longest caption and captions you haven’t edited are rebuilt right away from the word timings, without running the model again. Once you’ve edited a caption, press Re-split to rebuild; Undo brings your edits back.
Which video formats work?
Anything your browser can play: usually MP4 (H.264) and WebM, and MOV files from phones often work too. If the preview stays black, the browser can't play that video codec; captions may still work if the audio can be read, but the MP4 export needs a video it can play.

Sources

  1. Radford et al. (2022), Robust Speech Recognition via Large-Scale Weak Supervision, arXiv:2212.04356 (the Whisper paper)
  2. OpenAI Whisper repository
  3. Netflix English (USA) Timed Text Style Guide (42 characters, two lines)
  4. Netflix Timed Text Style Guide: General Requirements (7-second maximum)
  5. MDN Web Docs: Web Video Text Tracks (WebVTT)

Your video never leaves your device. The model runs in this browser tab; the only downloads are the model files from Hugging Face and the runtime from jsDelivr on first use, and nothing you open or caption is sent anywhere.