What this conversion actually changes
WebVTT and SRT describe cues the same way, so the conversion keeps every timing value and every line of text. What changes is the wrapper that makes a file SRT rather than VTT.
input.vtt output.srt
WEBVTT
1
intro 00:00:04,180 --> 00:00:07,920
00:00:04.180 --> 00:00:07.920 align:center Who's there?
Who's there?
Three things change and one is removed. The WEBVTT header is dropped. Millisecond separators switch
from period to comma. Cue identifiers — whether a name like intro or an auto number — are replaced by
SRT’s required sequential numbering. And cue settings (align:center above) are removed, because SRT
has no field for them. The tool reports each removal rather than discarding it quietly.
When you need SRT
Reach for SRT whenever the target isn’t a web page. Desktop players (VLC, MPV, MPC-HC), smart-TV media apps, and
home servers like Plex, Jellyfin and Emby all treat SRT as the default external subtitle. It’s also the format
most editors and muxers expect when you embed a subtitle track into an MKV or MP4. If you’re feeding an HTML5
<track> instead, you want SRT to VTT.
What’s preserved, what’s dropped
- Timing and text — preserved exactly; only the separator changes.
- Cue settings (
line,position,align,size) — dropped, with the affected cues listed. Most desktop players ignore positioning anyway. - STYLE / NOTE / REGION blocks — no SRT equivalent; excluded, with a notice.
- Inline tags —
<b>,<i>,<u>kept;<v Speaker>voice tags unwrapped to their text;<c.class>styling spans removed. - Entities —
&,<and friends are decoded back to plain&and<. - Hourless timestamps — VTT’s
MM:SS.mmmis expanded to SRT’s full00:MM:SS,mmm.
Limits
None worth noting. Everything runs in your browser, so file size is bounded only by available memory, and a feature-length file converts instantly. No upload, no account, and it works offline after the first load.