SSubToolDesk
en
SRT → VTT

Convert SubRip (.srt) to WebVTT

Make an .srt file valid for the HTML5 <track> element and modern video players. WEBVTT header added, timecodes reformatted, nothing uploaded to do it.

Detected: …
Drop a file, paste, or edit directly
…

Your files never touch a server. Every conversion on this page runs locally in your browser using the JavaScript FileReader API. Nothing is uploaded, logged, or stored. Safe for confidential Zoom/Teams recordings, unreleased video, and legal interviews.

How the SRT to VTT conversion works

If you've ever tried to drop an .srt file straight into an HTML5 <track kind="captions" src="captions.srt"> tag, you've likely discovered browsers simply ignore it. The <track> element (and the native captions menu every modern browser builds around it) only understands WebVTT. SubRip, despite being the most widely supported format among desktop players and editors, isn't part of the HTML5 spec at all.

The fix is mechanical but exacting: WebVTT requires a literal WEBVTT line at the top of the file, and every timecode's millisecond separator must be a period instead of SRT's comma (00:00:09,400 → 00:00:09.400). Get either detail wrong and the browser will silently fail to render captions with no error message. SubToolDesk's converter parses your SRT locally, rebuilds it with a valid header and corrected timecodes, and renumbers cues cleanly, all inside your browser tab.

Step-by-step instructions

  • Drop your .srt file onto the converter above, or paste its contents into the left pane.
  • Confirm the format badge detects SRT.
  • Press Download to save a valid .vtt file, named to match your original file.
  • Reference it from a <track> element: <track kind="captions" src="/captions.vtt" srclang="en" label="English">.

Before and after

SRT input:
1
00:00:09,400 --> 00:00:12,900
Revenue was up eight percent.

VTT output:
WEBVTT

1
00:00:09.400 --> 00:00:12.900
Revenue was up eight percent.

Why this matters for web developers

Accessible, captioned video is both a usability and compliance requirement for most public-facing sites (WCAG 2.1 success criterion 1.2.2 requires captions for prerecorded media), and the <track> element is the standards-based way to deliver them without a third-party video platform. If your editing pipeline (or a freelancer) only hands you .srt files, converting them here gets you back to a drop-in WebVTT asset in seconds, without installing ffmpeg or writing a conversion script.

Processed where you are, not on our servers

Because this is a plain-text reformat, no media file is ever touched or uploaded, only the caption text, and only inside your own browser tab. That matters as much for an internal product demo video as it does for a public marketing page.

Using the result in a <track> element

Once you've downloaded the converted file, add it to your <video> markup with a <track> child element:

<video controls>
  <source src="demo.mp4" type="video/mp4">
  <track
    kind="captions"
    src="/captions.vtt"
    srclang="en"
    label="English"
    default>
</video>

The default attribute tells the browser to enable this track automatically; omit it if you're offering multiple language tracks and want the viewer to choose. Browsers validate the WEBVTT header strictly: a missing or misspelled header is the single most common reason captions silently fail to appear even when the rest of the file is well-formed.

Who this converter is built for

Front-end and full-stack developers adding captions to a self-hosted video player are the primary audience, but video production teams delivering assets to a developer also use it to hand over something that's guaranteed to work rather than leaving format conversion as an open task on someone else's plate. It's equally useful for open-source documentation sites embedding screencasts, internal tools teams captioning training videos for accessibility compliance, and anyone migrating a video library from a platform that exported SRT to a custom player that expects native browser captioning.

What doesn't change in the conversion

Dialogue text and millisecond-precision timing carry over exactly as written. This is a structural reformat, not a re-transcription. If your original SRT has typos, those typos will be in the VTT output too; this tool fixes format compliance, not content accuracy. If you'd also like to clean up speaker labels or inline styling tags while you're converting, the Strip Speaker Labels and Strip Formatting Tags toggles above apply to the cue text before it's rewritten into WebVTT syntax, so you can combine format conversion with content cleanup in a single pass instead of running two separate tools.

Frequently Asked Questions

Why does my browser reject an .srt file in a <track> element?

The HTML5 <track> element requires WebVTT specifically. Browsers do not natively parse SRT for video captioning. Converting to .vtt is required to use the native captions API at all.

What exactly does the converter add to make it valid WebVTT?

It prepends the required WEBVTT header line, switches every timecode's millisecond separator from a comma to a period, and renumbers cue identifiers: the three things SRT is missing for a browser to accept the file.

Can I add cue positioning or styling after converting?

Yes, this tool produces clean, standards-compliant WebVTT text output, which you can further hand-edit to add cue settings (like align or position) or <v> voice tags afterward, since the base structure is already valid.

Will the captions still sync correctly after conversion?

Yes, timing is preserved to the millisecond, only the separator character and header change, never the actual timestamp values.

Does this work for subtitles exported from Premiere or DaVinci Resolve?

Yes. Both export standard SRT, which this parser reads natively regardless of which software generated it.

Do any browsers actually support .srt directly, even though it's not spec-compliant?

Chrome and Firefox have added non-standard support for SRT via the TextTrack API, but it's inconsistent and not guaranteed across browsers or versions. The HTML5 spec only requires WebVTT, so converting to .vtt is the only way to guarantee captions render everywhere.