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

whisper.cpp JSON to SRT Online Converter

Convert local whisper.cpp CLI JSON files (-oj and -ojf) into formatted SRT or WebVTT subtitles. Parses integer millisecond offsets, timestamp strings, and segment timings locally with zero cloud uploads.

Quick Workflow Mode One click sets format, line width, line count, and speaker tags
No 2 MB cap / Zero upload
Detected: whisper.cpp JSON | 4 cues | Duration: 00:14.5 (14.5s) | Size: 1.1 KB
Line-Fit (<=42c) 100% (4/4)
Reading Speed 22.8 CPS (4 >20 CPS)
Words / Cues 46 words / 4 cues
Track Duration 00:14.5 (14.5s)
Auto-converts on edit or file drop

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

Showing 4 of 4 cues
# Start End Max Chars Speed Cue Lines
1 00:00:00,160 00:00:03,840 42 21.5 CPS
Local whisper.cpp builds write millisecond
offsets inside a transcription array.
2 00:00:04,220 00:00:07,190 39 23.9 CPS
Even when word timestamps are disabled,
long segments wrap on clean word
3 00:00:07,190 00:00:10,620 42 23.9 CPS
boundaries with proportional cue timing so
captions never overflow the video frame.
4 00:00:11,040 00:00:14,480 40 22.1 CPS
Apply a positive or negative millisecond
offset if your intro bumper shifted.

Browser-Local Pipeline

How It Works in 3 Steps

Pre-tuned for whisper.cpp JSON 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 whisper.cpp JSON

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

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

  • Recognizes whisper.cpp root objects containing transcription[] items where timings sit in offsets.from and offsets.to (integer milliseconds) alongside timestamps.from and timestamps.to ("HH:MM:SS,mmm").
  • Prioritizes integer millisecond offsets for drift-free timestamp math and falls back to parsing formatted timestamp strings when offsets are absent.
  • Splits long whisper.cpp decoder blocks across clean word boundaries with proportional cue durations so lines fit inside 42-character or 16-character safe zones.
  • Works offline once loaded, matching the local-first privacy workflow of users running quantized GGML and GGUF Whisper models on Apple Silicon or desktop GPUs.
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.cpp json to srt online

Which whisper.cpp CLI flags produce JSON compatible with this tool?
Both -oj (--output-json) and -ojf (--output-json-full) work out of the box. Drop the generated .json file straight into the browser dropzone to rewrap long segments into clean SRT or WebVTT cues.
Does the parser read whisper.cpp offsets or formatted timestamp strings?
It prioritizes numeric millisecond integers in offsets.from and offsets.to for exact arithmetic precision, and falls back to parsing timestamps.from and timestamps.to strings if offsets are absent.
Why convert whisper.cpp JSON instead of using whisper.cpp -osrt directly?
The built-in -osrt flag in whisper.cpp dumps fixed decoder segments that frequently span 80 to 120 characters on a single line unless you re-run inference with --max-len and --split-on-word. Converting the saved JSON lets you tune line width, line count, and sync offsets in real time without re-running model inference.

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