Skip to content

SubRip SRT to JSON converter

SRT to JSON normalizes comma timestamps to dot milliseconds and writes one JSON object per cue.

  • Converted with Subtitle engine · nothing stored
  • Free: 5 conversions a day · 5 MB each
  • Higher limits →

From real runs

What you get — and what changes

  • Schema Changed

    The output is a JSON array of objects with index, start, end, and text keys for parsed SRT cues.

  • Timestamps Changed

    SRT times such as 00:00:01,000 became JSON strings such as 00:00:01.000.

  • Cue numbers Kept

    Numeric SRT cue ids became the index number in each JSON object.

  • Multiline cues Kept

    The first torture cue stored its internal line break as a newline escape in the text value.

  • Styling tags Kept

    The literal <i> tag and {\an8} override remained inside JSON text strings.

  • Overlaps Kept

    Overlapping cue times were written as given; our subtitle engine did not sort, merge, or reject them.

Sample conversions

Torture SRT to JSON

Input
Three-cue SRT with BOM, CRLF line endings, comma timestamps, overlapping cues, inline tags, a quote, and café.
Output
407 byte pretty JSON array; each object had index, start, end, and text keys, and the quote was escaped inside the string.

Sample SRT to JSON

Input
176 byte fixture SRT with three cues and ordinary comma-millisecond timing.
Output
365 byte JSON array with indexes 1, 2, and 3 and dot-millisecond start and end strings.

A real SubRip SRT → JSON run

We converted our SubRip SRT sample (176 B) with Subtitle engine on 2026-09-11. It took 1 ms and produced a 365 B JSON file, 2.1× larger than the input. The engine raised no warnings.

Input · sample.srt · 176 B

3 cues

Cues
3
Lines
9

Output · sample.json · 365 B

Array of 3 objects; keys: index, start, end, text

Records
3
Keys
index, start, end, text

First lines of the output

json
[
  {
    "index": 1,
    "start": "00:00:01.000",
    "end": "00:00:03.400",
    "text": "Previously, on the show…"
  },
  {
    "index": 2,
    "start": "00:00:04.100",
    "end": "00:00:06.900",
    "text": "We never found the second key."
  },
  {
    "index": 3,
    "start": "00:00:07.200",
    "end": "00:00:09.000",
    "text": "Then we look again."
…

Do it yourself

Python

bash
python3 - <<'PY'
import json, srt, pathlib
print(json.dumps([c.__dict__ for c in srt.parse(pathlib.Path('in.srt').read_text())], default=str, indent=2))
PY

The service schema is simpler than many libraries: index, start, end, and text strings only for SRT input.

SubRip SRT to JSON by API or MCP

The HTTP API and the MCP server run the exact engine this page uses (Subtitle engine); the response carries the same warnings the web converter shows. Check support first with GET /api/v1/pairs?from=srt&to=json.

curl
curl -X POST https://filetypeconverters.com/api/v1/convert \
  -H "Authorization: Bearer $FTC_API_KEY" \
  -F "file=@input.srt" -F "from=srt" -F "to=json" \
  --output output.json
API reference

When this is the wrong conversion

  • Use /convert/srt-to-csv when spreadsheet review is easier than JSON processing.
  • Use /convert/srt-to-txt when timing is noise and only a transcript is needed.
  • Do not use JSON directly for video upload platforms that expect SRT, VTT, or ASS files.

SubRip SRT to JSON questions

What JSON schema does SRT to JSON return?

It returns an array. Each SRT cue object contains index, start, end, and text, with start and end stored as strings using dot milliseconds.

Are styling tags escaped or removed?

They are JSON-escaped as string content, not stripped. The literal <i> tag and {\an8} text remained in our output.

Does the converter validate overlapping SRT cues?

No. The overlapping torture cues were serialized with their original start and end values. Downstream validators should enforce timing rules if needed.