UltKit

SRT to VTT

Browsers play captions from a <track> element only in WebVTT, so an SRT file that works in VLC shows nothing on a web page. Convert it to VTT here and the same captions appear in any HTML5 player.

Subtitle Converter

or drop SRT, VTT, ASS … files here ·

Max 95 MB per file· Up to 20 files· Deleted after 30 minutes

Output

Files are processed on our servers and deleted after 30 minutes.

How to use this tool

  1. 1

    Drop the .srt files

    Add one subtitle file or one per language, up to 20 files of 95 MB each. Legacy encodings are detected and rewritten as UTF-8, which WebVTT requires.

  2. 2

    Adjust timing if needed

    Leave everything as it is for a straight conversion. If the captions run early or late on your video, enter seconds under Shift timing in Advanced settings.

  3. 3

    Convert to WebVTT

    Press Convert to WebVTT (VTT) and download the .vtt files. Upload them next to your video; our copies are deleted after 30 minutes.

Upload the SRT and press Convert to WebVTT (VTT). You get a file with the required WEBVTT header, period-separated milliseconds and UTF-8 text, ready for the <track> element, Video.js, Plyr or a course platform.

Why web players need VTT instead of SRT

SRT came out of the DVD-ripping world around 2000 and became the default for desktop players, editors and downloads. WebVTT was designed in 2010 for the web, starting from SRT's syntax, and the HTML standard made it the format of the <track> element. Chrome, Firefox, Safari and Edge all read it natively and none of them reads SRT through a track.

The two look almost identical in a text editor, which is why the difference catches people out. A VTT file must start with WEBVTT, must be UTF-8, and writes 00:01:05.300 where SRT writes 00:01:05,300. On top of that, VTT can carry positions, styling and comments that SRT never had. Going from SRT to VTT therefore loses nothing; the reverse trip through VTT to SRT drops those extras.

Once you have the .vtt, link it from your page as shown below. For a video in a format browsers do not play, such as a .mov from an iPhone, the guide on converting MOV to MP4 covers that half of the job.

HTML for a video with the converted English subtitles
<video controls src="lecture.mp4">
  <track kind="subtitles" src="lecture.en.vtt"
         srclang="en" label="English" default>
</video>

SRT vs VTT: every difference that matters

The same cue in both formats
SRTWebVTT
First line of the fileCue number `1``WEBVTT`
Timestamp`00:01:05,300``00:01:05.300` (hours optional)
Cue numbersRequiredOptional identifiers
Text encodingAnything, often legacy code pagesUTF-8 only
Position and alignmentNot standardizedCue settings such as `line` and `align`
Styling`<i>`, `<b>`, `<u>`, `<font>``<i>`, `<b>`, `<u>`, classes styled with CSS
MIME type on a server`application/x-subrip``text/vtt`

SRT

SubRip subtitles

SRT is the subtitle format of SubRip, a free Windows program that extracted subtitles from video around 2000. Each entry is a plain-text block with a number, a start and end time, and the caption text. It is the most widely supported subtitle format, accepted by VLC, YouTube, Facebook, video editors and smart TVs. SRT has only basic formatting and no positioning or styling standard.

Compression
–
Transparency
–
Animation
–
Introduced
SubRip
SRT converter

VTT

WebVTT subtitles

VTT is the Web Video Text Tracks format, developed by WHATWG and the W3C around 2010 for HTML5 video. It looks similar to SRT but adds a WEBVTT header and supports positioning, styling, speaker labels and metadata. Browsers use it for captions through the <track> element, and streaming platforms and YouTube accept it. Some desktop players and editors expect SRT instead.

Compression
–
Transparency
–
Animation
–
Introduced
2010 · W3C / WHATWG
VTT converter

HTML5 video only loads WebVTT through the track element, so SRT captions made for desktop players have to become VTT before they can appear on a web page.

VTT subtitles not showing in the browser

  • Captions work online but not when you open the HTML file from your disk

    Browsers block tracks loaded from file:// pages. Test through a local web server or on the real site.

  • The track loads from another domain and stays empty

    Add crossorigin to the <video> element and allow your site in the CORS headers of the server holding the .vtt.

  • The server sends the file as text/plain

    Configure it to serve .vtt as text/vtt; some players refuse other types.

  • Every caption appears a second too early

    Convert again with a positive Shift timing, such as 1, and replace the file.

SRT to VTT questions

What does the converter change in the file?

It adds the WEBVTT line at the top, replaces the comma before the milliseconds with a period, and saves the file as UTF-8. WebVTT allows cue numbers as optional identifiers, and the caption text itself is not changed.

Can I just rename .srt to .vtt?

No. Without the WEBVTT header and with commas in the timestamps, browsers reject the track or skip every cue. The file needs to be rewritten, which takes a second here.

Do italics and bold survive?

Yes, <i>, <b> and <u> exist in both formats. SRT's <font color> tag has no direct WebVTT equivalent, because WebVTT colors cues through CSS classes, so turn on Remove formatting tags if your file uses it heavily.

Which file does my course platform want?

Most learning platforms and web players take WebVTT, and many accept SRT as well. If an upload form lists only .vtt, convert here; if it lists only .srt, use VTT to SRT for the reverse.

Can I position captions at the top of the screen?

WebVTT supports it with cue settings such as line:0, which you can add in a text editor after converting. SRT has no standard way to store a position, so the converted cues start at the default position at the bottom.

How do I add several languages to one video?

Convert each language's SRT, then add one <track> per file with its own srclang and label. Viewers pick the language from the player's caption menu.