VTT to SRT
Convert VTT to SRT subtitles. Cue timings are re-parsed and re-formatted exactly, not merely re-punctuated. ASS/SSA override tags ({\i1}, {\an8}, ...) are carried through as literal text, not re-rendered or stripped. Use Strip subtitle formatting for that. VTT cue settings (align, position, line, size, ...) are dropped, not preserved. This converter carries dialogue and timing, not layout. Runs on your device.
Runs on your device. The file is never uploaded.
VTT to SRT reads the cues of a WEBVTT file and writes numbered SRT cues, the hour padded to two digits and a comma before the milliseconds. A block holding no arrow, NOTE, STYLE or REGION among them, is stepped over rather than failing the run. Cue settings and identifier lines are dropped; SRT expresses neither.
Questions
What gets lost converting VTT to SRT?
Layout and identifiers. Cue settings written after the end timestamp, align, position, line, size and the rest, are dropped, and so is any cue identifier line before the timing. SRT has no syntax for either. What is carried is dialogue and timing, which is what SRT is for.
What about NOTE, STYLE and REGION blocks?
They are skipped rather than treated as errors. Any block without an arrow in it is passed over, so comments and styling blocks in a VTT file do not stop the conversion and do not appear in the SRT. The same rule keeps a stray comment block from stopping the conversion, which is why caption files exported by real tools usually convert without any editing first.
Why does it say "VTT: missing WEBVTT header on the first line"?
Because the file does not begin with WEBVTT, which every valid VTT file must. That usually means the file is SRT with the wrong extension, or that something trimmed the header. If it is SRT, use SRT to VTT instead, or rename it and use the subtitle tools that read SRT.
Does it renumber the cues?
Yes. VTT cues have no numbers, so SRT numbering is generated fresh, starting at 1 and counting up in file order. Timestamps get the comma before the milliseconds that SRT uses, with the hour padded to two digits. The numbering runs over the cues that were read, so blocks that were skipped leave no gaps in the sequence.
What is the output file called?
Your file name with .srt in place of the old extension, so captions.vtt becomes captions.srt. The SRT text is shown on the page as well, with a copy button. There is no zip and no bundling: one file in, one file out, and the tool takes a single file per run, so run it again for the next one.
How do I go the other way?
Use SRT to VTT. Round tripping a file through both tools gives you back your dialogue and timings, but not any cue settings the original VTT had, since those are dropped the moment the file becomes SRT. Both tools parse each timestamp into milliseconds and write it out again rather than editing punctuation in place, so nothing drifts across a round trip.