Your files never leave this device — 100% in-browser

SRT to VTT Converter

Convert SubRip subtitles to WebVTT for native HTML5 video players — parsed and rewritten locally, in milliseconds.

HTML5 players accept exactly one caption format, and it isn't SRT. Drop .srt files below: timestamps switch from comma to dot milliseconds, the WEBVTT header is added, and output is guaranteed UTF-8 — the two fixes that make captions actually appear in a web player.

Last verified 2026-08-15 — this tool passed 79 automated end-to-end checks

Drop .srt files here, or click to browse
converts to VTT · batch supported · encoding auto-detected
01 — PRIVATE
Subtitle files are parsed and rewritten entirely in your browser. Unreleased scripts and translations never touch a server.
02 — ENCODING-AWARE
UTF-8, UTF-16 and legacy EUC-KR files are detected automatically and always saved back as clean UTF-8.
03 — BATCH
Drop a whole season. Each episode converts in milliseconds and downloads separately with its cue count shown.

How to use

  1. Drop your file(s) into the box above — or click it to browse.
  2. Conversion starts immediately — no settings needed.
  3. Click Download on each finished file — or Download all (.zip) for a batch. Nothing was uploaded at any point.

Why players demand VTT instead of SRT

SRT (SubRip) is the lingua franca of downloaded subtitles, but the web standard is WebVTT: the HTML5 <track> element accepts only VTT, and so do Video.js, Plyr, JW Player, HLS players, and most embeddable web video stacks. If you hand them an SRT they silently show no captions — the single most common reason "subtitles don't work" on a self-hosted video.

The formats are close cousins, which is why conversion is lossless: VTT adds a WEBVTT header, switches the millisecond separator from a comma (00:00:01,000) to a dot (00:00:01.000), and drops the cue numbers. Your text, line breaks, and <i>/<b> styling all survive intact.

SRT vs WebVTT at a glance
SRTWebVTT
Standardized byDe-facto (SubRip, 2000s)W3C (for HTML5 video)
Timestamp00:01:02,500 (comma)00:01:02.500 (dot)
HeaderNoneWEBVTT line required
HTML5 <track>RejectedRequired format
Styling<i> <b> <u> tagsSame tags + optional CSS cues
PositioningNo standardCue settings (line/position)

Encoding is half the battle

Browsers require VTT to be UTF-8. A large share of SRT files downloaded from subtitle sites are actually Windows-1252, UTF-16, or EUC-KR — and feeding those to a <track> produces mojibake or nothing at all. This converter sniffs the real encoding first and always emits clean UTF-8, which fixes the second most common "captions are garbled" bug for free.

When NOT to convert SRT to VTT

  • Desktop players — VLC, mpv, PotPlayer and IINA all read SRT natively; converting gains nothing there.
  • YouTube uploads — YouTube accepts SRT directly; no conversion needed.
  • Burned-in subtitle workflows — tools like HandBrake take SRT; convert only when a web player is the destination.

Frequently asked questions

Will the timing change?

No — timestamps convert exactly, millisecond for millisecond. Only the separator character changes.

My SRT shows Korean/accented text as garbage — will this fix it?

Usually yes. The converter detects the file's real encoding (EUC-KR, UTF-16, Windows-1252) and re-encodes to the UTF-8 that browsers require.

Does this handle numbered and unnumbered SRT files?

Both. Cue numbers are optional in practice, and VTT drops them anyway.