How-to

How to convert SRT to VTT (and back)

Last updated: 2026-06-11

To convert SRT to VTT, make three edits: add the line WEBVTT (plus a blank line) at the top, change every timecode comma to a dot — so 00:01:14,500 becomes 00:01:14.500 — and optionally drop the integer cue numbers. Save as UTF-8 with a .vtt extension. Renaming the file alone does not work, because the missing header and comma timecodes leave it invalid in browsers.

Converting back to SRT reverses each step: remove the header and any styling blocks, turn dots back into commas, and add a sequential index above each cue. See SRT vs VTT for the full feature comparison.

The conversion steps

  1. 01

    Add the WEBVTT header

    Insert the word WEBVTT on the very first line, followed by a blank line, before the first cue. WebVTT files are invalid without this header; SRT files have no header at all, so this line must be added when converting and removed when converting back.

  2. 02

    Change comma milliseconds to dots

    In every timecode, replace the comma before the milliseconds with a dot. SRT writes 00:01:14,500; WebVTT writes 00:01:14.500. This applies to both the start and end time on each --> line. It is the single change that breaks playback if missed.

  3. 03

    Drop the cue numbers (optional)

    SRT requires a sequential integer index above each cue. WebVTT cue identifiers are optional, so you can keep them as identifiers or delete the number lines. Either is valid; leaving them in does no harm.

  4. 04

    Save as UTF-8 with the .vtt extension

    Save the file as UTF-8 (no BOM) and rename it from .srt to .vtt. The HTML5 track element and browsers will then read it natively. Renaming alone, without the header and dot changes, produces an invalid file.

Exact differences to change

Only three things differ between a valid SRT and a valid WebVTT file. The table lists each, what it looks like in both formats, and whether it is required.

ElementSRTWebVTTRequired
Header lineNoneWEBVTTYes
Millisecond separator, comma. dotYes
Timecode example00:01:14,50000:01:14.500Yes
Cue numberRequired integerOptional identifierNo
EncodingUTF-8UTF-8Yes

Before and after

Here is the same cue in both formats. The SRT version has an index and comma timecodes; the WebVTT version drops the number and uses dots, under the required header. Notice the text is identical — only the structure around it changes during conversion.

1
00:01:14,500 --> 00:01:17,000
Where are we going?
WEBVTT

00:01:14.500 --> 00:01:17.000
Where are we going?

Converting VTT back to SRT

Going the other direction, remove the WEBVTT header and any STYLE or NOTE blocks, change every dot millisecond separator back to a comma, and add a sequential integer index above each cue if the VTT had none. WebVTT cue settings such as line and position have no SRT equivalent, so they are dropped. The result opens in VLC and other desktop players. For the timing rules behind both, read subtitle timecodes explained.

Translate, then convert

If you also need another language, translate before you convert so the timing is only touched once. The SubLingo translator keeps the format and every timecode intact and changes only the text, so an SRT stays an SRT and a VTT stays a VTT. After translating, apply the three edits above if you need to switch formats. See how to translate an SRT file for the full workflow.

Key facts

  • Three edits convert SRT to VTT: add WEBVTT header, comma → dot, drop optional numbers.
  • Timecode change: 00:01:14,50000:01:14.500.
  • Renaming the extension alone leaves an invalid file in browsers.
  • Cue numbers are optional in WebVTT, so leaving them in is harmless.
  • Converting VTT → SRT drops cue settings and STYLE blocks (SRT has none).
  • Keep encoding as UTF-8 in both directions.

Definitions

WEBVTT header
The literal word WEBVTT on line 1, required for every WebVTT file. SRT has no header.
Millisecond separator
Comma in SRT (,500), dot in WebVTT (.500). The core conversion edit.
Cue identifier
An optional label above a WebVTT cue. SRT's integer index maps to it but it is not required.
Cue settings
WebVTT placement options (e.g. line:0 align:center). Lost when converting to SRT.
Sidecar file
A subtitle file stored next to the video; the extension (.srt / .vtt) tells players the format.

Related guides

FAQ

How do I convert an SRT file to VTT?+

Make three edits: add the line WEBVTT plus a blank line at the top, change every timecode comma to a dot (00:01:14,500 becomes 00:01:14.500), and optionally drop the cue numbers. Save as UTF-8 with a .vtt extension. Those changes turn a valid SRT into a valid WebVTT file.

Can I convert SRT to VTT just by renaming the file?+

No. Renaming .srt to .vtt leaves the timecodes using commas and the WEBVTT header missing, so browsers reject the file. You must add the header and change every comma millisecond separator to a dot first.

Do I have to remove the cue numbers when converting to VTT?+

No. WebVTT cue identifiers are optional, so the integer numbers from the SRT are harmless if left in. They simply become cue identifiers. You can keep them or delete them; both produce a valid file.

How do I convert VTT back to SRT?+

Reverse the steps: delete the WEBVTT header and any STYLE or NOTE blocks, change every dot millisecond separator back to a comma, and add a sequential integer index above each cue if the VTT has none. Save as UTF-8 with a .srt extension.

Will WebVTT cue settings survive conversion to SRT?+

No. SRT has no positioning or styling, so WebVTT cue settings (line, position, align) and STYLE blocks are dropped when you convert to SRT. Only the timecodes and text carry over.

Is the timecode the only thing I need to change?+

It is the change that most often breaks playback, but not the only one. You also need the WEBVTT header for the file to validate. The cue numbers are optional. Encoding should stay UTF-8 throughout.

Can I convert and translate at the same time?+

Translate within one format, then convert if needed. SubLingo translates the text only and keeps the format and timecodes intact, so translate first and convert second to avoid touching timing twice.

Translate your subtitles now

Drop in your .srt or .vtt file, pick a language, and download a synced translation. Every timecode is preserved line for line.

Translate a subtitle file