Back to all tools
Free · runs in your browser

SRT to VTT converter

Turn an .srt file into a WebVTT .vtt file in your browser — paste it or open it from disk, and the converted captions appear straight away. Nothing is uploaded: the parsing happens in this tab. Batch-convert a folder of SRT files at once, or go the other way to SRT and to plain text.

No upload — files are converted inside this tabBatch: convert as many files as you like
How do you want to load your subtitles?

The file is read with your browser’s FileReader and parsed in this tab. Nothing is uploaded — there is no server on the other end of this page.

Convert to

Everything here runs on your device. Nothing you paste is uploaded.

How to convert SRT to VTT

Three steps, and the whole thing happens on your own machine — there is no upload step and no queue to wait in.

  1. Paste the contents of your .srt file into the box above, or use open a file from your computer to load it from disk. For several files at once, switch to the Batch tab and select them all.
  2. Leave Convert to on WebVTT (.vtt) — it is the default. The converted captions appear as you go.
  3. Press Download VTT. The file is saved with the same base name and a .vtt extension: lecture-03.srt becomes lecture-03.vtt. In a batch, Download all saves every converted file one after another.

The same three steps run in reverse for VTT to SRT, and a third option writes the captions out as plain text with the timings dropped.

How to convert SRT to VTT by hand

An SRT file and a WebVTT file are both plain text, so you can do the conversion in any text editor. It is worth knowing how, because it tells you exactly what a converter is doing and it is faster than any tool for a single small file. There are only four changes.

  • Add the header. The first line of the file must be WEBVTT, followed by a blank line before the first cue.
  • Swap the comma for a dot in every timing line. SRT writes 00:00:01,000; WebVTT writes 00:00:01.000. This is the change people miss, and it is the reason a renamed .srt file silently fails to load in a browser.
  • Drop the cue numbers — or keep them. WebVTT treats the line above the timing as an optional cue identifier, so 1, 2, 3 are harmless. Removing them is tidier.
  • Save as UTF-8 with a .vtt extension. WebVTT is UTF-8-only; an SRT saved in Windows-1252 will show mangled accented characters once it is renamed.

Here is the same pair of cues before and after. SubRip:

1
00:00:01,000 --> 00:00:04,120
Hold the shortcut and start talking.

2
00:00:04,400 --> 00:00:08,900
The text lands in whatever field
your cursor is already in.

And as WebVTT:

WEBVTT

00:00:01.000 --> 00:00:04.120
Hold the shortcut and start talking.

00:00:04.400 --> 00:00:08.900
The text lands in whatever field
your cursor is already in.

One warning about doing it by hand at scale: do not run a find-and-replace of every comma with a dot. Caption text is full of commas, and you will rewrite the dialogue along with the timings. Only the commas inside timing lines should change — which is precisely the distinction the converter above makes, because it parses the timing lines rather than pattern-matching the file.

Batch convert SRT to VTT

One file is a two-minute job by hand. A season of episodes, a course backlog or a library of webinar captions is not. The Batch tab takes a multi-file selection — hold Shift or Ctrl/Cmd in the file picker — reads each file with your browser’s FileReader, converts them all, and lists them with an individual download button plus a Download all that saves them in sequence. Your browser may ask once for permission to save multiple files; that prompt is the browser, not this page.

A file that will not parse does not take the batch down with it. It is marked as failed in the list with the line number and the reason (“Line 6: expected a timing line like 00:00:01,000 --> 00:00:04,000…”), and every other file still converts. Switching the output format afterwards re-writes the whole list instantly, because the files are already parsed into memory — nothing is read from disk twice.

Practical limits: this is your CPU and your RAM, so a few hundred normal caption files are fine, and anything over 8 MB is skipped as a safety valve, since a subtitle file that big is almost always something else that got picked by mistake.

Nothing is uploaded

Most SRT-to-VTT converters are a form that posts your file to a server, converts it there, and gives you a link to download the result. That is a round trip your captions do not need to make. This page has no server on the other end of it: the file picker hands the text to the page from disk through FileReader, the conversion is a few hundred lines of JavaScript running in your tab, and the download button builds the result as an in-memory Blob and revokes the object URL once the save has started. Open your browser’s network panel and convert a file — you will see no request go out.

