Formats

How to convert SRT to VTT, plain text or a document

Converting SRT to VTT, VTT back to SRT, or a subtitle file into plain text or a document: the exact edits, what each one loses, and when to use an editor.

Converting SRT to VTT is two edits: add the line WEBVTT and a blank line at the top of the file, and change the comma before the milliseconds in every timestamp to a full stop. Going the other way, strip the header and anything WebVTT allows that SRT does not, then put the commas back. Turning a subtitle file into plain text means deleting the counters and timestamps and repairing the sentence breaks by hand. Every conversion after the first loses something, and this page says what.

If you want the difference between the three formats rather than the mechanics, which export do you need covers that, and how to make an SRT file covers the format rules and the timing style guides.

SRT to VTT is a header line and a punctuation change

The WebVTT specification is a W3C document, and it is precise about the two things that matter here.

The file starts with a magic line. The spec lists the body as “An optional U+FEFF BYTE ORDER MARK (BOM) character”, then “The string WEBVTT”, then “Two or more WebVTT line terminators to terminate the line with the file magic and separate it from the rest of the body”. Two line terminators means the word on its own line followed by a blank line. You are allowed to put a label after it, since the spec permits “either a U+0020 SPACE character or a U+0009 CHARACTER TABULATION (tab) character followed by any number of characters that are not U+000A LINE FEED (LF) or U+000D CARRIAGE RETURN (CR) characters”. Most files skip that.

The timestamp separator is a full stop. A WebVTT timestamp ends with “A U+002E FULL STOP character (.)” and “Three ASCII digits, representing the thousandths of a second”. SRT uses a comma in the same position, so every timestamp line needs one character changed twice.

The counters are optional. The spec allows “Optionally, a WebVTT cue identifier followed by a WebVTT line terminator” before the timings, so the numbers your SRT already has are legal WebVTT. Leave them in. Deleting them is work for no gain.

Here is an SRT file:

1
00:00:04,000 --> 00:00:07,400
Thanks for making the time.

2
00:00:07,480 --> 00:00:11,200
I want to start with the part
you said was messy.

And the same file as VTT:

WEBVTT

1
00:00:04.000 --> 00:00:07.400
Thanks for making the time.

2
00:00:07.480 --> 00:00:11.200
I want to start with the part
you said was messy.

One warning about the punctuation change. Do not run a plain find-and-replace of every comma in the file, or you will rewrite the speech along with the timings. In an editor with regular expressions, search for (\d\d:\d\d:\d\d),(\d\d\d) and replace with $1.$2, which only touches digits arranged like a timestamp. In an editor without them, searching for a comma followed by three digits is close enough to check by eye on a short file.

VTT to SRT means deleting what SRT cannot carry

This direction is the lossy one, because WebVTT holds things SRT has no room for.

Delete the header line, including any label after the word WEBVTT, and the blank line under it.

Delete the blocks that are not cues. The spec says the area after the header can hold “Zero or more WebVTT region definition blocks, WebVTT style blocks and WebVTT comment blocks separated from each other by one or more WebVTT line terminators”. Those are the chunks starting REGION, STYLE and NOTE. None of them mean anything in SRT, and leaving them in puts stray words where a subtitle should be.

Delete the cue settings. After the end timestamp, WebVTT allows “one or more U+0020 SPACE characters or U+0009 CHARACTER TABULATION (tab) characters followed by a WebVTT cue settings list”, which is where positioning like line:90% or align:start lives. Cut everything after the end timestamp so the line stops at the last digit.

Put the commas back, the same replacement in reverse.

Pad short timestamps. WebVTT makes the hours optional, “required if hours is non-zero”, so a VTT file can legally say 01:23.000. An SRT timestamp is written in full, so that becomes 00:01:23,000.

Number the cues. If the VTT had no cue identifiers, add a line with a whole number above each timestamp line, counting up from 1.

Plain text is the counters and timestamps thrown away

