Zero server upload / No 2 MB file cap / Instant Blob download

Whisper verbose_json to SRT Converter

Built specifically for OpenAI /v1/audio/transcriptions payloads captured with response_format set to verbose_json. Uses word-level floating-point timestamps when available and falls back to proportional segment splitting when only segments[] is present.

Quick Workflow Mode One click sets format, line width, line count, and speaker tags
No 2 MB cap / Zero upload
Detected: OpenAI Whisper verbose_json | 3 cues | Duration: 00:09.4 (9.4s) | Size: 3.1 KB
Line-Fit (<=42c) 100% (3/3)
Reading Speed 21.6 CPS (2 >20 CPS)
Words / Cues 25 words / 3 cues
Track Duration 00:09.4 (9.4s)
Auto-converts on edit or file drop

Cue Timing, Reading Speed & Line-Width Preview (First 25 Cues)

Showing 3 of 3 cues
# Start End Max Chars Speed Cue Lines
1 00:00:00,180 00:00:02,120 40 20.6 CPS
Welcome back to the engineering podcast,
2 00:00:02,940 00:00:05,120 42 28.4 CPS
today we convert raw Whisper JSON directly
inside your browser.
3 00:00:05,840 00:00:09,420 36 17.9 CPS
Word timestamps keep fast short-form
captions crisp and readable.

Browser-Local Pipeline

How It Works in 3 Steps

Pre-tuned for verbose_json to SRT with instant client-side conversion and zero file size caps.

  1. 01

    Paste or Drop Local ASR JSON

    Drop a .json file onto the highlighted upload box, paste raw API output, or pick one of five built-in ASR dialect samples. Multi-megabyte multi-hour files parse in local browser RAM with zero server upload.

  2. 02

    Select a Layout Pill & Check CPS Health

    Tap a one-click mode pill (Broadcast 42c x 2, TikTok/Shorts 16c x 1, Podcast Speaker Tags, or WebVTT Player) and watch the live Cue Health Summary flag >20 CPS fast cues and line-fit compliance.

  3. 03

    Verify Timings & Download Subtitles

    Inspect exact timestamps and per-cue character counts in the preview table, apply a positive or negative millisecond sync offset if needed, then copy or download .srt, .vtt, .txt, or .csv immediately.

Preset Specification & Field Mapping

JSON Schema Notes & Format Field Reference for verbose_json to SRT

Detailed parser behavior for this workflow alongside field references for all five supported speech-to-text JSON dialects.

Active preset rules (/whisper-verbose-json-to-srt/)

  • OpenAI Audio API verbose_json payloads store floating-point seconds inside top-level words[] when timestamp_granularities includes "word", alongside utterance-level blocks in segments[].start, segments[].end, and segments[].text.
  • Local Python whisper CLI and faster-whisper JSON dumps frequently nest words[] inside each entry of segments[] with leading whitespace attached to each token such as " world". The parser normalizes both top-level and nested word arrays automatically.
  • When an API call omits word granularity and only returns segments[], long 15-second Whisper segments are divided across word boundaries with timestamps interpolated proportionally by character length so cues stay readable.
  • Metadata keys returned by OpenAI such as task, language, duration, avg_logprob, compression_ratio, and no_speech_prob are tolerated without schema errors.
verbose_json Float seconds (1.62)

OpenAI Whisper & faster-whisper

  • segments[].start / end / text
  • words[].word / start / end
  • segments[].words[]

Uses exact word timings when present and falls back to proportional word-boundary splitting on segment-only payloads.

Diarized JSON Float seconds (4.36)

WhisperX + pyannote.audio

  • segments[].speaker
  • segments[].words[].speaker
  • word_segments[]

Splits cues on speaker turn changes and interpolates missing timestamps on unaligned digits or currency symbols.

-oj / -ojf Integer ms (4220)

whisper.cpp Local CLI

  • transcription[].offsets.from / to
  • transcription[].timestamps.from / to
  • transcription[].text

Prioritizes integer millisecond offsets for drift-free timing and falls back to HH:MM:SS,mmm string parsing.

REST / SDK JSON Float seconds (5.44)

Deepgram Nova-2 & Nova-3

  • results.channels[0].alternatives[0].words[]
  • results.utterances[].speaker
  • words[].punctuated_word

Prefers punctuated_word capitalization and maps integer speaker indices into clean Speaker N prefixes.

Utterances JSON Integer ms (6120)

AssemblyAI Transcripts

  • utterances[].start / end / speaker
  • utterances[].words[]
  • words[].text / start / end

Auto-scales integer millisecond word and utterance timings to seconds without colliding with float Whisper schemas.

4 Export Targets Comma vs dot ms

SRT, WebVTT, CSV & TXT Output

  • SRT: HH:MM:SS,mmm
  • VTT: WEBVTT + HH:MM:SS.mmm
  • CSV: index,start,end,speaker,text

Clamps negative sync offsets safely at 00:00:00,000 and guarantees minimum 50 ms cue duration for NLE timelines.

Internal Subtitle Tool Matrix

Switch between all six specialized Whisper and ASR subtitle converters with pre-tuned line widths, speaker diarization labels, and export formats.

Technical FAQ for whisper verbose_json to srt

Why save OpenAI Whisper output as verbose_json instead of requesting response_format="srt" directly?
Requesting response_format="srt" from the OpenAI API locks you into fixed long segment blocks with no word timestamps, no custom line-length control, and no raw transcript metadata. Saving verbose_json once lets you regenerate 42-character desktop SRT, 16-character mobile SRT, VTT, TXT, and CSV anytime without paying to re-transcribe audio.
Does OpenAI verbose_json include word-level timestamps by default?
Only when your transcription request passes response_format="verbose_json" together with timestamp_granularities=["word", "segment"]. If your saved JSON only has segments[], this converter still builds compliant SRT cues by splitting segment text and interpolating cue times.
How are Whisper leading spaces and punctuation tokens cleaned up?
Whisper tokenizers prefix most English words with a leading space and sometimes emit standalone punctuation entries. The cue builder trims leading line spaces and merges detached punctuation onto the preceding word before counting characters per line.

Why browser-local parsing beats 2 MB paywalled cloud converters

An hour-long Whisper transcript with word-level timestamps routinely reaches 3 MB to 8 MB of JSON. Cloud upload tools meter that file size behind subscriptions while exposing private audio transcripts to remote storage.

Capability JSON to SRT Local Engine Paywalled Cloud Converters
JSON file size limit No artificial cap; parses >5 MB multi-hour transcripts in milliseconds Blocks uploads over 1 MB or 2 MB without a paid plan
Data privacy & NDA compliance Zero bytes leave your browser tab; safe for client, legal, and medical audio Uploads raw transcript JSON to remote servers and third-party buckets
ASR dialect coverage Auto-detects OpenAI verbose_json, WhisperX, whisper.cpp, Deepgram, AssemblyAI Breaks when segments[] is missing or timestamps use integer milliseconds
Cue line-width wrapping Live 8 to 84 char wrapping, 1 or 2 lines per cue, word-level timing split Exports raw 100-character decoder blocks that overflow video frames
Speaker labels & sync offset Instant [SPEAKER_XX] prefixes, turn-boundary breaks, and millisecond offset Drops pyannote speaker fields or requires manual desktop retiming