For subtitles this matters more than it sounds. Caption files routinely carry unreleased film dialogue under embargo, internal training material, customer interviews and medical or legal recordings. “We delete uploads after an hour” is a promise you have to take on trust, and it is not one you should have to accept in exchange for changing a comma to a dot. It also means the tool works on a plane: once the page has loaded, the conversion needs no connection at all.

SRT vs VTT: the differences that matter

SubRip (.srt) is the older format and the one almost every desktop player, editor and platform can read. A file is a run of numbered cues: an index, a timing line, one or more lines of text, a blank line. WebVTT (.vtt) is the format the HTML <track> element requires, so it is the one you need for captions on a <video> element on the web.

 SubRip (.srt)WebVTT (.vtt)
HeaderNoneWEBVTT on line one
MillisecondsComma: 00:00:01,000Dot: 00:00:01.000
Cue numbersExpectedOptional identifier
PositioningNot supportedCue settings (align:start, line:90%)
EncodingAnything, in practiceUTF-8 only
Best forPlayers, editors, platform uploadsHTML <track>, HLS streaming

The converter normalises all of that. Both formats are parsed into one internal cue model — a start time in milliseconds, an end time, and the lines of text — and the output is written from that model rather than patched with a search and replace. So an SRT that goes in messy comes out clean: indexes renumbered from one, timings padded to 00:00:00,000, blank lines where they belong. Both decimal separators are accepted on input whichever format the file claims to be, because plenty of files in the wild mix them.

VTT to SRT

Choose SubRip (.srt) under Convert to. The WEBVTT header is dropped, cues are numbered from one, dots become commas, and NOTE, STYLE and REGION blocks are removed — SRT has nowhere to put them. Cue settings after the end time are dropped for the same reason. That loss is real, so it is stated plainly rather than approximated.

SRT to TXT

Choose Plain text (.txt) to strip the timings entirely and get one line per cue — the fastest route from a video to show notes, a summary or a blog post. Tick keep a timestamp in front of each line if you want [mm:ss] markers preserved for reference.

Common questions

Will the timings shift?

No. Times are parsed to whole milliseconds and written back at the same precision, so a round trip in either direction is exact. If a source file uses one- or two-digit fractional seconds, they are padded to three (1:23.4 becomes 00:01:23.400), which is what every player already assumes.

Do styling tags survive?

Inline tags inside the caption text (<i>, <b>) are carried through untouched, because they are part of the text. WebVTT positioning settings and STYLE blocks are not, since SRT cannot express them.

Can I just rename the file extension?

No. Renaming subs.srt to subs.vtt leaves the file without a WEBVTT header and with commas in the timings, so a browser rejects it and the video plays with no captions at all. That failure is silent in most players, which is why it wastes so much time.

What if my file will not parse?

You get a specific error naming the line number instead of a blank screen. The usual causes are an arrow written as -> instead of -->, an end time earlier than its start, and a file saved in an encoding other than UTF-8, which arrives as unreadable characters. A missing blank line between cues is tolerated rather than rejected, and an arrow inside the caption text itself (“we went from 12 --> 48”) is treated as text, not as a new cue.

What about SSA, ASS or TTML?

Not supported. Those formats carry styling and positioning that SRT cannot represent, so a conversion would quietly throw information away.

Turning captions into something you can edit

Plain-text output is where a lot of people end up, and two follow-on steps are usually worth it. Send the text to the transcript cleaner to rejoin the lines that captions broke mid-sentence, then tidy the spacing and strip verbal tics with the text cleaner and check the length with the word counter.

Writing captions faster in the first place

If you write or correct caption text by hand, most of the time goes on typing, not on timing. VoiceSnap Pro is a dictation app for macOS and Windows: hold one keyboard shortcut, speak, and clean punctuated text appears in whatever field your cursor is already in — including the caption editor you already use. Filler words are stripped automatically, punctuation and paragraph breaks are added as you speak, and every dictation is saved to a searchable notes library.

It handles mid-sentence language switching, takes a custom vocabulary for the names and acronyms generic models get wrong, and is a one-time purchase rather than a subscription. Nothing you dictate is used to train AI models. The app has not shipped yet — join the waitlist to hear on release day.