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

Whisper JSON to SRT Converter

Paste or drop any ASR JSON transcript to generate broadcast-safe SRT, WebVTT, plain text, or CSV cues right in your browser tab. Auto-detects five speech-to-text schemas with word-boundary line wrapping, live CPS reading-speed checks, and no 2 MB cloud upload cap.

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

Zero network requests, zero cloud queues, and instant client-side Blob export.

  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.

Pre-Configured Subtitle Presets

Jump directly to a dedicated converter route pre-loaded with dialect samples, target line widths, speaker diarization tags, or HTML5 WebVTT headers.

Schema & Timing Field Guide

ASR JSON & Subtitle Format Field Reference

Exact JSON keys, timestamp units, and cue serialization rules recognized automatically by the client-side parser.

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.

Cue wrapping & boundary parsing behavior on JSON to SRT

  • Auto-detects five JSON transcript layouts by inspecting top-level keys including segments[] and words[] for OpenAI Whisper, speaker-annotated segments[] for WhisperX, transcription[] with offsets for whisper.cpp, results.channels[0].alternatives[0].words[] for Deepgram Nova, and millisecond utterances[] or words[] for AssemblyAI.
  • Formats SubRip cues using sequential 1-based indices, comma-separated HH:MM:SS,mmm timestamps, and blank-line separators compatible with Premiere Pro, DaVinci Resolve, Final Cut Pro, CapCut, and FFmpeg.
  • Wraps long transcript segments greedily on word boundaries up to 42 characters per line and 2 lines per cue, splitting cues earlier when speech pauses exceed 0.6 seconds or cue duration reaches 6 seconds.
  • Reads uploaded .json files directly through the browser File.text() API so multi-megabyte hour-long podcast and lecture transcripts convert in milliseconds without leaving your device.

Frequently Asked Questions

Which Whisper and ASR JSON dialects does this converter accept?
The parser accepts OpenAI Whisper verbose_json responses, faster-whisper and Whisper CLI JSON exports, WhisperX diarized JSON with speaker IDs, whisper.cpp -oj and -ojf output files, Deepgram Nova word-array responses, and AssemblyAI utterance or word transcripts.
Are my transcript JSON files uploaded to an external server?
No. Every parse, cue wrap, reading-speed calculation, timestamp offset, and Blob file download executes inside your local browser JavaScript runtime. Zero transcript bytes are sent over the network.
Can I convert Whisper JSON files larger than 2 MB or 5 MB?
Yes. Cloud subtitle sites often reject JSON files above 2 MB unless you buy a subscription. Because this workbench parses files locally in browser memory, multi-megabyte JSON transcripts from multi-hour recordings convert immediately at zero cost.
How does timestamp offset adjustment handle negative shifts at the start of a video?
Positive or negative millisecond offsets shift every cue start and end timestamp uniformly, while clamping any resulting negative timestamp at 00:00:00,000 so video editors and media players never reject the generated subtitle track.

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