Convert JSON to SRT
Have a transcription in JSON — from Whisper, whisper.cpp, a Hugging Face pipeline or another speech-to-text tool — and need subtitles? Paste it below to turn it into a SRT file. The tool reads the segments array of start, end and text, writes HH:MM:SS,mmm cues, and can regroup word-level timings if your JSON has them. Runs entirely in your browser.
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.
Transcription JSON, turned into subtitles
Speech-to-text tools return structured JSON, not subtitles. The shape most of them share is the one OpenAI's Whisper made common: a segments array where each item has a start and end in seconds and a line of text. This tool reads that array and writes a correctly formatted SubRip .srt, turning the floating-point seconds into HH:MM:SS,mmm timestamps.
It understands several common variants: OpenAI Whisper and the OpenAI audio API's verbose JSON, whisper.cpp's transcription output (with millisecond offsets), Hugging Face's chunks with [start, end] timestamp pairs, and a bare top-level array of segments. If word-level timestamps are present, word mode regroups them into caption-sized cues by a max-characters-per-line and max-seconds-per-cue rule.
If the JSON isn't a shape it recognises, it says so with a clear message rather than writing a broken file — so you know to check for a segments (or words) array. For Whisper specifically, the dedicated Whisper JSON to SRT and Whisper JSON to VTT pages cover the same ground. Everything runs on your device; nothing is uploaded.
FAQ
Which JSON structures are supported?
Whisper and OpenAI verbose_json (a segments array of start, end, text), whisper.cpp (transcription with millisecond offsets), Hugging Face pipelines (chunks with [start, end] timestamp pairs), and a plain array of segments. Word-level words arrays are read too.
What if my tool's JSON is different?
If there's no recognisable segments (or words) array, the tool tells you instead of guessing. Most speech-to-text exports can be coaxed into the Whisper shape — an array of objects with numeric start and end (seconds) and a text field.
How do word timestamps become subtitles?
In word mode the tool walks the word list and starts a new cue whenever the current line would exceed your max characters, or the cue would exceed your max seconds. That turns raw word timings into readable, well-sized captions.
Are the timestamps in seconds or milliseconds?
Whisper-style JSON uses seconds (a float like 12.48); the tool converts those to SRT's HH:MM:SS,mmm. It also handles whisper.cpp's millisecond offsets automatically.
Is my transcript uploaded anywhere?
No. Parsing and building the .srt happen entirely 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 .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.