How to convert SRT subtitles to WebVTT

Load the file into the Subtitle Toolkit — the format is detected automatically — and download it in the other format. Timings are held internally as integer milliseconds, so the conversion is exact and round-tripping does not accumulate drift.

Renaming the file does not work. A WebVTT file must begin with the literal line WEBVTT, and it must use a full stop rather than a comma before the milliseconds. A browser handed a renamed SRT usually displays nothing at all, with no error explaining why.

Last reviewed: 2026-09-19. Checked against the tool’s own source on that date.

The three differences that actually break playback

First, the header. A WebVTT file starts with the word WEBVTT on its own first line. SRT has no header and begins with the first cue. This single missing line is the most common reason a converted file silently fails in a browser.

Second, the millisecond separator. SRT writes 00:00:01,500 with a comma; WebVTT writes 00:00:01.500 with a full stop. A player expecting one and given the other typically rejects the cue.

Third, cue numbering. SRT conventionally puts an integer on its own line before each timestamp. In WebVTT that identifier is optional, and when present it may be any string rather than a number.

There are smaller differences that matter less often. WebVTT allows the hours component to be omitted, so 01:30.000 means ninety seconds. It also supports cue settings after the timestamp, such as line:90% align:center.

What survives the conversion and what does not

  • Timings survive exactly, in both directions. Both formats express integer milliseconds.
  • Line breaks inside a cue survive. They matter for readability and are preserved.
  • Cue settings such as line and align survive into VTT and are dropped going to SRT, because SRT has no way to express them.
  • WebVTT STYLE and REGION blocks are skipped rather than converted, for the same reason.
  • Cue numbers are renumbered contiguously from 1 on export, which fixes the gaps and duplicates that hand-edited files accumulate.

Validation happens on load

Every file is checked as it loads and the results appear above the preview. Each message names a specific cue number, because "this file is invalid" is useless in a file with nine hundred cues.

Errors are genuine breakages: a cue ending before it starts, a cue beginning before the previous one, a timestamp that could not be read. Warnings are technically valid but usually unintended: a zero-duration cue that will never appear, or two cues overlapping so both display at once.

A malformed cue does not abort the file. The bad block is reported and the rest still loads, so you see the scale of the problem in one pass instead of fixing errors one crash at a time.

Removing formatting while you are there

Subtitle files often carry markup: HTML-like tags such as italic and bold, WebVTT class and voice tags, and SubStation override blocks that control positioning.

The remove-formatting action strips all of these while preserving the line breaks inside each cue. Character entities such as & are deliberately left alone, because they are content rather than formatting.

Worked example: captions for an HTML5 video element

You have episode-01.srt from a transcription service and need captions for a video on a web page. The page uses a track element, which requires WebVTT.

The SRT file begins like this:

1 / 00:00:02,000 --> 00:00:04,500 / Welcome back to the show.

  1. Load episode-01.srt into the Subtitle Toolkit. The format is detected; the cue count and any validation messages appear.
  2. Fix anything reported as an error. Warnings about overlaps are worth a look but rarely block playback.
  3. Download as VTT.

Result: A file beginning with the line WEBVTT, followed by cues whose timestamps read 00:00:02.000 --> 00:00:04.500 with full stops. Cues are renumbered from 1, the text and its internal line breaks are unchanged, and the timings are identical to the millisecond.

Open the tool

Convert subtitles in the Subtitle Toolkit

Parses and rewrites in your browser, which matters for captions under embargo. It does not transcribe or translate.

What this does not cover

  • SRT and WebVTT only. ASS and SSA, TTML, SAMI and embedded broadcast caption formats are neither read nor written.
  • Cue positioning is preserved for VTT output only; exporting to SRT drops it.
  • STYLE and REGION blocks are skipped rather than converted.
  • This tool transforms subtitle files you already have. It does not transcribe audio and does not translate.
  • Cue numbers are always renumbered on export, so a file whose numbering was deliberately non-contiguous will lose that.