SRT and VTT both store the same thing â timed caption cues â but they're not interchangeable at the syntax level, and not every tool accepts both. Scriptube exports either one from the same underlying transcript, so the choice comes down to where the file is going, not what data you're missing.
If you've never looked closely at either format before, the differences are small enough to miss at a glance but large enough to break a strict parser â which is usually where "why won't this file load" problems come from.
SRT syntax
SRT (SubRip) numbers each cue, then gives a timestamp range using a comma for milliseconds:
1
00:00:12,400 --> 00:00:14,500
so today we're going to look at
2
00:00:14,500 --> 00:00:17,900
how timestamps actually work
VTT syntax
VTT (WebVTT) opens with a WEBVTT header, uses a period instead of a comma for milliseconds, and doesn't require cue numbers:
WEBVTT
00:00:12.400 --> 00:00:14.500
so today we're going to look at
00:00:14.500 --> 00:00:17.900
how timestamps actually work
The differences that matter
| SRT | VTT | |
|---|---|---|
| File header | None | WEBVTT required on the first line |
| Millisecond separator | Comma (,500) | Period (.500) |
| Cue numbers | Required | Optional |
| File extension | .srt | .vtt |
| Native web playback | Not supported directly | Required for the HTML5 <track> element |
Which one do you actually need?
- Uploading to YouTube Studio â YouTube Studio accepts several subtitle formats, SRT and VTT both among them, so either works; use whichever your workflow already produces.
- Embedding captions on your own website â VTT is what the browser's native
<track>element expects. SRT won't work there without converting it first. - Importing into a desktop video editor â SRT is the older, more broadly supported format across editing tools; check your specific editor if you're unsure which it expects.
If you don't know yet where the file is going, VTT is the safer default â it covers both web playback and most upload workflows that also accept SRT.
Overlapping cues get cleaned up either way
YouTube's auto-generated captions use rolling, overlapping cue windows that look fine in YouTube's own player but produce messy, duplicated-looking lines in a raw subtitle file. Scriptube cleans these up during export, so both the SRT and VTT you download are a clean, non-overlapping sequence of cues rather than a literal dump of YouTube's internal caption timing.
Converting between the two
Because both formats carry the same cue structure â a timestamp range plus text â converting one to the other is mostly mechanical: add or remove the WEBVTT header, swap the comma/period in the millisecond field, and add or drop cue numbers. If you only have one format handy and need the other for a specific tool, it's worth checking whether that tool can read the format you already have before converting, since both are widely supported for one-way import in most caption and editing software.
Exporting in a specific language
If a video has more than one caption track, pair the format parameter with language to get the SRT or VTT for a specific track rather than the default:
curl "https://scriptube.me/api/v1/transcripts/{batch_id}/export?format=srt&language=es" \
-H "X-API-Key: YOUR_API_KEY" -o captions_es.srt
This works the same for auto-translated tracks as it does for native ones â see translating a transcript into any language for how language selection and translation interact.
A worked example
Submit https://www.youtube.com/watch?v=dQw4w9WgXcQ, then export it both ways to compare:
curl "https://scriptube.me/api/v1/transcripts/{batch_id}/export?format=srt" \
-H "X-API-Key: YOUR_API_KEY" -o captions.srt
curl "https://scriptube.me/api/v1/transcripts/{batch_id}/export?format=vtt" \
-H "X-API-Key: YOUR_API_KEY" -o captions.vtt
Both files describe the exact same timed content â the only difference is the syntax wrapping it.
How to do it in Scriptube
- Process the video as usual, from the dashboard or the API.
- On the batch or video page, choose SRT or VTT from the export options, or call
/export?format=srt/?format=vttdirectly. - Upload or embed the file wherever it's needed â no further conversion required.
If you need a different export format entirely â plain text, CSV, JSON, or JSONL â see exporting transcripts to SRT, VTT, and TXT for the full rundown, or the developer schema reference if you're parsing exports programmatically.
Quick answers to common questions
Is one format more accurate than the other? No â both come from the same stored segments, so the cue text and timing are identical. The only difference is syntax.
Do I need to pick one and stick with it? No â you can export the same video as both SRT and VTT whenever you need either, at no extra cost beyond what the video itself already cost to process.
Can I get the raw timing data instead of a subtitle file? Yes â call the batch endpoint with include_segments=true and you get the same {text, start, duration} segments as a JSON response. The plain JSON, CSV, and JSONL exports don't carry timing themselves; that endpoint and the SRT/VTT exports are the two places timing lives. See every way to get timestamps out of a transcript for the full rundown.
Related reading
For every way to pull timed data out of a transcript, not just subtitle files, see YouTube transcript with timestamps: every way to get one. If the subtitles are going onto your own uploaded video rather than being used elsewhere, creating subtitles for YouTube videos using transcripts covers the upload steps in YouTube Studio.
A note on file size
Neither format adds meaningful overhead over the other â a VTT file's header is a single line, and dropping cue numbers in VTT roughly offsets the bytes SRT spends on them. For a long video, the practical difference in file size between the two is negligible; pick based on compatibility, not size.
Create a free account and export your first SRT or VTT file, or check the export endpoint in the API docs.