VTT to SRT Converter
Paste, drop, or upload your .vtt file. See exactly what VTT-only features get stripped. Download a valid .srt in seconds — runs in your browser, no signup, no server upload.
Need the other direction? SRT to VTT Converter →
VTT → SRT Converter
Paste VTT content on the left to see the converted output here.
Runs entirely in your browser — no signup, no upload to servers, no file limits. If you want subtitles generated from audio (not just converted between formats), upload audio here for accurate transcription in both .srt and .vtt formats.
Last verified July 13, 2026
How the conversion works (3 steps, transparent)
- Strip VTT header + metadata blocks. Remove the
WEBVTTheader line and anyNOTE,STYLE, orREGIONblocks — SRT doesn’t support any of these. - Convert timestamps. Change the millisecond separator from period to comma:
00:00:01.200→00:00:01,200. - Clean cue text and re-index. Strip inline VTT-only markup (
<v Speaker>,<c.className>, inline timestamps), then number cues sequentially starting at 1 (SRT requires cue numbers; VTT makes them optional).
What gets stripped (the honest disclosure)
Every other online converter silently drops VTT features without telling you. Our tool shows you exactly what was removed. Here’s the full mapping:
| VTT feature | Preserved? | What happens |
|---|---|---|
| Cue text | Yes | Copied verbatim |
| Timestamps | Yes | Period → comma |
| Multi-line cues | Yes | Line breaks preserved |
Bold / italic / underline (<b>, <i>, <u>) | Yes | SRT supports these tags |
<v Speaker> voice tags | Partial | Speaker name preserved as inline Speaker: prefix |
STYLE blocks (CSS) | No | Silently dropped — no SRT equivalent |
REGION blocks | No | Silently dropped |
Cue settings (align, line, position, vertical) | No | Silently dropped |
<c.className> class tags | Partial | Text preserved, tag stripped |
NOTE comments | No | Silently dropped |
| Inline timestamps (karaoke-style) | No | <00:00:03.000> stripped |
| Cue identifiers | No | Replaced with sequential SRT numbers |
| Chapter cues | No | SRT doesn’t support chapters |
yt-dlp / YouTube captions → SRT
yt-dlp defaults to WebVTTwhen downloading captions from YouTube. That’s why so many people end up needing VTT → SRT conversion. Typical yt-dlp command:
yt-dlp --write-auto-subs --skip-download "https://www.youtube.com/watch?v=..."
This produces a .vtt file (or .en.vtt if you specified a language). YouTube auto-captions use inline <c> class tags to mark the currently-spoken word for karaoke highlighting — those get stripped when converting to SRT, leaving just the text. Paste the file above and download the SRT.
If you don’t have the video but want a full transcript, see How to Transcribe a YouTube Video for all four paths (native panel, widget, download + upload, Chrome extension).
Video editor compatibility
Why VTT → SRT is the more common direction: most editors and players prefer or require SRT. VTT support is inconsistent.
| Editor / player | Accepts VTT? | Accepts SRT? |
|---|---|---|
| Adobe Premiere Pro | Partial (via Captions panel) | Yes (full) |
| DaVinci Resolve | No (native) | Yes (Timeline → Import Subtitles) |
| Final Cut Pro | Partial | Yes (Edit → Captions → Import) |
| Camtasia / TechSmith | No | Yes |
| CapCut | No | Yes |
| VLC | No (drops silently) | Yes (universal) |
| MPV | Yes | Yes |
| YouTube upload | Yes | Yes |
| Vimeo | Yes | Yes |
HTML5 <video> + <track> | Yes (spec-required) | No (not supported) |
If you’re going the opposite direction (need VTT for HTML5), see the SRT to VTT Converter.
How to convert VTT to SRT manually (no tool)
If you prefer to do it by hand — for a script, for education, or because you can’t use JavaScript — here’s the procedure:
- Delete the
WEBVTTheader line (the first line) - Delete any
NOTE,STYLE, orREGIONblocks (each starts with those keywords and ends at the next blank line) - Find
.in timestamps → replace with,(careful: only insideHH:MM:SS.mmmpatterns — use a regex like(\d{2}):(\d{2}):(\d{2})\.(\d{3})→$1:$2:$3,$4) - Number each cue sequentially starting at 1 (add the number on its own line before the timestamp)
- Strip inline VTT tags:
<v Speaker>...</v>,<c.className>...</c>, inline<00:00:03.000>timestamps - Save as UTF-8 without BOM (avoid Windows-1252 or UTF-8 with BOM — both cause player issues)
FFmpeg one-liner (for CLI users)
ffmpeg -i input.vtt output.srt
Works but strips VTT-only features silently — no report of what was lost.
Python (webvtt-py library)
pip install webvtt-py
python -c "import webvtt; webvtt.read('input.vtt').save_as_srt('output.srt')"Common issues + fixes
“Non-Latin characters garbled”
The file was saved as Windows-1252 or UTF-8 with a BOM. Open in VS Code, look at the encoding indicator in the bottom-right, click it, choose Save with Encoding → UTF-8 (not UTF-8 with BOM).
“Cue numbers missing / players won’t load the SRT”
SRT requires cue numbers (index each cue starting at 1); VTT makes them optional. Our tool adds them automatically. If your manual conversion skipped this step, add them.
“Voice tags left as <v>Speaker</v>literal text”
Some converters don’t parse the tag structure and leave the raw markup in the output. Our tool converts them to inline “Speaker:” prefixes so speaker attribution survives.
“Timing looks wrong after conversion”
Usually a broken source — a VTT file with malformed timestamps (extra spaces, wrong separators, missing digits). The tool skips invalid cues silently. Check the input VTT for consistency.
Have the audio? Skip the conversion — get subtitles fresh
If your goal isn’t “fix an existing subtitle file” but “get accurate subtitles for a video I have,” upload the audio instead of converting a stale/lossy caption file.
Our audio-to-SRT flow produces both .srt and .vtt from the same transcription pass — word-level timestamps, accurate to the millisecond, with speaker labels. ~1 minute processing per hour of audio. Free tier: 60 minutes, no credit card.
Related tools
- SRT to VTT Converter — The other direction — convert .srt to .vtt for HTML5 <video>, Podcasting 2.0, and modern web players.
- SRT Generator + Guide — Full SRT format explainer — anatomy, timing rules (BBC/Netflix), encoding gotchas, and 4 ways to generate.
- Text to SRT (free tool) — Have plain text (translated dialogue, script)? Convert to .srt with reading-speed-appropriate timings.
- Audio to SRT (real alignment) — Upload audio, get transcript + word-level timestamps. When timing has to match what was actually said.
- Video to SRT — Full video → .srt workflow. Extract, attach as soft-sub, burn-in with FFmpeg or NLE.