{"id":1946,"date":"2026-10-08T01:02:09","date_gmt":"2026-10-07T23:02:09","guid":{"rendered":"https:\/\/stuff.tamius.net\/sacred-texts\/?p=1946"},"modified":"2026-10-09T14:32:50","modified_gmt":"2026-10-09T12:32:50","slug":"so-what-are-subtitles-actually","status":"publish","type":"post","link":"https:\/\/stuff.tamius.net\/sacred-texts\/2026\/10\/08\/so-what-are-subtitles-actually\/","title":{"rendered":"So what are subtitles, actually?"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Every now and then, Ultrawidify gets a 2000 IQ idea in the mail: <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Hey, autodetection should detect subtitles and it&#8217;s very annoying that it doesn&#8217;t<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">which is often (but not always) followed to a link that makes me silently judge people&#8217;s music tastes. Back in the day, such requests were ignored &#8220;because performance.&#8221; However, now that autodetection uses webgl, performance issues have been resolved to a large extent, and with autodetection taking only ~1-3 ms per run &#8230; that leaves us quite some space in our 16 ms budget. So let&#8217;s do subtitle autodetection.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But how do we do that?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now, I could probably train a computer vision model and take great care to never ever call it AI in public in front of normies. However, CV probably isn&#8217;t free to run, and I&#8217;d have a lot of work cut out for me if I went this route. So let&#8217;s see if we can bolt something on top of our existing algorithm.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Going this route means we have to actually define how our algorithm that can only check one (sub)pixel at a time should differentiate between image and subtitles. So let&#8217;s go and find a sample video with baked subtitles. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This took a bit (especially since modern music lyrics videos just put the subtitles in the subtitle track instead of baking them into the video file), but eventually I manage to find an example. <\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"357\" src=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/subtitle1.avif\" alt=\"subtitle1\" class=\"wp-image-1947\" srcset=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/subtitle1.avif 640w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/subtitle1-300x167.avif 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption class=\"wp-element-caption\">This is actually a decent example.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">So let&#8217;s see what we have. First of all, we have some letters in the upper right corner. That looks a lot like channel &#8220;logo&#8221;, which we don&#8217;t care about and should ideally be cropped. The one thing that makes it very noticeably different from subtitles is that the logo is in the corner, not in the center. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Subtitles, in general, tend to be centered. They also tend to be very bright, at least almost full brightness in at least one of the color channels. There also tend to be some other neat properties:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>if subtitles are in the letterbox, there will be black (or at least dark) space between letters<\/li>\n\n\n\n<li>text tends to run left-to-right<\/li>\n\n\n\n<li>subtitles are static and do not move<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">If all these assumptions were correct, things would be super convenient for us. However, the universal laws of the universe state that things that seem convenient often aren&#8217;t particularly true. We know that arabic and hebrew are written from right-to-left. Fortunately for us, that doesn&#8217;t really change much in terms of item #2. However: if there&#8217;s cultures who didn&#8217;t get the memo and opted for writing in the opposite direction &#8230; could there also be cultures that decided that perpendi\u2014<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Okay I&#8217;ll spare you the theatrics. If you&#8217;re from any country with access to the not-so-modern-anymore technology like movies or TV or especially the internet, then you have probably learned through osmosis that at least traditionally, China and Japan have done their writing vertically by the time you were 15. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In practice, ICNU tends to list vertical writing systems as critically endangered, sometimes even borderline extinct in the wild. In modern contexts \u2014 and especially when used as subtitles \u2014 even vertical languages tend to write things out in horizontal direction (but exceptions exists \u2014 apparently, japan will do vertical subtitles for certain movies and\/or artistic productions). More importantly, if a video has vertical subtitles &#8230; they aren&#8217;t gonna be in the bottom or top letterbox. Which means they&#8217;re in no danger of actually being cropped by Ultrawidify. (That is, unless I decide to implement autodetection for pillarbox as well, but pillarbox autodetection is so niche you&#8217;ll have to manually enable it). <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So turns out we can assume #2 without any risk. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What does all of this mean for our subtitle detection algorithm? <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When we capture a frame of video, we could start scanning rows, in the following manner:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Start on the left<\/li>\n\n\n\n<li>check whether the pixel is dark or very bright (but ignore the middle values). Make a note of that.<\/li>\n\n\n\n<li>move one pixel to the right. Check whether this pixel is also dark or very bright\n<ol class=\"wp-block-list\">\n<li>if this pixel is bright and the previous pixel wasn&#8217;t, we encountered a new letter. Set letter size counter to 0. Increase the letter counter by one.<\/li>\n\n\n\n<li>if both this pixel and the previous one are bright, increase the letter size counter by one<\/li>\n\n\n\n<li>if the letter size counter becomes too big, we probably aren&#8217;t looking at a letter<sup id=\"mfn-content-00000000000004b60000000000000000_1946-1\" class=\"modern-footnotes-footnote modern-footnotes-footnote--expands-on-desktop \" data-mfn=\"1\" data-mfn-post-scope=\"00000000000004b60000000000000000_1946\"><a href=\"javascript:void(0)\"  title=\"This turns out can be problematic for Arabic subtitles in the bottom letterbox or indian subtitles in the top letterbox, but we&#8217;ll ignore that for the time being.  Let&#8217;s get the base case working first, and see whether any effort remains for the edge cases. \"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000004b60000000000000000_1946-1\">1<\/a><\/sup><span role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"1\">This turns out can be problematic for Arabic subtitles in the bottom letterbox or indian subtitles in the top letterbox, but we&#8217;ll ignore that for the time being.  Let&#8217;s get the base case working first, and see whether any effort remains for the edge cases. <\/span><\/li>\n\n\n\n<li>(you could similarly track the size of dark gaps, but we&#8217;ll ignore that)<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>Look at how many letters were detected. While subtitles can, in certain edge cases, contain very few letters, let&#8217;s require at least 5 letter detections. This is less than ideal, however not having any minimum character limits can result in false positives.<\/li>\n\n\n\n<li>Repeat this over a few rows<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">The neat part of this algorithm is that it&#8217;s very compatible with how the image is stored in computer memory. In computer memory, image is stored as one row of pixels:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"541\" src=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/image-en.avif\" alt=\"image-en\" class=\"wp-image-1948\" style=\"width:960px;height:auto\" srcset=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/image-en.avif 960w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/image-en-300x169.avif 300w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/image-en-768x433.avif 768w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><figcaption class=\"wp-element-caption\">Except that in reality, every square should only contain a single color, but something something artistic license.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This makes it very easy to check the value of one pixel to the left or one pixel to the right, while checking pixels above or below requires slightly bit more work.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This approach generally works well on &#8220;ideal subtitles&#8221; like on the video somebody linked me. Subtitles seem to get detected and everything seems to work. If I bring up my debugging tools, the &#8220;subs confirmed&#8221; seems to stay for most of the time.  <\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1640\" height=\"1121\" src=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/aard-results.avif\" alt=\"aard-results\" class=\"wp-image-1949\" srcset=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/aard-results.avif 1640w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/aard-results-300x205.avif 300w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/aard-results-1024x700.avif 1024w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/aard-results-768x525.avif 768w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/aard-results-1536x1050.avif 1536w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/aard-results-1140x779.avif 1140w\" sizes=\"auto, (max-width: 1640px) 100vw, 1640px\" \/><figcaption class=\"wp-element-caption\">Getting &#8220;Uncertain, maintaining crop&#8221; instead of &#8220;yes subs&#8221; is slightly less than ideal, but shouldn&#8217;t really have too many adverse effects.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Now, sometimes subs won&#8217;t get explicitly detected, with extension instead giving &#8220;can&#8217;t determine aspect ratio, will keep whatever I have&#8221; status, but this doesn&#8217;t seem to cause too many issues right now. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I wonder what happens if I put on a fan-subtitled video of a song by a lesser band.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1285\" height=\"1121\" src=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/aard2.avif\" alt=\"aard2\" class=\"wp-image-1950\" srcset=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/aard2.avif 1285w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/aard2-300x262.avif 300w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/aard2-1024x893.avif 1024w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/aard2-768x670.avif 768w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/aard2-980x855.avif 980w\" sizes=\"auto, (max-width: 1285px) 100vw, 1285px\" \/><figcaption class=\"wp-element-caption\">Okay I really <em>shouldn&#8217;t <\/em>be knocking on Freedom Call this much because then I&#8217;m about to get uno-reverse&#8217;d by the next person who sees my playlist, but having to watch a video for a week plus straight has its effects.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Those subtitles look <em>a lot <\/em>like they should be getting detected. However, the cursor graph (where the trail is being drawn) is almost all the way on the right, but there&#8217;s no red near the cursor. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On the other hand, I also had the opposite problem: subtitle detection very sporadically got triggered in random places that didn&#8217;t contain any subtitles (though I don&#8217;t have a screenshot for this \u2014 I resolved some of those issues <em>before <\/em>I even got the idea of writing this blog). So how do we throw out spurious subtitle detections?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;ll gonna be leveraging the &#8220;subtitles dont move&#8221; but from earlier. This is gonna be suboptimal for people who build their subtitles word-by-word instead of flashing the entire line, but there&#8217;s no one-size-fits-all solution (short of training a computer vision model, and even then). There&#8217;s only balancing acts, tradeoffs and compromises. If we track detections in the last <em>n <\/em>lines that we check across the last <em>m <\/em>frames that subtitle detection ran on. For every line, we track up to 16 letter detections (specifically their starting position and their sizes). If those detections match between all last <em>m <\/em>runs on all <em>n <\/em>lines (and if it obeys all the other subtitle rules), then this is surely a subtitle. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This fixes the issue of spurious detections, but we still got dem type II errors. So what gives?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Because autodetection doesn&#8217;t run on full frame (it first scales down the video to 360p), the edge of the subtitles might become blurred a bit. This can cause the following situation. First, subtitle detection hits the lower edge of the subtitle. Because subtitles got blurred, none of the pixels registered bright enough to count as a subtitle. However, they were more than bright enough to register as image, so extension was like &#8220;yes, we found the edge of the video frame.&#8221; <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The solution to this problem has two components. First one is to define three thresholds:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>this is probably image (low brightness level)<\/li>\n\n\n\n<li>this could be subtitle (significantly brighter, but still dark)<\/li>\n\n\n\n<li>this is definitely a subtitle (high brightness)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">then, you count how many times a row switches between these three states. If the state changes often, then you&#8217;re very likely looking at a subtitle. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The other part of the solution is to ignore any short changes that exceed thresholds by minimal amounts, as those could be compression artifacts.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I go an implement those two things, and suddenly both aspect ratio detection and subtitle detection seem to work remarkably well (on this one video that I hope I never ever have to see again). Aspect ratio is stable and bang on, detected right through these subs, despite the fact that the video is over-compressed garbage with compression artifacts that can be seen from mars.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1230\" height=\"927\" src=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/aard-final.avif\" alt=\"aard-final\" class=\"wp-image-1952\" srcset=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/aard-final.avif 1230w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/aard-final-300x226.avif 300w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/aard-final-1024x772.avif 1024w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/aard-final-768x579.avif 768w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/aard-final-1134x855.avif 1134w\" sizes=\"auto, (max-width: 1230px) 100vw, 1230px\" \/><figcaption class=\"wp-element-caption\">Those are the graphs that bring immense joy.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">So, now that we got things working, what&#8217;s the cost? Because algorithm is no good if it causes everything to lag.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2-3 milliseconds per frame on average.<sup id=\"mfn-content-00000000000004b60000000000000000_1946-2\" class=\"modern-footnotes-footnote modern-footnotes-footnote--expands-on-desktop \" data-mfn=\"2\" data-mfn-post-scope=\"00000000000004b60000000000000000_1946\"><a href=\"javascript:void(0)\"  title=\"Granted, this is on a what used to be pretty much top of the line PC 8 years ago (2080Ti + Ryzen 7 5700G + Linux\/CachyOS + Chrome), but it&#8217;s not 2018 anymore. Given ultrawide monitors are a &#8220;if you have one you aren&#8217;t exactly poor&#8221; kind of product, I don&#8217;t think it&#8217;s unfair to expect an average ultrawide user to have similar level of performance sitting under their desk. In this day and age, that should be midrange specs. Quick google confirms: 4060 isn&#8217;t that much worse, and 5060 is straight up better.\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000004b60000000000000000_1946-2\">2<\/a><\/sup><span role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"2\">Granted, this is on a what used to be pretty much top of the line PC 8 years ago (2080Ti + Ryzen 7 5700G + Linux\/CachyOS + Chrome), but it&#8217;s not 2018 anymore. Given ultrawide monitors are a &#8220;if you have one you aren&#8217;t exactly poor&#8221; kind of product, I don&#8217;t think it&#8217;s unfair to expect an average ultrawide user to have similar level of performance sitting under their desk. In this day and age, that should be midrange specs. Quick google confirms: 4060 isn&#8217;t <em>that <\/em>much worse, and 5060 is straight up better.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And it stays this way when you try to run stuff on 4K as well (mostly because 4K video is downscaled to 360p before being fed into detection algorithm): <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1685\" height=\"641\" src=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/4k.avif\" alt=\"4k\" class=\"wp-image-1953\" srcset=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/4k.avif 1685w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/4k-300x114.avif 300w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/4k-1024x390.avif 1024w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/4k-768x292.avif 768w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/4k-1536x584.avif 1536w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/4k-1140x434.avif 1140w\" sizes=\"auto, (max-width: 1685px) 100vw, 1685px\" \/><figcaption class=\"wp-element-caption\">This video is also a lot more stable than it used to be, too. Before trying to improve detection on the Freedom Call video, &#8220;uncertain maintaining&#8221; was flashing a lot more often for this video here. Which is neat, I thought there was nothing more I could do to improve detection in this video.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Realistically, I could probably start defaulting autodetection frequency to &#8220;run on every frame&#8221; (subtitle detection with uncertainty filter actually really benefits from this).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But I&#8217;m not exactly making this for only Chrome. Ultrawidify 7 is there because I want to have improved autodetection in Firefox. So let&#8217;s load it up in Firefox.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"383\" src=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/yikes-1024x383.avif\" alt=\"yikes\" class=\"wp-image-1954\" srcset=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/yikes-1024x383.avif 1024w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/yikes-300x112.avif 300w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/yikes-768x287.avif 768w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/yikes-1536x574.avif 1536w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/yikes-2048x766.avif 2048w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/yikes-1140x426.avif 1140w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">That&#8217;s gonna be a yikes from me dawg, that&#8217;s gonna be, a yikes from me. I never give a yikes, I never give a fucking yikes. I don&#8217;t like yikes. I think yikes is overdone, yikes is overplayed, I think people use yikes too much, I think yikes should have stayed in Scooby-Doo, for me. But this, this is a fucking yikes. This is yikes. This is Y I K E S in block capitals yikes. It&#8217;s unbelievable.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">God fucking dammit. And it&#8217;s all in the &#8220;draw&#8221; phase as well, which is 100% up to the browser and I can&#8217;t do much about it, though Firefox cost does go down on 1080p videos. However, despite all that it doesn&#8217;t seem that the browser or video lags or stutters any more than before, so I guess we&#8217;ll call it a day.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Every now and then, Ultrawidify gets a 2000 IQ idea in the mail: which is often (but not always) followed to a link that makes me silently judge people&#8217;s music tastes. Back in the day, such requests were ignored &#8220;because performance.&#8221; However, now that autodetection uses webgl, performance issues have been resolved to a large extent, and with autodetection taking only ~1-3 ms per<span class=\"more-dots\">&#8230;<\/span> <span class=\"more-tag d-block mt-05\"><a class=\"more-link\" href=\"https:\/\/stuff.tamius.net\/sacred-texts\/2026\/10\/08\/so-what-are-subtitles-actually\/\">Continue Reading...<span class=\"screen-reader-text\"> \"So what are subtitles, actually?\"<\/span><\/a><\/span><!-- .more-tag --><\/p>\n","protected":false},"author":1,"featured_media":1947,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"pgc_sgb_lightbox_settings":"","footnotes":""},"categories":[38,9],"tags":[],"class_list":["post-1946","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-projects","category-ultrawidify"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>So what are subtitles, actually? - Tamius&#039; sacred texts<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/stuff.tamius.net\/sacred-texts\/2026\/10\/08\/so-what-are-subtitles-actually\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"So what are subtitles, actually? - Tamius&#039; sacred texts\" \/>\n<meta property=\"og:description\" content=\"Every now and then, Ultrawidify gets a 2000 IQ idea in the mail: which is often (but not always) followed to a link that makes me silently judge people&#8217;s music tastes. Back in the day, such requests were ignored &#8220;because performance.&#8221; However, now that autodetection uses webgl, performance issues have been resolved to a large extent, and with autodetection taking only ~1-3 ms per...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/stuff.tamius.net\/sacred-texts\/2026\/10\/08\/so-what-are-subtitles-actually\/\" \/>\n<meta property=\"og:site_name\" content=\"Tamius&#039; sacred texts\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-07T23:02:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-09T12:32:50+00:00\" \/>\n<meta name=\"author\" content=\"Tamius Han\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tamius Han\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2026\\\/10\\\/08\\\/so-what-are-subtitles-actually\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2026\\\/10\\\/08\\\/so-what-are-subtitles-actually\\\/\"},\"author\":{\"name\":\"Tamius Han\",\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/#\\\/schema\\\/person\\\/4677d05a4f45974f27cd21481c561c21\"},\"headline\":\"So what are subtitles, actually?\",\"datePublished\":\"2026-10-07T23:02:09+00:00\",\"dateModified\":\"2026-10-09T12:32:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2026\\\/10\\\/08\\\/so-what-are-subtitles-actually\\\/\"},\"wordCount\":2134,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2026\\\/10\\\/08\\\/so-what-are-subtitles-actually\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/subtitle1.avif\",\"articleSection\":[\"Projects\",\"Ultrawidify\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2026\\\/10\\\/08\\\/so-what-are-subtitles-actually\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2026\\\/10\\\/08\\\/so-what-are-subtitles-actually\\\/\",\"url\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2026\\\/10\\\/08\\\/so-what-are-subtitles-actually\\\/\",\"name\":\"So what are subtitles, actually? - Tamius&#039; sacred texts\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2026\\\/10\\\/08\\\/so-what-are-subtitles-actually\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2026\\\/10\\\/08\\\/so-what-are-subtitles-actually\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/subtitle1.avif\",\"datePublished\":\"2026-10-07T23:02:09+00:00\",\"dateModified\":\"2026-10-09T12:32:50+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/#\\\/schema\\\/person\\\/4677d05a4f45974f27cd21481c561c21\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2026\\\/10\\\/08\\\/so-what-are-subtitles-actually\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2026\\\/10\\\/08\\\/so-what-are-subtitles-actually\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2026\\\/10\\\/08\\\/so-what-are-subtitles-actually\\\/#primaryimage\",\"url\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/subtitle1.avif\",\"contentUrl\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/subtitle1.avif\",\"width\":640,\"height\":357,\"caption\":\"subtitle1\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2026\\\/10\\\/08\\\/so-what-are-subtitles-actually\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"So what are subtitles, actually?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/#website\",\"url\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/\",\"name\":\"Tamius&#039; sacred texts\",\"description\":\"... containing one of the weirdest mix of pointless topics.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/#\\\/schema\\\/person\\\/4677d05a4f45974f27cd21481c561c21\",\"name\":\"Tamius Han\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1ce12569905c4aff5d48778af8527565f1175c254ad56cc5e5221666ff1e222b?s=96&d=blank&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1ce12569905c4aff5d48778af8527565f1175c254ad56cc5e5221666ff1e222b?s=96&d=blank&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1ce12569905c4aff5d48778af8527565f1175c254ad56cc5e5221666ff1e222b?s=96&d=blank&r=pg\",\"caption\":\"Tamius Han\"},\"url\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/author\\\/tamius-han\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"So what are subtitles, actually? - Tamius&#039; sacred texts","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:\/\/stuff.tamius.net\/sacred-texts\/2026\/10\/08\/so-what-are-subtitles-actually\/","og_locale":"en_US","og_type":"article","og_title":"So what are subtitles, actually? - Tamius&#039; sacred texts","og_description":"Every now and then, Ultrawidify gets a 2000 IQ idea in the mail: which is often (but not always) followed to a link that makes me silently judge people&#8217;s music tastes. Back in the day, such requests were ignored &#8220;because performance.&#8221; However, now that autodetection uses webgl, performance issues have been resolved to a large extent, and with autodetection taking only ~1-3 ms per...","og_url":"https:\/\/stuff.tamius.net\/sacred-texts\/2026\/10\/08\/so-what-are-subtitles-actually\/","og_site_name":"Tamius&#039; sacred texts","article_published_time":"2026-10-07T23:02:09+00:00","article_modified_time":"2026-10-09T12:32:50+00:00","author":"Tamius Han","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Tamius Han","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2026\/10\/08\/so-what-are-subtitles-actually\/#article","isPartOf":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2026\/10\/08\/so-what-are-subtitles-actually\/"},"author":{"name":"Tamius Han","@id":"https:\/\/stuff.tamius.net\/sacred-texts\/#\/schema\/person\/4677d05a4f45974f27cd21481c561c21"},"headline":"So what are subtitles, actually?","datePublished":"2026-10-07T23:02:09+00:00","dateModified":"2026-10-09T12:32:50+00:00","mainEntityOfPage":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2026\/10\/08\/so-what-are-subtitles-actually\/"},"wordCount":2134,"commentCount":0,"image":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2026\/10\/08\/so-what-are-subtitles-actually\/#primaryimage"},"thumbnailUrl":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/subtitle1.avif","articleSection":["Projects","Ultrawidify"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/stuff.tamius.net\/sacred-texts\/2026\/10\/08\/so-what-are-subtitles-actually\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2026\/10\/08\/so-what-are-subtitles-actually\/","url":"https:\/\/stuff.tamius.net\/sacred-texts\/2026\/10\/08\/so-what-are-subtitles-actually\/","name":"So what are subtitles, actually? - Tamius&#039; sacred texts","isPartOf":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/#website"},"primaryImageOfPage":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2026\/10\/08\/so-what-are-subtitles-actually\/#primaryimage"},"image":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2026\/10\/08\/so-what-are-subtitles-actually\/#primaryimage"},"thumbnailUrl":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/subtitle1.avif","datePublished":"2026-10-07T23:02:09+00:00","dateModified":"2026-10-09T12:32:50+00:00","author":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/#\/schema\/person\/4677d05a4f45974f27cd21481c561c21"},"breadcrumb":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2026\/10\/08\/so-what-are-subtitles-actually\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/stuff.tamius.net\/sacred-texts\/2026\/10\/08\/so-what-are-subtitles-actually\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2026\/10\/08\/so-what-are-subtitles-actually\/#primaryimage","url":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/subtitle1.avif","contentUrl":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2026\/10\/subtitle1.avif","width":640,"height":357,"caption":"subtitle1"},{"@type":"BreadcrumbList","@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2026\/10\/08\/so-what-are-subtitles-actually\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/stuff.tamius.net\/sacred-texts\/"},{"@type":"ListItem","position":2,"name":"So what are subtitles, actually?"}]},{"@type":"WebSite","@id":"https:\/\/stuff.tamius.net\/sacred-texts\/#website","url":"https:\/\/stuff.tamius.net\/sacred-texts\/","name":"Tamius&#039; sacred texts","description":"... containing one of the weirdest mix of pointless topics.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/stuff.tamius.net\/sacred-texts\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/stuff.tamius.net\/sacred-texts\/#\/schema\/person\/4677d05a4f45974f27cd21481c561c21","name":"Tamius Han","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/1ce12569905c4aff5d48778af8527565f1175c254ad56cc5e5221666ff1e222b?s=96&d=blank&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/1ce12569905c4aff5d48778af8527565f1175c254ad56cc5e5221666ff1e222b?s=96&d=blank&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1ce12569905c4aff5d48778af8527565f1175c254ad56cc5e5221666ff1e222b?s=96&d=blank&r=pg","caption":"Tamius Han"},"url":"https:\/\/stuff.tamius.net\/sacred-texts\/author\/tamius-han\/"}]}},"_links":{"self":[{"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/posts\/1946","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/comments?post=1946"}],"version-history":[{"count":1,"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/posts\/1946\/revisions"}],"predecessor-version":[{"id":1955,"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/posts\/1946\/revisions\/1955"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/media\/1947"}],"wp:attachment":[{"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/media?parent=1946"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/categories?post=1946"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/tags?post=1946"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}