Convert SRT to VTT

Convert SubRip captions to WebVTT, or back again, with the timings preserved exactly

The tool loads here. It needs JavaScript, because the work happens on your device.

Your files and your privacy

Caption files are read and rewritten inside this browser tab and are never uploaded, which matters more than usual because subtitle files routinely carry unreleased dialogue. The page’s Content-Security-Policy limits connect-src to this origin, and Clear data discards the cues at once.

What this tool does

Convert a SubRip (.srt) caption file to WebVTT (.vtt) or back. The WEBVTT header is added or removed, the millisecond separator is switched between a comma and a full stop, and cues are renumbered contiguously. Timings are whole milliseconds, so a round trip is exact.

Conversion parses the file into cues held as whole milliseconds from zero, then writes them back out in the format you ask for, so the timings are exact in both directions. Writing WebVTT puts the required WEBVTT line at the top, uses a full stop before the milliseconds and emits each cue with no identifier line. Writing SubRip omits the header, uses a comma and numbers the cues from 1 with no gaps.

How to use it

  1. Select Choose an SRT or VTT file, or paste the cues straight in. The format is detected from the WEBVTT header, so you do not declare it.
  2. Read the cue count and the validation list: a cue whose timestamp could not be read is named by number and is not in the loaded file.
  3. Select Remove formatting tags first if you want plain text, which strips italics, voice and positioning markup.
  4. Set Convert to the format you want. It starts on the opposite of the one detected, because converting a file to the format it already is rarely the intent.
  5. Select Download converted subtitles, or Copy to paste the result somewhere else.

Example use cases

Supported input and output

Accepts

Produces

What this tool will not do

Common mistakes

Technical notes

Every timestamp is converted once into an integer number of milliseconds, and both writers format from that single representation, which is why converting back and forth returns the original timings instead of accumulating rounding. The parser is tolerant on input and strict on output: it accepts both separators whatever the file claims to be, accepts an omitted hours component so that 01:30.000 means ninety seconds, normalises CRLF and lone CR, strips a byte-order mark, and finds the timestamp line wherever it sits in the block.

Frequently asked questions

What actually differs between SRT and VTT?
A WebVTT file must begin with the word WEBVTT on its first line and SubRip has no header; WebVTT writes 00:00:01.500 with a full stop while SubRip writes 00:00:01,500 with a comma; and SubRip numbers each cue, while a WebVTT identifier is optional and need not be a number.
Can I just rename the file extension?
No. Renaming changes neither the missing header nor the comma before the milliseconds, and a browser handed such a file usually displays nothing with no visible error.
What happens to comments, styling and cue numbers?
NOTE, STYLE and REGION blocks are skipped on load and are absent from the output. Cue identifiers are discarded, so SubRip output is renumbered from 1 and WebVTT output has none. Cue settings written after the end timestamp are kept and re-emitted in both formats.