What actually differs
- First line
- VTT must start with WEBVTT, followed by a blank line. SRT has no header.
- Timestamps
- SRT: 00:01:05,200 with a comma. VTT: 00:01:05.200 with a full stop.
- Cue numbers
- Required in SRT. Optional in VTT, where they become cue identifiers.
- Hours
- Required in SRT timestamps. Optional in VTT.
- Extras
- VTT supports positioning, styles, comments and voice tags. SRT has none formally.
- Encoding
- VTT must be UTF-8. SRT is often UTF-8 but older files may use other encodings.
If you want the background first, what a VTT file is and what an SRT file is explain each format.
SRT to VTT by hand
- Open the .srt in a plain text editor.
- Make sure it's UTF-8. If accented letters look broken, fix the encoding before anything else; subtitles showing strange characters explains how.
- Add WEBVTT as the first line, followed by an empty line.
- Replace the comma in every timestamp with a full stop. With find-and-replace that supports regular expressions, search for (\d{2}:\d{2}:\d{2}),(\d{3}) and replace it with $1.$2 (some editors use \1.\2). Don't replace every comma in the file, or you'll change commas in the text.
- Leave the cue numbers; VTT accepts them as identifiers.
- Save as .vtt in UTF-8.
VTT to SRT by hand
- Delete the WEBVTT line and any NOTE or STYLE blocks.
- Remove cue settings after the timestamps (anything after the end time on the timing line, such as align:start or a line position).
- Make sure every timestamp has hours; add 00: in front of any written as minutes and seconds only.
- Replace the full stop before the milliseconds with a comma, again only in timing lines.
- Number the cues 1, 2, 3 and so on, each number on its own line above its timing line. If the VTT had text identifiers, replace them with numbers.
- Remove voice tags and VTT-only markup; keep simple italic tags if your player supports them.
- Save as .srt.
A trainer's old platform exported VTT; the new one wants SRT. For 40 lessons, she uses a subtitle editor's batch conversion rather than editing by hand, then spot-checks three lessons in VLC. The only casualty is positioning on two cues that sat at the top of the screen, which she notes for the editor.
Free tools that convert
- Subtitle editors. Subtitle Edit and Aegisub open either format and save as the other, and Subtitle Edit can batch-convert folders. Free subtitle editors compares them.
- ffmpeg. The command-line tool converts with a single command that takes the SRT as input and names a .vtt output; it handles headers and timestamps for you.
- A short script. For developers, reading cues and rewriting the timing line is a few lines of code in most languages.
Checking the converted file
After converting, open the new file in a player next to the video and spot-check the first cue, one in the middle and the last. Then look at the raw text once: the first line should be WEBVTT for a VTT, or 1 for an SRT, and timestamps should use the right separator throughout. If a platform rejects the file, the error message usually names a line number; open the file at that line and compare it with a working cue. How to edit an SRT file shows what a clean cue looks like, and SRT file not working lists the errors platforms report most often.
Skip conversion with mydubly
If you're making subtitles from scratch, you don't need to convert. Every run of the subtitle generator returns both SRT and VTT with identical cues, from a video (which stays on your device; only the audio is sent) or an audio file, in the spoken language or translated into one of 21 languages, for 1 credit per minute. The VTT generator and SRT generator pages cover each output.
What gets lost, and other pitfalls
- VTT to SRT drops positioning, styles, comments and speaker voice tags. If a cue was positioned at the top to avoid on-screen text, it moves back to the bottom.
- Global find-and-replace on commas or full stops changes the text. Limit replacements to timing lines.
- Byte-order marks and odd line endings can confuse strict parsers. Save as UTF-8 and, if a platform complains, try UTF-8 without a byte-order mark.
- Converting doesn't fix timing. If the subtitles were out of sync before, they still are; syncing subtitles with video covers the fixes.
- Converting an SRT to translate it is a different job: mydubly doesn't translate existing subtitle files; it makes translated subtitles from the speech.
Frequently asked questions
How do I convert SRT to VTT?
Add WEBVTT and a blank line at the top, change the comma before milliseconds to a full stop in every timestamp, and save as UTF-8 with a .vtt extension.
How do I convert VTT to SRT?
Delete the header and any NOTE or STYLE blocks, remove cue settings, add hours where missing, change full stops to commas in timestamps, and number the cues.
Can ffmpeg convert SRT to VTT?
Yes. Give ffmpeg the SRT as input and a .vtt file as output, and it writes a valid WebVTT file.
What do I lose converting VTT to SRT?
Positioning, styling, comments and voice tags, since SRT has no formal support for them.
Can I just rename .srt to .vtt?
No. A renamed file lacks the WEBVTT header and uses commas in timestamps, so browsers and strict players reject it.
Does converting change the timing?
No. Times stay the same; only the notation changes.
Can I convert many subtitle files at once?
Yes. Subtitle Edit has a batch convert tool, and ffmpeg or a short script can loop over a folder.