<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: OpenSubs</title>
    <description>The latest articles on DEV Community by OpenSubs (@opensubs).</description>
    <link>https://dev.to/opensubs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4129470%2F904c45b9-1294-446b-9e00-ae5c40bd7d4f.png</url>
      <title>DEV Community: OpenSubs</title>
      <link>https://dev.to/opensubs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/opensubs"/>
    <language>en</language>
    <item>
      <title>Subtitle File Formats: SRT, VTT and ASS Explained</title>
      <dc:creator>OpenSubs</dc:creator>
      <pubDate>Thu, 17 Sep 2026 12:00:42 +0000</pubDate>
      <link>https://dev.to/opensubs/subtitle-file-formats-srt-vtt-and-ass-explained-3bc8</link>
      <guid>https://dev.to/opensubs/subtitle-file-formats-srt-vtt-and-ass-explained-3bc8</guid>
      <description>&lt;p&gt;A subtitle file is a plain text file: lines of dialogue, each with a start and an end time. The format decides how much more than that it can carry — styling, positioning, word timing — and which players will accept it.&lt;/p&gt;

&lt;p&gt;Three formats cover almost everything you'll meet: &lt;strong&gt;SRT&lt;/strong&gt;, &lt;strong&gt;VTT&lt;/strong&gt; and &lt;strong&gt;ASS&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  SRT — the one everything accepts
&lt;/h2&gt;

&lt;p&gt;SubRip (&lt;code&gt;.srt&lt;/code&gt;) is the oldest and the most widely supported. A cue is a number, a time range, and the text:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1
00:01:42,300 --&amp;gt; 00:01:45,120
Thanks for watching,
see you next week.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's all it holds. No colours, no fonts, no positions — the player decides how it looks. Milliseconds come after a &lt;strong&gt;comma&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use it when&lt;/strong&gt; you want a file that simply works: desktop players, video editors, TV boxes, most upload forms.&lt;/p&gt;

&lt;h2&gt;
  
  
  VTT — the web format
&lt;/h2&gt;

&lt;p&gt;WebVTT (&lt;code&gt;.vtt&lt;/code&gt;) was written for the browser. The HTML5 &lt;code&gt;&amp;lt;track&amp;gt;&lt;/code&gt; element reads this format and no other, so a player on a web page needs VTT.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WEBVTT

00:01:42.300 --&amp;gt; 00:01:45.120
Thanks for watching,
see you next week.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three differences from SRT: the file must start with &lt;code&gt;WEBVTT&lt;/code&gt;, milliseconds come after a &lt;strong&gt;period&lt;/strong&gt;, and cue numbers are optional. VTT can also carry cue settings — position, line, alignment — and simple styling through CSS in the page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use it when&lt;/strong&gt; the subtitles will play in a browser. See &lt;a href="https://opensubs.app/blog/srt-to-vtt" rel="noopener noreferrer"&gt;how to convert SRT to VTT&lt;/a&gt; if you already have the SRT.&lt;/p&gt;

&lt;h2&gt;
  
  
  ASS — the one that carries the look
&lt;/h2&gt;

&lt;p&gt;Advanced SubStation Alpha (&lt;code&gt;.ass&lt;/code&gt;) is a different kind of file. Besides the dialogue it stores a style table: font, size, colours, outline and shadow, margins, alignment. Every line points at a style.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, OutlineColour, ...
Style: Default,Inter,43,&amp;amp;H00FFFFFF,&amp;amp;H4D100C0C,...

[Events]
Dialogue: 0,0:01:42.30,0:01:45.12,Default,,0,0,0,,Thanks for watching,\Nsee you next week.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because the look travels with the file, ASS is what subtitle renderers use when subtitles are drawn into a video, and what fansubbing and karaoke tooling has always used. It also supports word-level timing, which is how word-by-word highlighting is done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use it when&lt;/strong&gt; the styling matters and the player supports it (VLC and mpv do), or when you're handing the file to something that will render it into the picture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Side by side
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;SRT&lt;/th&gt;
&lt;th&gt;VTT&lt;/th&gt;
&lt;th&gt;ASS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Text and timings&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Styling stored in the file&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;limited, via CSS&lt;/td&gt;
&lt;td&gt;yes, full&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Positioning&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes, cue settings&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Word-level timing&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTML5 &lt;code&gt;&amp;lt;track&amp;gt;&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VLC / mpv&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Video editors&lt;/td&gt;
&lt;td&gt;usually&lt;/td&gt;
&lt;td&gt;varies&lt;/td&gt;
&lt;td&gt;rarely&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Upload forms (YouTube, Vimeo, socials)&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;often&lt;/td&gt;
&lt;td&gt;rarely&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Which one should you pick?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Uploading to a platform&lt;/strong&gt; — SRT. It's the safe default; YouTube, Vimeo and most others take it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A player on your own web page&lt;/strong&gt; — VTT.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want your styling to survive&lt;/strong&gt; — ASS, or skip the file entirely and burn the subtitles into the picture.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handing subtitles to an editor or a colleague&lt;/strong&gt; — SRT, plus a note about the styling you want.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What about the other extensions?
&lt;/h2&gt;

&lt;p&gt;You'll also run into &lt;code&gt;.ssa&lt;/code&gt; (the older version of ASS), &lt;code&gt;.sub&lt;/code&gt; (several unrelated formats, some counted in frames rather than in time), &lt;code&gt;.ttml&lt;/code&gt; and &lt;code&gt;.dfxp&lt;/code&gt; (XML, used in broadcast and by some platforms), and &lt;code&gt;.sbv&lt;/code&gt; (YouTube's own export). They exist, but for everyday work the three above cover it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting a file in the format you need
&lt;/h2&gt;

&lt;p&gt;OpenSubs runs in your browser and exports all three. You can start from an existing subtitle file or from the video itself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open an &lt;code&gt;.srt&lt;/code&gt; or &lt;code&gt;.vtt&lt;/code&gt; you already have, then export &lt;code&gt;.srt&lt;/code&gt;, &lt;code&gt;.vtt&lt;/code&gt; or &lt;code&gt;.ass&lt;/code&gt; — no video needed.&lt;/li&gt;
&lt;li&gt;Or drop in a video and let it transcribe the speech on your own machine, with nothing uploaded, then export.&lt;/li&gt;
&lt;li&gt;Pick a &lt;a href="https://opensubs.app/styles" rel="noopener noreferrer"&gt;caption style&lt;/a&gt; before exporting ASS, so the look is written into the file.&lt;/li&gt;
&lt;li&gt;Or export an MP4 with the subtitles &lt;a href="https://opensubs.app/burn-subtitles-into-video" rel="noopener noreferrer"&gt;burned into the picture&lt;/a&gt;, for places that don't take subtitle files at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Can I just rename an .srt to .vtt?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. VTT needs the &lt;code&gt;WEBVTT&lt;/code&gt; header and periods instead of commas in the timestamps. Renaming leaves the file unreadable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does converting change the timings?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. Only the format changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Will ASS styling show up everywhere?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. Players that use a subtitle renderer, such as VLC and mpv, draw it; most web players and editors ignore it. If the look has to survive everywhere, burn the subtitles into the video.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which format should I upload to YouTube?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SRT. YouTube ignores styling anyway.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://opensubs.app" rel="noopener noreferrer"&gt;Convert or create subtitles →&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>video</category>
      <category>tutorial</category>
      <category>a11y</category>
    </item>
  </channel>
</rss>
