Convert Whisper JSON to VTT

Transcribed with Whisper and need captions for web video? Paste the JSON below to turn it into a WebVTT .vtt file for the HTML5 <track> element — segment timings become HH:MM:SS.mmm cues, and word-level timings can be regrouped into readable captions. It runs entirely in your browser.

Drop your Whisper JSON file here
or click to choose a file · or paste the text below

By default each transcription segment becomes one cue with its original timing. Switch to word mode to rebuild cues from word-level timestamps, capped by characters per line and seconds per cue. It all runs in your browser — nothing is uploaded.

From Whisper's JSON to web captions

WebVTT is the caption format browsers understand for HTML5 <video>, but Whisper gives you JSON. This tool reads Whisper's segments array — each with a start, end (in seconds) and text — and writes a valid .vtt file, complete with the WEBVTT header and dot-style HH:MM:SS.mmm timestamps that WebVTT requires.

When your JSON includes word-level timestamps (from timestamp_granularities: ["word"] on the API or --word_timestamps True on the CLI), switch to word mode to rebuild the captions from the word timings, starting a fresh cue whenever a line would pass your character limit or a cue would run longer than your chosen duration. It's the quickest way to turn one long Whisper segment into a run of readable on-screen captions.

Everything happens on your device — the JSON is never uploaded. Prefer SubRip instead? Use Whisper JSON to SRT. Already have a .vtt and need SubRip? See VTT to SRT.

FAQ

Will the .vtt work with an HTML5 video track?

Yes. The output opens with the required WEBVTT header and uses the dot-before-milliseconds timestamp format (00:00:01.000) that WebVTT expects, so it drops straight into a <track> element.

What Whisper output do I paste?

The JSON transcript — the verbose_json response from the OpenAI audio API, or the .json file the open-source whisper CLI writes. Both hold a segments array of start, end and text, which is what this reads.

Can I regroup word timestamps into shorter captions?

Yes. Pick "Words (regroup by rule)" and set a max characters per line and max seconds per cue; the tool rebuilds captions from the word-level timings. If the JSON has no words array it'll say so and you can use segment mode.

The JSON isn't recognised — what does that mean?

It expects Whisper-style output with a segments array of { start, end, text } (it also reads Hugging Face chunks and whisper.cpp output). If the structure is different it tells you plainly instead of writing a broken caption file.

Is my transcript uploaded anywhere?

No. The JSON is parsed and the .vtt is built in your browser. Your transcript never leaves your device and no server is involved.

Can I batch convert multiple files at once?

Yes. Drop several Whisper .json files together and they'll each be converted and returned in a single ZIP, all in your browser. It's the same conversion as single files, just in bulk.

You might also need