Manatee

How to convert VTT subtitles to SRT on a Mac

A VTT and an SRT file are both plain text, and the differences are mechanical: SRT wants a number above each cue, a comma instead of a period in the timestamps, no WEBVTT header, and no styling. Manatee converts a VTT to SRT in one drop, a one-line ffmpeg command does the same if you have it installed, and for a short file you can fix it by hand in TextEdit. Whatever you use, positioning and color tags in the VTT will not survive, because SRT has nowhere to put them.

What actually differs between VTT and SRT

Open both files in TextEdit and the resemblance is obvious. An SRT cue looks like this:

12
00:01:04,250 --> 00:01:07,900
Don't touch that.

The same cue in WebVTT:

WEBVTT

00:01:04.250 --> 00:01:07.900 line:90% align:center
Don't touch that.

The differences that a converter has to handle:

  • Header. VTT files start with the word WEBVTT, optionally followed by metadata lines. SRT has no header.
  • Cue numbers. SRT requires a sequence number on the line above each timestamp. VTT allows an optional identifier there, which may be a number, a word, or nothing at all.
  • Milliseconds separator. VTT uses a period (00:01:04.250). SRT uses a comma (00:01:04,250). Many players refuse an SRT with periods.
  • Hours. VTT may drop the hours when they are zero (01:04.250). SRT players expect hh:mm:ss,mmm.
  • Cue settings. VTT can append positioning after the timestamps (line:, position:, align:, size:). SRT has no equivalent.
  • Inline tags. VTT allows <c.classname>, <v Speaker>, <ruby>, and timestamps inside text for karaoke-style reveals. SRT supports only <i>, <b>, <u>, and, in some players, <font color>.
  • NOTE and STYLE blocks. VTT can contain comment blocks and embedded CSS. SRT cannot.

A good conversion keeps the timing and text exactly, converts the punctuation, renumbers the cues, and drops or simplifies everything else.

Why you would want SRT instead

VTT is the subtitle format of the web: browsers, streaming players, and most video platforms produce and consume it. SRT is the format of everything else. Media players, TVs, set-top boxes, video editors, and MKV and MP4 muxing tools all take SRT; many of them take nothing else. If you downloaded captions from a video platform or a meeting recorder and want to load them alongside a video in a desktop player, burn them in, or hand them to a translator, SRT is the safe target.

Convert with Manatee

Manatee accepts .vtt (and .srt, .ass, .ssa, .sub, .sbv) as input and has SRT as one of its fifteen conversion targets. It runs on macOS 12 Monterey or later and does the work on your Mac; nothing is uploaded.

  1. Open Manatee and choose Convert.
  2. Drop the .vtt file into the window. Several at once is fine.
  3. Choose SRT as the target.
  4. Click Convert. The new .srt is written next to the original, which is not modified.

Manatee handles the header, the renumbering, the comma, missing hours, and the removal of cue settings. Styling classes and speaker tags are stripped to plain text, and NOTE blocks are dropped. What it does not do: it will not shift timings, merge or split cues, translate, or fix typos. It is a converter, not a subtitle editor. If the VTT has overlapping cues or zero-length cues, they come through as they are, and some players will complain about them; that is a problem in the source file to fix in an editor.

Convert with ffmpeg in Terminal

If you already have ffmpeg installed (it is not part of macOS, but many developers have it via a package manager), it understands both formats:

ffmpeg -i captions.vtt captions.srt

ffmpeg renumbers cues, converts the timestamps, and drops cue settings. It keeps <i> and <b> tags and strips the rest. For a folder of files:

for f in *.vtt; do ffmpeg -i "$f" "${f%.vtt}.srt"; done

If Terminal says command not found, ffmpeg is not installed, and installing it is a larger job than the conversion. Manatee bundles ffmpeg inside the app, which is most of why its download is about 100 MB and also why you do not have to install anything else.

Convert by hand in TextEdit

For a file with a dozen cues, editing is quicker than any tool.

  1. Open the .vtt in TextEdit. If it opens as rich text, choose Format > Make Plain Text.
  2. Delete the WEBVTT line and any blank or metadata lines above the first timestamp. Delete any NOTE or STYLE blocks.
  3. Choose Edit > Find > Find and Replace. Turn on the regular-expression option if your TextEdit version shows one; otherwise do the next step manually. Replace the period before the three-digit milliseconds with a comma in every timestamp line. Be careful not to replace periods in the dialogue itself.
  4. Add the hours if they are missing, so 01:04.250 becomes 00:01:04,250.
  5. Delete anything after the second timestamp on each timing line (line:90%, align:center, and so on).
  6. Above each timing line, put a number, starting at 1 and counting up. Each cue must be separated from the next by exactly one blank line.
  7. Strip tags like <c.yellow> and <v Alice> from the text, keeping <i> and <b> if you want them.
  8. Choose File > Save, then rename the file’s extension from .vtt to .srt in Finder. Confirm when Finder asks whether you really want to change the extension.

Save as plain text with UTF-8 encoding (TextEdit’s default), or accented characters will show as garbage in the player.

Checking the result

Open the .srt in a media player alongside the video and scrub to a few points. If nothing shows, the most common causes are a period left in a timestamp, a missing blank line between cues, or a file saved as rich text with hidden formatting. If everything is offset by a few seconds, the video you are pairing it with has a different start point than the one the captions were made for; that needs a subtitle editor’s shift function, which none of the tools above provide.

If the subtitles are destined to live inside an MKV or MP4, see how to convert MKV to MP4 without losing quality; an SRT track can be muxed into MP4 as a text track, while the VTT format cannot.

Questions

Can I just rename .vtt to .srt?

Sometimes a player will tolerate it, because the formats are so similar, but the period-versus-comma difference trips up most of them. Convert properly; it takes a few seconds.

Will the colors and positions from my VTT be kept?

No. SRT has no standard for positioning, and color support is inconsistent. If those matter, you want the ASS format instead; see how to convert ASS or SSA subtitles to SRT for the same conversion in the other direction.

My VTT came from an automatic transcription and has one cue per word.

It will convert, but the SRT will be unpleasant to read. Merging word-level cues into sentences is an editing job, not a conversion job.

Does Manatee go the other way, SRT to VTT?

No. SRT is the only subtitle output target. VTT files can be read, not written.