JSON subtitle format
Overview
JSON is not a formal subtitle standard — each tool defines its own schema. But a common pattern has emerged: an array of cue objects, each with a start time, end time and text. This is useful for loading subtitles into JavaScript video players, processing them programmatically and exporting from subtitle tools.
- Extension:
.json - Complexity: Low
- Browser support: Native (JSON.parse)
Common schema
[
{
"id": "1",
"start": 1000,
"end": 4000,
"startTime": "00:00:01.000",
"endTime": "00:00:04.000",
"text": "Hello and welcome."
},
{
"id": "2",
"start": 5500,
"end": 8750,
"startTime": "00:00:05.500",
"endTime": "00:00:08.750",
"text": "This is the second cue."
}
]
Fields
- id — cue identifier (string).
- start — start time in milliseconds (integer).
- end — end time in milliseconds (integer).
- startTime — start time as
HH:MM:SS.mmmstring (optional; for human readability). - endTime — end time as
HH:MM:SS.mmmstring (optional). - text — dialogue (string).
Only start, end and text are needed to reconstruct a subtitle file. id is useful for tracking. startTime and endTime are helpful for humans but redundant.
Alternate schemas
Different tools use different schemas. Common variations:
- Field names:
begin/finishorfrom/toinstead ofstart/end. - Time units: seconds as floating-point numbers instead of milliseconds.
- Format: object with a
cuesarray instead of a top-level array. - Language: nested by language code for multi-language files.
Subtitle Convert accepts the common fields and falls back to time-string parsing when numeric fields are missing.
Use cases
- JavaScript video players — loading subtitle cues into an in-browser player.
- Data pipelines — processing subtitles programmatically without parsing text formats.
- Language learning apps — extracting dialogue with timing for exercises.
- Research — corpus analysis on dialogue data.
Converting between JSON and subtitle formats
- Subtitle to JSON — export SRT or VTT cues as JSON.
- JSON to SRT — rebuild SRT from JSON.