Convert · SRT → VTT
SRT to VTT converter
Converting SRT to VTT takes three edits and nothing else: a WEBVTT line goes on top, the comma before each millisecond becomes a dot, and every word and every timing survives untouched. Which lines move, where browsers insist on the newer format, how the track attaches to a video, and what this tool declines to do follow in that order.
Updated
Convert an SRT file to VTT in one pass
Drag the subtitle track onto the converter above, or paste its contents into the left pane, and the WebVTT version writes itself on the right as the text arrives. No queue, no account, no cap on how many tracks you run: the rewrite is ordinary JavaScript executing on your own machine. Copy the output, or save it with a .vtt extension.
Forty cue sheets go through as quickly as one, since nothing waits on a server. When the captions belong to a video rather than a file you already hold, pull a timed SubRip track from the link first and bring it back here.
The three lines that change
SubRip and WebVTT describe the same object — a list of cues, each with a start time, an end time and a line or two of dialogue — so the rewrite is small and lossless. Exactly three things move:
- A header appears. Every WebVTT document opens with the word
WEBVTT, and a player that cannot find it rejects the whole track. - Commas become dots. SubRip writes
00:01:04,500, WebVTT writes00:01:04.500— one character per cue, and the commonest reason a hand-edited file refuses to load. - Numbering turns optional. The index above a SubRip cue is compulsory; in WebVTT the same line is an optional identifier, which the converter keeps so both versions stay comparable.
Inline <i> and <b> markup survives, since both formats read it the same way. The SubRip format field by field shows where each of those rules comes from.
Where WebVTT is the only format accepted
WebVTT is a W3C specification and the sole caption format the HTML5 <track> element reads — Video.js, Plyr, JW Player and Vimeo inherit that rule from the browser rather than choosing it. Streaming supplies the second reason: an HLS playlist delivers subtitles as WebVTT segments, so adaptive playback needs this format and not SubRip. The specification is stricter in one useful way, because a WebVTT document must be UTF-8, which ends the mojibake that haunts twenty-year-old subtitle archives. It also carries positioning, regions and CSS styling the older format never had — what the WEBVTT header and cue settings actually do covers those extras.
Attaching the track to a video
On a web page the markup is one element: <track kind="subtitles" src="lecture.vtt" srclang="en" label="English" default> inside your <video>. Two server-side details break more tracks than anything in the cues. The MIME type is the first — the response has to arrive as text/vtt, which on nginx means the extension is listed in mime.types. The origin is the second: a track served from another domain needs CORS headers, or the browser drops it silently. When the captions button stays grey, check those two before suspecting the conversion.
What this converter will not do
It rewrites subtitle notation, and that is the whole promise. It does not translate the wording of a track you paste in, it refuses MP4 and MP3 because this is a text-to-text utility rather than a transcriber, and it never re-times, merges or splits cues — whatever pacing the source has, the output inherits. The narrowness is deliberate: what comes back is a valid WebVTT document with identical wording and identical timings, checkable in a text editor in seconds. Heading into Premiere or Resolve afterwards? Turn the track back into SubRip for an editor, the format most timelines still expect.
Frequently asked questions
How do I convert SRT to VTT?
Drag the .srt onto the converter above or paste its text. The WebVTT version appears on the right straight away, ready to copy or download as a .vtt. It costs nothing, needs no account, and runs entirely in your browser.
What is the difference between SRT and VTT?
Both are plain-text lists of timed cues. WebVTT opens with a WEBVTT header, separates milliseconds with a dot, must be UTF-8 and supports positioning and styling. SubRip numbers every cue, uses a comma, and is what desktop players and editing suites expect.
Do the timings change during conversion?
No. Start and end times are copied character for character, so a track in sync before the rewrite is in sync after it. Only the notation around those times is different.
Is my subtitle file uploaded to a server?
No. The whole rewrite is JavaScript running on your machine, so an unreleased cut or a confidential interview never travels over the network.