Take the SRT, delete every line that is only a number, delete every line containing -->, delete the blank lines, and you have the words. The mechanical part takes a minute. The part that takes longer is that a subtitle file is broken into cues, and cue breaks are not sentence breaks. In the example above, “I want to start with the part” and “you said was messy” are two lines of one sentence, split to fit the line length that reads well on screen. Joined naively, you get a line break in the middle of a clause.

So the honest process is three passes: strip the counters and timestamps, join the lines, then read it through and put the paragraph breaks where the speaker actually changed subject. Nothing can do that last pass for you, because the information was never in the file to begin with.

A document for a client is plain text, then formatting

There is no such thing as SRT to Word. What you are doing is the plain-text conversion above, followed by the formatting decisions that make a transcript readable: speaker labels in bold at each change of voice, a paragraph every time the topic moves, and a heading per section if the recording has sections. If the client will need to find a moment in the audio, keep a timestamp at the start of each paragraph rather than on every cue, in [00:12:40] form. That is the one piece of the timing worth carrying across, and it is easiest to lift from the SRT before you strip it.

What each conversion changes and what it costs

From To What changes What is lost
SRT VTT WEBVTT header added, comma before the milliseconds becomes a full stop, counters kept as cue identifiers Nothing
VTT SRT Header, STYLE, REGION and NOTE blocks and cue settings removed, full stop becomes a comma, hours padded, cues numbered Positioning, styling, comments, any label on the header line
SRT or VTT Plain text Counters, timestamps and blank lines deleted, lines joined, paragraphs rebuilt by hand All timing, permanently
SRT or VTT Document Plain text first, then speaker labels, paragraphs and coarse timestamps All timing except what you copy across yourself
Plain text SRT or VTT Cue times have to be made against the audio Nothing, because there is nothing there to convert

A free subtitle editor is the safer route for anything long

Hand editing is fine for a two-minute clip. An hour of speech is a few thousand cues, and a replacement that matches slightly more than you meant is hard to spot and harder to undo. A subtitle editor reads the file into cues and writes it back out in the format you pick, so the header, the timestamp punctuation, the numbering and the padding all happen at once.

Two of them are free. Subtitle Edit is published on GitHub under an MIT licence, with builds for Windows 10 22H2 or newer, macOS 12 Monterey or newer, and Linux through Flatpak or native packages for Debian and Ubuntu, Arch, Fedora and openSUSE. Aegisub describes itself on its own site as “a free, cross-platform open source tool for creating and modifying subtitles”, released under “Open-source BSD-style licenses”.

The other way to avoid a conversion is to not need one. Our transcriber writes TXT, SRT and VTT from the same run, so if you still have the audio, taking all three costs nothing beyond the download.

If the recording is still on your machine, then, the shortest path is a fresh transcript with every export you want. Transcribe your file and download TXT, SRT and VTT. It runs entirely in your browser, so the audio never leaves your computer. It needs desktop Chrome or Edge with working WebGPU, handles English for now, and uses the base speech model, so read the transcript through before it goes to anyone else.

Frequently asked questions

Can I rename a .srt file to .vtt and be done? No. A browser loading a <track> element wants the WEBVTT magic line at the top and a full stop before the milliseconds. A rename gives you neither, and the file will not display.

Do WebVTT cues have to be numbered? No. The spec makes the cue identifier optional, so a VTT file with no numbers is valid. Going the other way, add them, because the counter is part of an SRT block.

Can I turn a plain text transcript back into subtitles? Not by conversion. The timing was thrown away and has to be created again against the audio, either by hand in a subtitle editor or by transcribing the recording afresh. How to make an SRT file walks through both.

What happens to italics when I convert VTT to SRT? The SRT format carries no styling of its own, so anything you keep is at the mercy of whatever plays the file. If the styling matters, keep the VTT and publish it on your own page instead.

Sources, checked 15 September 2026

srtvttsubtitlesconversion
FreeTranscribe

Written by the people who build FreeTranscribe. We test every claim on our own files and date every price. About the site.

Transcribe a file now. Free, in your browser.
Open the transcriber