{"id":1639,"date":"2026-09-25T09:13:00","date_gmt":"2026-09-25T13:13:00","guid":{"rendered":"https:\/\/www.xconvert.com\/blog\/?p=1639"},"modified":"2026-09-01T21:41:38","modified_gmt":"2026-09-02T01:41:38","slug":"convert-srt-to-vtt","status":"publish","type":"post","link":"https:\/\/www.xconvert.com\/blog\/convert-srt-to-vtt","title":{"rendered":"Convert SRT to VTT: WebVTT Captions for HTML5 Web Video"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">You add a subtitle file to your HTML5 video \u2014 <code>&lt;track src=&quot;captions.srt&quot; kind=&quot;captions&quot;&gt;<\/code> \u2014 reload the page, and no captions appear. The file isn\u2019t broken; VLC plays it fine. The problem is that browsers don\u2019t read SubRip (<code>.srt<\/code>) through the <code>&lt;track&gt;<\/code> element at all \u2014 the HTML5 <code>&lt;track&gt;<\/code> element only accepts <strong>WebVTT<\/strong> (<code>.vtt<\/code>). The good news: SRT and VTT are almost the same format, so converting is a quick reformat, not a re-encode. This guide shows exactly what changes \u2014 verified against the W3C WebVTT specification and MDN\u2019s <code>&lt;track&gt;<\/code> docs \u2014 and how to do the conversion in seconds.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><strong>Quick answer:<\/strong> The HTML5 <code>&lt;track&gt;<\/code> element needs <strong>WebVTT<\/strong> (<code>.vtt<\/code>), not SubRip (<code>.srt<\/code>) \u2014 point <code>&lt;track src&gt;<\/code> at an <code>.srt<\/code> and no captions show. Converting SRT to VTT is mostly a reformat: <strong>add a <code>WEBVTT<\/code> header line<\/strong> at the top, <strong>change the comma to a period<\/strong> in every timestamp (<code>00:00:01,500<\/code> \u2192 <code>00:00:01.500<\/code>), and the sequence numbers become optional. A short file you can fix by hand; for anything real, <a href=\"https:\/\/www.xconvert.com\/convert-srt-to-vtt\">xconvert\u2019s SRT-to-VTT converter<\/a> does it locally in your browser.<\/p><\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Jump to a section<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"#srt-vs-vtt\">SRT vs VTT: the differences that matter<\/a><\/li><li><a href=\"#why-vtt\">Why HTML5 video needs WebVTT<\/a><\/li><li><a href=\"#by-hand\">Convert SRT to VTT by hand<\/a><\/li><li><a href=\"#tool\">Convert SRT to VTT on xconvert<\/a><\/li><li><a href=\"#faq\">FAQ<\/a><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"srt-vs-vtt\">SRT vs VTT: the differences that matter<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Both are plain-text subtitle files: a list of cues, each with a start time, an end time, and the line(s) of text to display. <strong>SubRip (<code>.srt<\/code>)<\/strong> is the older, near-universal format \u2014 it came out of the SubRip DVD-ripping tool around 2000, has no formal specification (it\u2019s a de-facto standard), and is read by virtually every video platform and desktop player. <strong>WebVTT (<code>.vtt<\/code>)<\/strong> \u2014 \u201cWeb Video Text Tracks\u201d \u2014 is the modern format the <strong>W3C<\/strong> standardized specifically for the web, and it\u2019s what browsers use for the HTML5 <code>&lt;track&gt;<\/code> element.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Put the same cue in each format and the differences are small but strict:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>SubRip (<code>.srt<\/code>):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1\n00:00:01,500 --&gt; 00:00:04,000\nWelcome to the tutorial.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>WebVTT (<code>.vtt<\/code>):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>WEBVTT\n\n00:00:01.500 --&gt; 00:00:04.000\nWelcome to the tutorial.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Here\u2019s what changes, side by side:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><\/th><th>SubRip (SRT)<\/th><th>WebVTT (VTT)<\/th><\/tr><\/thead><tbody><tr><td>Header line<\/td><td>none<\/td><td>must start with <strong><code>WEBVTT<\/code><\/strong><\/td><\/tr><tr><td>Millisecond separator<\/td><td><strong>comma<\/strong> \u2014 <code>00:00:01,500<\/code><\/td><td><strong>period\/dot<\/strong> \u2014 <code>00:00:01.500<\/code><\/td><\/tr><tr><td>Cue numbers<\/td><td>present, sequential<\/td><td><strong>optional<\/strong><\/td><\/tr><tr><td>Styling &amp; positioning<\/td><td>not native<\/td><td>cue settings: position, line, align, size<\/td><\/tr><tr><td>Extension \/ MIME type<\/td><td><code>.srt<\/code><\/td><td><code>.vtt<\/code> \/ <code>text\/vtt<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The two rules that actually break playback if you get them wrong: the file <strong>must begin with the string <code>WEBVTT<\/code><\/strong> (the W3C spec defines this as the file\u2019s required signature), and every timestamp <strong>must use a full stop (<code>.<\/code>) for the thousandths of a second<\/strong>, not a comma. Get either wrong and the browser rejects the whole track. The sequence numbers are the one part that\u2019s genuinely optional in VTT \u2014 the W3C spec lists the cue identifier as an optional element \u2014 so you can keep them or delete them; browsers don\u2019t care either way.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WebVTT also does things SRT can\u2019t: <strong>cue settings<\/strong> let you position a caption (<code>line<\/code>, <code>position<\/code>), align it (<code>align<\/code>), size its box (<code>size<\/code>), or set it vertically, and you can style cues with CSS. A straight SRT-to-VTT conversion doesn\u2019t need any of that \u2014 you\u2019re only reformatting the timing \u2014 but it\u2019s why VTT is the richer format for the web.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"why-vtt\">Why HTML5 video needs WebVTT<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When you caption an HTML5 <code>&lt;video&gt;<\/code>, you use a <code>&lt;track&gt;<\/code> child element. Per <strong>MDN<\/strong>, the track\u2019s <code>src<\/code> must point at a <strong><code>.vtt<\/code> file<\/strong> \u2014 WebVTT is the only format the element reads. Reference an <code>.srt<\/code> there and the captions simply won\u2019t appear:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;video controls src=&quot;lecture.mp4&quot;&gt;\n  &lt;track default kind=&quot;captions&quot; src=&quot;captions.vtt&quot; srclang=&quot;en&quot; label=&quot;English&quot; \/&gt;\n&lt;\/video&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A few attributes worth knowing:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong><code>kind<\/code><\/strong> \u2014 use <code>captions<\/code> for a transcript that also conveys sound effects and speaker cues (for viewers who can\u2019t hear the audio), or <code>subtitles<\/code> for a translation\/transcription of the dialogue. MDN lists <code>captions<\/code>, <code>subtitles<\/code>, <code>descriptions<\/code>, <code>chapters<\/code>, and <code>metadata<\/code>; <code>subtitles<\/code> is the default.<\/li><li><strong><code>default<\/code><\/strong> \u2014 marks the track that\u2019s active when the video loads.<\/li><li><strong><code>srclang<\/code><\/strong> and <strong><code>label<\/code><\/strong> \u2014 the language code and the human-readable name shown in the player\u2019s caption menu.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This browser-only requirement is the entire reason the SRT-to-VTT step exists. As MDN\u2019s own guide on adding captions puts it, video providers supply subtitles \u201cusually in the SubRip Text (SRT) format,\u201d and \u201cthese can be easily converted to WebVTT.\u201d YouTube, Vimeo, and desktop editors happily accept SRT; the browser\u2019s <code>&lt;track&gt;<\/code> element does not.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you\u2019re still settling the video side of your web player \u2014 which container and codec to serve \u2014 see <a href=\"https:\/\/www.xconvert.com\/blog\/mp4-vs-webm-web-video\/\">MP4 vs WebM for web video<\/a>. The caption workflow below is the same whichever you pick.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"by-hand\">Convert SRT to VTT by hand<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Because the change is so small, a short <code>.srt<\/code> can be converted in a plain-text editor:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Open the <code>.srt<\/code> in a text editor (not a word processor, which can inject smart quotes or curly punctuation).<\/li><li>Add <strong><code>WEBVTT<\/code><\/strong> as the very first line, then a blank line before the first cue.<\/li><li><strong>Replace the comma with a period<\/strong> in every timestamp. A global find-and-replace of <code>,<\/code> \u2192 <code>.<\/code> is safe only if none of your caption text contains commas; otherwise restrict the replace to the <code>--&gt;<\/code> lines (many editors can match a comma followed by three digits, <code>,\\d\\d\\d<\/code>).<\/li><li>Keep the sequence numbers or delete them \u2014 either is valid WebVTT.<\/li><li>Save with a <strong><code>.vtt<\/code><\/strong> extension, encoded as <strong>UTF-8<\/strong> (the W3C spec requires WebVTT files to be UTF-8).<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Hand-editing is fine for a quick one-off. It gets error-prone when the file has hundreds of cues, when the caption text contains commas a blind find-and-replace would corrupt, when the source isn\u2019t UTF-8 (accented or non-Latin characters can turn into mojibake), or when you have a whole folder to do. For any of those, a converter that parses the timing lines and re-encodes cleanly is faster and safer.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tool\">Convert SRT to VTT on xconvert<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/www.xconvert.com\/convert-srt-to-vtt\">xconvert SRT-to-VTT converter<\/a> does the reformat for you \u2014 it adds the header, rewrites every timestamp, and hands back a valid <code>.vtt<\/code>. The whole thing runs in your browser:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Open <a href=\"https:\/\/www.xconvert.com\/convert-srt-to-vtt\">xconvert.com\/convert-srt-to-vtt<\/a>.<\/li><li>Click <strong>Upload .srt<\/strong> and choose your subtitle file. (It\u2019s read locally in your browser \u2014 see the note below.)<\/li><li>Click <strong>Convert<\/strong>. The tool rewrites the header and the timestamps into WebVTT.<\/li><li>Click <strong>Download .vtt<\/strong> to save the file \u2014 or <strong>Copy<\/strong> to grab the text and paste it straight into your project.<\/li><li>Reference the <code>.vtt<\/code> from your <code>&lt;track&gt;<\/code> element (see above), and the captions will show.<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Because <strong>processing happens locally in your browser, there\u2019s nothing sitting on a server to delete afterward.<\/strong> For a subtitle file \u2014 which may hold transcripts you\u2019d rather not send anywhere \u2014 that\u2019s a genuine privacy win, and it\u2019s why the tool needs no account and has no upload size limit.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq\">FAQ<\/h2>\n\n\n\n<h5 class=\"wp-block-heading\">What\u2019s the difference between SRT and VTT?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Both are plain-text subtitle files with the same cue structure, so the differences are formatting rules. <strong>VTT files must start with a <code>WEBVTT<\/code> header line, use a period (not a comma) before the milliseconds in timestamps, treat cue numbers as optional, and can carry positioning\/styling that SRT can\u2019t.<\/strong> SRT is the universal format for editors and video platforms; VTT is the one web browsers require.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Why won\u2019t my SRT captions show in HTML5 video?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Because the HTML5 <code>&lt;track&gt;<\/code> element only reads <strong>WebVTT (<code>.vtt<\/code>)<\/strong>, not SubRip. If <code>&lt;track src&gt;<\/code> points at an <code>.srt<\/code>, the browser ignores it and no captions appear. Convert the file to <code>.vtt<\/code> and reference that file instead \u2014 the timing and text are unchanged.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Can I just rename my .srt file to .vtt?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">No. Renaming doesn\u2019t add the required <code>WEBVTT<\/code> header or fix the comma-vs-period timestamps, so the browser still rejects the file. You have to reformat the contents \u2014 which is exactly what the converter (or the by-hand steps above) does.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Do I have to keep the subtitle numbers when converting to VTT?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">No. <strong>Cue identifiers are optional in WebVTT<\/strong> \u2014 the W3C spec lists the identifier as an optional part of a cue. You can keep the sequence numbers from your SRT or drop them; browsers display the captions the same either way.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Is SRT or VTT better for YouTube and video editors?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">For uploading to YouTube or Vimeo, or importing into a desktop editor, <strong>SRT is the safer, more widely accepted choice<\/strong>. Reserve VTT for the web \u2014 HTML5 <code>&lt;track&gt;<\/code>, in-browser players, and anywhere a browser is doing the playback and requires it.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Does converting SRT to VTT change the timing or the text?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">No. It\u2019s a <strong>reformat, not a re-encode<\/strong> \u2014 the same cues, start times, end times, and text, just written with the <code>WEBVTT<\/code> header and period-separated timestamps. Your captions stay frame-accurate.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sources<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Last verified 2026-07-16.<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.w3.org\/TR\/webvtt1\/\">W3C \u2014 WebVTT: The Web Video Text Tracks Format<\/a> \u2014 the required <code>WEBVTT<\/code> file signature, period-separated timestamps (<code>HH:MM:SS.mmm<\/code>), optional cue identifiers, <code>.vtt<\/code> \/ <code>text\/vtt<\/code> and UTF-8, and cue positioning settings.<\/li><li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTML\/Element\/track\">MDN \u2014 The <code>&lt;track&gt;<\/code> element<\/a> \u2014 the track <code>src<\/code> must be a <code>.vtt<\/code> (WebVTT) file; the <code>kind<\/code> values (<code>captions<\/code>, <code>subtitles<\/code>, <code>descriptions<\/code>, <code>chapters<\/code>, <code>metadata<\/code>).<\/li><li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/Media\/Guides\/Audio_and_video_delivery\/Adding_captions_and_subtitles_to_HTML5_video\">MDN \u2014 Adding captions and subtitles to HTML5 video<\/a> \u2014 subtitles are usually supplied as SRT and \u201ccan be easily converted to WebVTT\u201d; full <code>&lt;track&gt;<\/code> usage.<\/li><li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/WebVTT_API\">MDN \u2014 WebVTT API<\/a> \u2014 WebVTT file structure, cue settings, and <code>&lt;track&gt;<\/code> \/ HTML5 video examples.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>SRT captions won&#8217;t show in HTML5 video\u2014browsers need WebVTT. Convert SRT to VTT free, in your browser: add the WEBVTT header and fix the timestamps.<\/p>\n","protected":false},"author":3,"featured_media":1638,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,14],"tags":[],"class_list":["post-1639","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to-guides","category-tools"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Convert SRT to VTT: WebVTT Captions for HTML5 Web Video<\/title>\n<meta name=\"description\" content=\"SRT captions won&#039;t show in HTML5 video\u2014browsers need WebVTT. Convert SRT to VTT free, in your browser: add the WEBVTT header and fix the timestamps.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.xconvert.com\/blog\/convert-srt-to-vtt\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Convert SRT to VTT: WebVTT Captions for HTML5 Web Video\" \/>\n<meta property=\"og:description\" content=\"SRT captions won&#039;t show in HTML5 video\u2014browsers need WebVTT. Convert SRT to VTT free, in your browser: add the WEBVTT header and fix the timestamps.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.xconvert.com\/blog\/convert-srt-to-vtt\" \/>\n<meta property=\"og:site_name\" content=\"XConvert Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/xconvertcom\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-25T13:13:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/07\/featured-76.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1260\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"James\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@xconvert_com\" \/>\n<meta name=\"twitter:site\" content=\"@xconvert_com\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"James\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/convert-srt-to-vtt#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/convert-srt-to-vtt\"},\"author\":{\"name\":\"James\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/#\\\/schema\\\/person\\\/3434db135e6a7f239ba8414244df9845\"},\"headline\":\"Convert SRT to VTT: WebVTT Captions for HTML5 Web Video\",\"datePublished\":\"2026-09-25T13:13:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/convert-srt-to-vtt\"},\"wordCount\":1428,\"image\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/convert-srt-to-vtt#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/featured-76.png\",\"articleSection\":[\"How To Guides\",\"Tools\"],\"inLanguage\":\"en-CA\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/convert-srt-to-vtt\",\"url\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/convert-srt-to-vtt\",\"name\":\"Convert SRT to VTT: WebVTT Captions for HTML5 Web Video\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/convert-srt-to-vtt#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/convert-srt-to-vtt#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/featured-76.png\",\"datePublished\":\"2026-09-25T13:13:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/#\\\/schema\\\/person\\\/3434db135e6a7f239ba8414244df9845\"},\"description\":\"SRT captions won't show in HTML5 video\u2014browsers need WebVTT. Convert SRT to VTT free, in your browser: add the WEBVTT header and fix the timestamps.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/convert-srt-to-vtt#breadcrumb\"},\"inLanguage\":\"en-CA\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/convert-srt-to-vtt\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-CA\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/convert-srt-to-vtt#primaryimage\",\"url\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/featured-76.png\",\"contentUrl\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/featured-76.png\",\"width\":2400,\"height\":1260,\"caption\":\"The xconvert Convert SRT to VTT tool at \\\/convert-srt-to-vtt with the Upload .srt button highlighted \u2014 load a SubRip file and download a WebVTT (.vtt) caption file.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/convert-srt-to-vtt#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.xconvert.com\\\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Convert SRT to VTT: WebVTT Captions for HTML5 Web Video\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/\",\"name\":\"XConvert Blog\",\"description\":\"Blog for XConvert file converter\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-CA\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/#\\\/schema\\\/person\\\/3434db135e6a7f239ba8414244df9845\",\"name\":\"James\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-CA\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/46be416a360dc6b95bffc4b116d86872c03f8d8e4c1047a3a08033742f03d04d?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/46be416a360dc6b95bffc4b116d86872c03f8d8e4c1047a3a08033742f03d04d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/46be416a360dc6b95bffc4b116d86872c03f8d8e4c1047a3a08033742f03d04d?s=96&d=mm&r=g\",\"caption\":\"James\"},\"url\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/author\\\/james\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Convert SRT to VTT: WebVTT Captions for HTML5 Web Video","description":"SRT captions won't show in HTML5 video\u2014browsers need WebVTT. Convert SRT to VTT free, in your browser: add the WEBVTT header and fix the timestamps.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.xconvert.com\/blog\/convert-srt-to-vtt","og_locale":"en_US","og_type":"article","og_title":"Convert SRT to VTT: WebVTT Captions for HTML5 Web Video","og_description":"SRT captions won't show in HTML5 video\u2014browsers need WebVTT. Convert SRT to VTT free, in your browser: add the WEBVTT header and fix the timestamps.","og_url":"https:\/\/www.xconvert.com\/blog\/convert-srt-to-vtt","og_site_name":"XConvert Blog","article_publisher":"https:\/\/www.facebook.com\/xconvertcom","article_published_time":"2026-09-25T13:13:00+00:00","og_image":[{"width":2400,"height":1260,"url":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/07\/featured-76.png","type":"image\/png"}],"author":"James","twitter_card":"summary_large_image","twitter_creator":"@xconvert_com","twitter_site":"@xconvert_com","twitter_misc":{"Written by":"James","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.xconvert.com\/blog\/convert-srt-to-vtt#article","isPartOf":{"@id":"https:\/\/www.xconvert.com\/blog\/convert-srt-to-vtt"},"author":{"name":"James","@id":"https:\/\/www.xconvert.com\/blog\/#\/schema\/person\/3434db135e6a7f239ba8414244df9845"},"headline":"Convert SRT to VTT: WebVTT Captions for HTML5 Web Video","datePublished":"2026-09-25T13:13:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.xconvert.com\/blog\/convert-srt-to-vtt"},"wordCount":1428,"image":{"@id":"https:\/\/www.xconvert.com\/blog\/convert-srt-to-vtt#primaryimage"},"thumbnailUrl":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/07\/featured-76.png","articleSection":["How To Guides","Tools"],"inLanguage":"en-CA"},{"@type":"WebPage","@id":"https:\/\/www.xconvert.com\/blog\/convert-srt-to-vtt","url":"https:\/\/www.xconvert.com\/blog\/convert-srt-to-vtt","name":"Convert SRT to VTT: WebVTT Captions for HTML5 Web Video","isPartOf":{"@id":"https:\/\/www.xconvert.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.xconvert.com\/blog\/convert-srt-to-vtt#primaryimage"},"image":{"@id":"https:\/\/www.xconvert.com\/blog\/convert-srt-to-vtt#primaryimage"},"thumbnailUrl":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/07\/featured-76.png","datePublished":"2026-09-25T13:13:00+00:00","author":{"@id":"https:\/\/www.xconvert.com\/blog\/#\/schema\/person\/3434db135e6a7f239ba8414244df9845"},"description":"SRT captions won't show in HTML5 video\u2014browsers need WebVTT. Convert SRT to VTT free, in your browser: add the WEBVTT header and fix the timestamps.","breadcrumb":{"@id":"https:\/\/www.xconvert.com\/blog\/convert-srt-to-vtt#breadcrumb"},"inLanguage":"en-CA","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.xconvert.com\/blog\/convert-srt-to-vtt"]}]},{"@type":"ImageObject","inLanguage":"en-CA","@id":"https:\/\/www.xconvert.com\/blog\/convert-srt-to-vtt#primaryimage","url":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/07\/featured-76.png","contentUrl":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/07\/featured-76.png","width":2400,"height":1260,"caption":"The xconvert Convert SRT to VTT tool at \/convert-srt-to-vtt with the Upload .srt button highlighted \u2014 load a SubRip file and download a WebVTT (.vtt) caption file."},{"@type":"BreadcrumbList","@id":"https:\/\/www.xconvert.com\/blog\/convert-srt-to-vtt#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.xconvert.com\/blog"},{"@type":"ListItem","position":2,"name":"Convert SRT to VTT: WebVTT Captions for HTML5 Web Video"}]},{"@type":"WebSite","@id":"https:\/\/www.xconvert.com\/blog\/#website","url":"https:\/\/www.xconvert.com\/blog\/","name":"XConvert Blog","description":"Blog for XConvert file converter","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.xconvert.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-CA"},{"@type":"Person","@id":"https:\/\/www.xconvert.com\/blog\/#\/schema\/person\/3434db135e6a7f239ba8414244df9845","name":"James","image":{"@type":"ImageObject","inLanguage":"en-CA","@id":"https:\/\/secure.gravatar.com\/avatar\/46be416a360dc6b95bffc4b116d86872c03f8d8e4c1047a3a08033742f03d04d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/46be416a360dc6b95bffc4b116d86872c03f8d8e4c1047a3a08033742f03d04d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/46be416a360dc6b95bffc4b116d86872c03f8d8e4c1047a3a08033742f03d04d?s=96&d=mm&r=g","caption":"James"},"url":"https:\/\/www.xconvert.com\/blog\/author\/james"}]}},"_links":{"self":[{"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/posts\/1639","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/comments?post=1639"}],"version-history":[{"count":4,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/posts\/1639\/revisions"}],"predecessor-version":[{"id":2323,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/posts\/1639\/revisions\/2323"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/media\/1638"}],"wp:attachment":[{"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/media?parent=1639"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/categories?post=1639"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/tags?post=1639"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}