How to Convert YouTube Subtitles to SRT
Convert timed YouTube captions to valid SRT while preserving cue text, order, and timing precision.
SRT is simple enough to read, which makes conversion look like a punctuation change. A reliable conversion also handles headers, cue identifiers, WebVTT settings, multiline text, malformed timestamps, and overlapping cues without silently losing content.
Recognize the source format
A YouTube WebVTT export starts with WEBVTT and uses a dot for milliseconds:
WEBVTT
00:00:05.200 --> 00:00:08.440 align:start position:0%
<c.colorCCCCCC>Welcome to the channel.</c>
SRT uses numbered blocks and a comma before milliseconds:
1
00:00:05,200 --> 00:00:08,440
Welcome to the channel.
The cue setting align:start position:0% has no direct SRT equivalent. WebVTT class markup may also be unsupported by the destination. Decide whether to strip it, convert meaningful emphasis, or preserve a separate VTT master.
Conversion procedure
- Save an untouched
.vttsource. - Parse cues rather than globally replacing every period with a comma.
- Remove the
WEBVTTheader and metadata blocks that SRT cannot represent. - Convert timestamp punctuation only inside timing lines.
- Generate sequential cue numbers.
- Preserve multiline cue text and blank lines between cues.
- Validate the first, middle, and last cue against the video.
The browser-based VTT to SRT converter performs the core structural conversion locally. Review styled cues and unusual positioning after conversion because no tool can invent an SRT equivalent for every WebVTT feature.
Why a global find-and-replace is dangerous
Replacing every dot with a comma corrupts normal text, URLs, decimal numbers, and abbreviations:
Visit docs.example.com at 3.5 seconds.
Only 00:00:05.200 should become 00:00:05,200. A parser identifies timing lines and leaves caption text alone.
Validate the output
Check that every block contains a number, a valid time range, text, and a blank separator. Start times must be earlier than end times. Sequence numbers should increase without duplicates. UTF-8 text should survive unchanged.
Before:
00:01:12.040 --> 00:01:15.500
The café closes at 6 p.m.
After:
24
00:01:12,040 --> 00:01:15,500
The café closes at 6 p.m.
The accented character and the period in p.m. are text; neither should change.
Timing and text problems are separate
Format conversion does not fix a cue that starts too early, overlaps another cue, or contains repeated auto-caption fragments. Run subtitle timing and synchronization checks and the subtitle quality checklist after conversion. If the source contains rolling repetitions, clean it before deciding whether to preserve the original cue boundaries.
Import failures to troubleshoot
If an editor rejects the file, check for a missing comma in milliseconds, an invalid hour field, absent blank lines, a byte-order mark the application mishandles, or cue text placed on the timing line. If only some cues disappear, locate the first malformed block; many importers stop parsing at that point.
When the destination is a web player, SRT may be the wrong final format. Read SRT vs VTT and keep VTT if positioning, metadata, or native <track> delivery matters. Conversion should serve the delivery system, not merely change an extension.