Upload a JSON transcript, let the tool detect the schema, and export a clean SRT file with timestamps, text and optional speaker labels.
Your JSON file is converted locally in your browser. No upload required.
Automatically generated SRT files should be validated briefly and, for important videos, checked visually for timing.
Speech-to-text services such as OpenAI Whisper, AWS Transcribe and Google Cloud Speech-to-Text often export JSON instead of ready-to-use subtitles. These files may contain timings, words, sentences, alternatives and speaker data. This converter reads that structure, extracts start time, end time and text, and turns it into a standard SubRip subtitle file.
Raw JSON cannot be uploaded directly to YouTube or reliably imported into Adobe Premiere, DaVinci Resolve or Final Cut Pro. It first has to become a linear subtitle track: index number, start time, end time and visible text. The tool handles that conversion automatically.
This page goes beyond a tiny one-format converter by showing real API structures. You can quickly see whether your JSON file looks similar and why it can become a valid SRT file.
Whisper exports commonly include a segments array. Each entry usually has start, end and text, which maps cleanly to SRT subtitle blocks.
{
"segments": [
{ "start": 0.00, "end": 2.40, "text": "Welcome to the video." },
{ "start": 2.40, "end": 5.10, "text": "Today we walk through the workflow." }
]
}
1
00:00:00,000 --> 00:00:02,400
Welcome to the video.
2
00:00:02,400 --> 00:00:05,100
Today we walk through the workflow.
AWS Transcribe often returns individual words and punctuation in results.items. The tool groups those word items into readable subtitle blocks and can keep speaker labels when they exist.
{
"results": {
"items": [
{ "type": "pronunciation", "start_time": "0.00", "end_time": "0.55", "alternatives": [{ "content": "Hello" }], "speaker_label": "spk_0" },
{ "type": "pronunciation", "start_time": "0.56", "end_time": "1.10", "alternatives": [{ "content": "Maik" }], "speaker_label": "spk_0" },
{ "type": "punctuation", "alternatives": [{ "content": "." }] }
]
}
}
1
00:00:00,000 --> 00:00:01,100
spk_0: Hello Maik.
Google Speech-to-Text usually stores words under results[].alternatives[].words[]. Start and end values often use seconds with an s suffix, such as 1.200s.
{
"results": [
{
"alternatives": [
{
"words": [
{ "startTime": "0s", "endTime": "0.700s", "word": "This", "speakerTag": 1 },
{ "startTime": "0.700s", "endTime": "1.400s", "word": "works", "speakerTag": 1 }
]
}
]
}
]
}
1
00:00:00,000 --> 00:00:01,400
Speaker 1: This works
JSON is a data format, not a subtitle format. Different transcription providers use different field names. The converter checks common key variations and can also search nested arrays when your file does not exactly match the Whisper, AWS or Google layout.
| Field | Recognized keys | Use in SRT |
|---|---|---|
| Start time | start, start_time, startTime, from, begin | becomes the SRT block start time |
| End time | end, end_time, endTime, to, finish | becomes the SRT block end time |
| Text | text, transcript, content, sentence, value | becomes the visible subtitle text |
| Speaker | speaker, speaker_label, speaker_id, speakerTag | can be written as a prefix before the text |
Many transcription services provide speaker information as speaker, speaker_label, speakerTag or a similar field. When “include speaker labels” is enabled, the converter writes that information directly into the subtitle text.
SRT has no dedicated technical speaker field. In practice, speakers are stored as a text prefix, which is useful for interviews, podcasts, meetings, courses and support recordings.
1
00:00:00,000 --> 00:00:02,200
Speaker 1: Welcome to the conversation.
2
00:00:02,300 --> 00:00:04,800
Speaker 2: Thanks for inviting me.
The table below shows the structures this tool actively recognizes. It also tries to detect generic arrays with start time, end time and text automatically.
| Provider | Typical JSON structure | Supported? | Note |
|---|---|---|---|
| OpenAI Whisper | segments[] mit start, end, text | Yes, directly | Segment-based structure, ideal for direct SRT output. |
| AWS Transcribe | results.items[] plus optional speaker_labels | Yes, directly | Word-level data is grouped into readable subtitle blocks. |
| Google Speech-to-Text | results[].alternatives[].words[] | Yes, directly | Word arrays with second-based timings are grouped and sorted. |
| Generic JSON | Array or nested array with start, end and text | Yes, when fields exist | Works when clear timing and text fields are available. |
Yes. The conversion runs locally with JavaScript in your browser. Your JSON file is not uploaded to a server. That matters because transcripts often contain internal meetings, client material, draft scripts or unreleased video content.
The tool can only create subtitle segments when the JSON file contains usable timing data. A text-only JSON file without start and end times cannot be converted reliably to SRT because SRT requires timestamps. If your file contains only text, use a TXT to SRT converter or synchronize the text later in the Studio.
JSON transcripts often come from automatic speech recognition. It is worth checking the generated SRT for timing, empty blocks and readability before publishing.
Choose a JSON transcript from Whisper, AWS, Google or a similar speech-to-text system.
The tool recognizes known schemas and searches for segments, word lists, timing fields and optional speaker information.
Download the generated SRT file and, when needed, check it in the SRT Validator or Studio.
Typical exports from OpenAI Whisper, AWS Transcribe and Google Cloud Speech-to-Text are supported, as well as generic JSON arrays with start time, end time and text.
Yes. You can choose short, normal or long subtitle blocks. This is especially useful when AWS or Google JSON contains individual word data.
Yes. If speaker information exists in the JSON file, the tool can write it as a text prefix in the SRT output.
Yes. Conversion happens entirely in your browser. No file is uploaded to a server.
SRT needs a start and end time for every subtitle block. If the JSON contains only text, the required timing data is missing.
Yes. The tool groups individual words and punctuation into readable subtitle blocks automatically.
Review timing, sentence length, speaker labels and empty blocks. For technical issues, run the file through the SRT Validator.