{"id":1880,"date":"2026-10-12T15:13:00","date_gmt":"2026-10-12T19:13:00","guid":{"rendered":"https:\/\/www.xconvert.com\/blog\/?p=1880"},"modified":"2026-09-01T21:41:36","modified_gmt":"2026-09-02T01:41:36","slug":"ttml-dfxp-to-srt","status":"publish","type":"post","link":"https:\/\/www.xconvert.com\/blog\/ttml-dfxp-to-srt","title":{"rendered":"TTML and DFXP Subtitle Files: What They Are, How to Get SRT"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A caption file arrives from a broadcaster or a localisation vendor and it ends in <code>.ttml<\/code>, <code>.dfxp<\/code> or just <code>.xml<\/code>. You drop it next to the video in Plex and nothing happens. You drag it into VLC and it is ignored. You open it in a text editor and find XML with <code>&lt;p begin=&quot;00:00:04.200&quot; end=&quot;00:00:07.100&quot;&gt;<\/code> \u2014 the timings are all there, the text is all there, and no player will touch it. Here is what those files actually are, why DFXP and TTML are the <em>same<\/em> format under two names, and exactly what you lose when you flatten one to SRT.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><strong>Quick answer:<\/strong> <strong>DFXP is the old name for TTML<\/strong> \u2014 same XML, different label, and both often ship with a plain <code>.xml<\/code> extension. SRT is the format players actually auto-load, so converting is usually the right move. You keep the <strong>cue text and the timings<\/strong>; you lose <strong>positioning, styling, region layout and any TTML metadata<\/strong>. Convert <code>.ttml<\/code> files on <a href=\"https:\/\/www.xconvert.com\/convert-ttml-to-srt\">xconvert\u2019s TTML to SRT converter<\/a> and <code>.dfxp<\/code> files on the <a href=\"https:\/\/www.xconvert.com\/convert-dfxp-to-srt\">DFXP to SRT converter<\/a> \u2014 for both, processing happens locally in your browser. One caveat before you start: they read <strong>clock times<\/strong> (<code>00:00:04.200<\/code>) only, so a file timed in seconds, frames or ticks converts to cues that all sit at zero.<\/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=\"#same-thing\">DFXP and TTML are the same format<\/a><\/li><li><a href=\"#origins\">Where these files come from<\/a><\/li><li><a href=\"#why-srt\">Why SRT is the format that actually plays<\/a><\/li><li><a href=\"#survives\">What survives the conversion, and what doesn\u2019t<\/a><\/li><li><a href=\"#timing\">The timing trap: frames and ticks<\/a><\/li><li><a href=\"#tool\">Convert TTML or DFXP to SRT on xconvert<\/a><\/li><li><a href=\"#faq\">FAQ<\/a><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"same-thing\">DFXP and TTML are the same format<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is the single fact that unblocks most people. The W3C\u2019s TTML 1 Recommendation says so in as many words:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>\u201cIn previous drafts of this specification, TTML was referred to as DFXP (Distribution Format Exchange Profile). This latter term is retained for historical reasons in certain contexts, such as profile names and designators\u2026\u201d<\/p><\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">So <strong>DFXP was the working name; TTML is the published name<\/strong>. A <code>.dfxp<\/code> file is a TTML document. A <code>.ttml<\/code> file is a TTML document. And an <code>.xml<\/code> file handed over by a captioning house is very often <em>also<\/em> a TTML document \u2014 the extension carries no information about the contents. YouTube\u2019s own caption-format documentation makes the point unusually plainly: its supported-formats table gives DFXP a single row covering both <code>.ttml<\/code> and <code>.dfxp<\/code>, and says of them, <em>\u201cThese files types are interpreted as TTML files.\u201d<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What differs between files you will actually receive is the <strong>profile<\/strong> \u2014 a constrained subset of TTML defined for a particular delivery chain:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Name<\/th><th>What it is<\/th><th>Status<\/th><\/tr><\/thead><tbody><tr><td><strong>TTML 1<\/strong><\/td><td>The base Timed Text Markup Language. Third Edition is a W3C Recommendation dated 8 November 2018<\/td><td>W3C Recommendation<\/td><\/tr><tr><td><strong>TTML 2<\/strong><\/td><td>The successor, with richer styling (including ruby annotation and animation)<\/td><td>W3C Recommendation<\/td><\/tr><tr><td><strong>DFXP<\/strong><\/td><td>The pre-publication name for TTML; survives in profile designators and in the <code>.dfxp<\/code> extension<\/td><td>Historical alias<\/td><\/tr><tr><td><strong>IMSC 1.1<\/strong><\/td><td>Two profiles of TTML2 for subtitle delivery \u2014 a <strong>Text Profile<\/strong> and an <strong>Image Profile<\/strong>. W3C Recommendation, 8 November 2018<\/td><td>W3C Recommendation<\/td><\/tr><tr><td><strong>EBU-TT-D<\/strong><\/td><td>The EBU\u2019s TTML-based distribution format for subtitles over IP networks (Tech 3380, v1.0.1, May 2018)<\/td><td>EBU specification<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">All five open in a text editor as XML. All five carry <code>&lt;p&gt;<\/code> elements with <code>begin<\/code> and <code>end<\/code> attributes. Only the details of styling, layout and permitted attributes differ.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"origins\">Where these files come from<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">TTML\/DFXP is a <strong>delivery and interchange<\/strong> format, not a consumer one. You typically get one because a broadcaster or streaming platform supplied captions in their required deliverable (usually an IMSC or EBU-TT profile), because a localisation vendor exported the master rather than a player-ready sidecar, because a caption tool exported \u201cXML\u201d without saying which XML, or because a legacy Flash-era workflow produced <code>.dfxp<\/code> \u2014 which is where most surviving <code>.dfxp<\/code> files date from.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The common thread: the file was produced for a <em>pipeline<\/em>, and you are trying to use it in a <em>player<\/em>. Those are different jobs, which is why the file is technically perfect and practically useless.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"why-srt\">Why SRT is the format that actually plays<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">SRT (SubRip) has no formal standard body behind it \u2014 it is a plain-text de-facto format that won on sheer simplicity: a cue number, a timestamp line, the text, a blank line. That simplicity is exactly why it is the format with the widest player pickup.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Destination<\/th><th>Takes TTML \/ DFXP?<\/th><th>Takes SRT?<\/th><th>Notes<\/th><\/tr><\/thead><tbody><tr><td><strong>VLC, mpv, desktop players<\/strong><\/td><td>Partial and inconsistent<\/td><td>Yes<\/td><td>SRT sidecars are auto-detected next to the video file<\/td><\/tr><tr><td><strong>Plex, Jellyfin, Emby<\/strong><\/td><td>Not reliably<\/td><td>Yes<\/td><td>Sidecar naming (<code>Movie.en.srt<\/code>) is the standard mechanism<\/td><\/tr><tr><td><strong>HTML5 <code>&lt;video&gt;<\/code><\/strong><\/td><td>No<\/td><td>No<\/td><td>The <code>&lt;track&gt;<\/code> element requires <strong>WebVTT<\/strong> \u2014 MDN: <em>\u201cThe tracks are formatted in WebVTT format (<code>.vtt<\/code> files)\u201d<\/em><\/td><\/tr><tr><td><strong>YouTube<\/strong><\/td><td>Yes<\/td><td>Yes<\/td><td>YouTube accepts <code>.ttml<\/code>, <code>.dfxp<\/code>, <code>.srt<\/code>, <code>.vtt<\/code>, <code>.sbv<\/code> and a long list of broadcast formats<\/td><\/tr><tr><td><strong>Smart TVs, set-top boxes<\/strong><\/td><td>Varies by profile<\/td><td>Usually<\/td><td>Devices in broadcast chains often want a <em>specific<\/em> TTML profile, not TTML generally<\/td><\/tr><tr><td><strong>Editing software<\/strong><\/td><td>Varies<\/td><td>Yes<\/td><td>SRT is the near-universal import<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Two things fall out of that table. First, <strong>if your destination is a web page, SRT is not your endpoint either<\/strong> \u2014 browsers only accept WebVTT. Second, <strong>YouTube is the outlier that takes the original file<\/strong>, so if YouTube is the only destination you may not need to convert at all.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"survives\">What survives the conversion, and what doesn\u2019t<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">TTML is a styling and layout language that happens to carry text. SRT is text that happens to carry timings. Flattening one to the other is a deliberate loss of information, and it is worth knowing which information.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"939\" src=\"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/ttml-srt-survives.png\" alt=\"Feature matrix comparing TTML and SRT: cue text and timings survive the conversion; italic and bold usually survive; region positioning, colour styling, ruby annotation, per-cue metadata and bitmap image subtitles do not\" class=\"wp-image-1879\" srcset=\"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/ttml-srt-survives.png 1600w, https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/ttml-srt-survives-300x176.png 300w, https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/ttml-srt-survives-1024x601.png 1024w, https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/ttml-srt-survives-768x451.png 768w, https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/ttml-srt-survives-1536x901.png 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The losses that matter in practice:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Positioning and regions.<\/strong> TTML places cues inside declared <code>&lt;region&gt;<\/code> boxes, so a caption can sit top-left to avoid burned-in text underneath. SRT has no positioning concept at all \u2014 every cue lands wherever the player puts subtitles, which is bottom-centre.<\/li><li><strong>Styling.<\/strong> Colours, fonts, backgrounds, outlines and opacity are all TTML style attributes with no SRT equivalent. Most players do honour inline <code>&lt;i&gt;<\/code>, <code>&lt;b&gt;<\/code> and <code>&lt;u&gt;<\/code> in SRT, and many honour <code>&lt;font color=&quot;\u2026&quot;&gt;<\/code>, but none of that is specified anywhere \u2014 it is convention, and support varies.<\/li><li><strong>Multiple languages in one document.<\/strong> TTML can carry several <code>xml:lang<\/code> divisions in one file; SRT is one language per file, so a multilingual TTML has to become several SRTs.<\/li><li><strong>Ruby annotation<\/strong> (furigana over Japanese kanji, a TTML2 feature) has no SRT representation whatsoever.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">And one hard stop worth checking first: <strong>IMSC defines an Image Profile whose subtitles are bitmap images, not text.<\/strong> The W3C abstract describes the two profiles as \u201ca text-only profile and an image-only profile.\u201d If your file is the image profile, there is no text to extract \u2014 the words are pixels, and recovering them needs optical character recognition, which xconvert does not do. Open the file in a text editor: base64 blobs and no readable dialogue means that is what you have.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"timing\">The timing trap: frames and ticks<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">SRT timestamps are always the same shape: <code>HH:MM:SS,mmm<\/code>. TTML timestamps are not, and this is where naive conversions go wrong.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The TTML specification allows a time expression as <strong>clock-time<\/strong> (<code>00:00:04.200<\/code>, and optionally with a frames field) or as <strong>offset-time<\/strong> with a metric \u2014 <code>h<\/code>, <code>m<\/code>, <code>s<\/code>, <code>ms<\/code>, <code>f<\/code> for frames, or <code>t<\/code> for ticks. So all of these are valid TTML and all mean different things:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><code>begin=&quot;00:00:04.200&quot;<\/code> \u2014 plain clock time with a fractional part. <strong>This is the only form our converter reads.<\/strong><\/li><li><code>begin=&quot;4.2s&quot;<\/code> \u2014 offset time in seconds.<\/li><li><code>begin=&quot;105f&quot;<\/code> \u2014 offset time in <strong>frames<\/strong>, which is only meaningful once you know <code>ttp:frameRate<\/code> (and, for NTSC-family rates, <code>ttp:frameRateMultiplier<\/code>).<\/li><li><code>begin=&quot;42000000t&quot;<\/code> \u2014 offset time in <strong>ticks<\/strong>, meaningless without <code>ttp:tickRate<\/code>.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Check your file before you trust the output.<\/strong> Our converter\u2019s time parser matches one shape \u2014 <code>[HH:]MM:SS<\/code> followed by a <code>.<\/code> or <code>,<\/code> and a fractional part \u2014 and returns <strong>zero<\/strong> for anything else. So <code>4.2s<\/code>, <code>105f<\/code> and <code>42000000t<\/code> all become <code>00:00:00,000<\/code>, and so does a bare clock time with no fraction such as <code>00:00:04<\/code>. Nothing warns you: the cue count is right, the text is right, and every timestamp is zero. Open the TTML in a text editor and look at the <code>begin<\/code> attributes. If they all look like <code>00:00:04.200<\/code>, you are fine. If they end in <code>s<\/code>, <code>ms<\/code>, <code>f<\/code> or <code>t<\/code>, this converter is the wrong tool for that file \u2014 get the supplier to re-export in clock time, or convert with something that reads <code>ttp:frameRate<\/code> and <code>ttp:tickRate<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tool\">Convert TTML or DFXP to SRT on xconvert<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The converters are extension-specific, so pick the page that matches the file you have:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Open <a href=\"https:\/\/www.xconvert.com\/convert-ttml-to-srt\">xconvert.com\/convert-ttml-to-srt<\/a> for a <code>.ttml<\/code> file, or <a href=\"https:\/\/www.xconvert.com\/convert-dfxp-to-srt\">xconvert.com\/convert-dfxp-to-srt<\/a> for a <code>.dfxp<\/code> file.<\/li><li>Click <strong>&#x1f4c2; Upload .ttml<\/strong> (or <strong>Upload .dfxp<\/strong>) and pick your caption file.<\/li><li>A plain <code>.xml<\/code> file needs no rename. The parser is chosen by the <strong>From<\/strong> dropdown, not by the file\u2019s extension, and the picker\u2019s accept list includes <code>text\/*<\/code>, so an XML caption file is selectable as-is \u2014 if your file manager greys it out, switch the picker to <em>All Files<\/em>.<\/li><li><strong>Look at the first timestamp in the output before you save it.<\/strong> If every cue starts at <code>00:00:00,000<\/code>, the source used offset, frame or tick times, which this converter reads as zero (see <a href=\"#timing\">the timing trap<\/a>). Nothing is flagged on screen, so this check is the only thing that catches it.<\/li><li>Click <strong>Convert \u2192<\/strong> and save the <code>.srt<\/code>.<\/li><li>Rename the result to match your video (<code>Movie.en.srt<\/code> next to <code>Movie.mkv<\/code>) so Plex, Jellyfin and VLC pick it up automatically.<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Because this is a text-only transform, the whole conversion happens locally in your browser, and nothing is stored afterwards. That also means a very large broadcast caption file converts as fast as your machine can parse it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If your destination is a web page rather than a player, take the SRT one step further: <a href=\"https:\/\/www.xconvert.com\/blog\/convert-srt-to-vtt\/\">converting SRT to VTT<\/a> covers the WebVTT header and the timestamp change that HTML5 <code>&lt;track&gt;<\/code> requires.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq\">FAQ<\/h2>\n\n\n\n<h5 class=\"wp-block-heading\">What is the difference between TTML and DFXP?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">There is no format difference. DFXP (Distribution Format Exchange Profile) was the name used in the draft specifications for what the W3C ultimately published as TTML; the spec itself says the term \u201cis retained for historical reasons in certain contexts, such as profile names and designators.\u201d In practice <code>.dfxp<\/code> files tend to be older, often from Flash-era workflows, but a <code>.dfxp<\/code> and a <code>.ttml<\/code> are read by the same parser.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Why won\u2019t VLC or Plex load my .ttml subtitle file?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Two reasons stack up. Media servers detect <strong>sidecar subtitles by extension<\/strong>, and <code>.ttml<\/code>\/<code>.dfxp<\/code>\/<code>.xml<\/code> are not in the list they scan for, so the file is never considered in the first place. And even when a player is pointed at the file directly, TTML support is partial and profile-dependent rather than universal, because TTML is a full styling and layout language rather than a simple cue list. Converting to SRT sidesteps both problems.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Can I just rename a .ttml file to .srt?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">No. TTML is XML with <code>&lt;p begin=&quot;\u2026&quot; end=&quot;\u2026&quot;&gt;<\/code> elements; SRT is numbered blocks with <code>HH:MM:SS,mmm --&gt; HH:MM:SS,mmm<\/code> timestamp lines. A rename produces a file the player opens and then discards as unparseable. Renaming <code>.xml<\/code> to <code>.ttml<\/code> <em>is<\/em> fine, though, because those two really do contain the same thing.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Will I lose the caption positioning and colours?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, and that is inherent to SRT rather than to any particular converter. SRT has no region, no positioning and no styling model \u2014 a cue is text with a start and an end. Italic, bold and underline usually survive because most players honour inline HTML-style tags by convention, but top-of-screen placement and per-cue colour do not. If positioning matters, convert to <strong>ASS\/SSA<\/strong> instead, which does have a positioning model.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">My converted subtitles are out of sync from the very first line. Why?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Check whether they are <em>all at zero<\/em> first, because that is a different problem. Our TTML parser reads only clock times with a fractional part (<code>00:00:04.200<\/code>); offset times (<code>4.2s<\/code>), frame times (<code>105f<\/code>), tick times (<code>42000000t<\/code>) and bare clock times (<code>00:00:04<\/code>) all parse as <strong>0<\/strong>, so every cue stacks at <code>00:00:00,000<\/code> with no error message. If that is what you are seeing, the fix is a source file in clock time, not a timing nudge.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the timings are present but wrong, then it is a frame-rate or tick-rate issue in whatever produced the file. TTML timings in frames or ticks are interpretable only alongside the document\u2019s <code>ttp:frameRate<\/code> or <code>ttp:tickRate<\/code>. A constant offset points at a frame-rate mismatch; a slow drift points at the NTSC 1000\/1001 multiplier being applied where it shouldn\u2019t be, or vice versa.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">My TTML file has no readable text in it \u2014 just image data. What now?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">You have an <strong>IMSC Image Profile<\/strong> file. IMSC defines two profiles, \u201ca text-only profile and an image-only profile,\u201d and the image profile stores each subtitle as a bitmap rather than as characters. There is no text to extract, so no format conversion can produce an SRT from it \u2014 recovering the words needs OCR, which xconvert does not do. Ask whoever supplied the file for the text profile, which they will almost always have.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Does the conversion upload my caption file anywhere?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">No. TTML-to-SRT is a text transform, so processing happens locally in your browser, on your own machine. That matters more than usual for captions, which routinely contain unreleased dialogue under embargo.<\/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-08-31.<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.w3.org\/TR\/ttml1\/\">W3C \u2014 Timed Text Markup Language 1 (TTML1), Third Edition<\/a> \u2014 Recommendation dated 8 November 2018; the DFXP naming note quoted above.<\/li><li><a href=\"https:\/\/www.w3.org\/TR\/ttml1\/#timing-value-timeExpression\">W3C \u2014 TTML1 time expression syntax<\/a> \u2014 clock-time and offset-time forms and the <code>f<\/code> \/ <code>t<\/code> metrics governed by <code>ttp:frameRate<\/code> and <code>ttp:tickRate<\/code>.<\/li><li><a href=\"https:\/\/www.w3.org\/TR\/ttml-imsc1.1\/\">W3C \u2014 TTML Profiles for Internet Media Subtitles and Captions 1.1 (IMSC 1.1)<\/a> \u2014 Recommendation 8 November 2018; defines the text-only and image-only profiles.<\/li><li><a href=\"https:\/\/tech.ebu.ch\/docs\/tech\/tech3380.pdf\">EBU Tech 3380 \u2014 EBU-TT-D Subtitling Distribution Format (PDF)<\/a> \u2014 the TTML-based format for subtitle distribution over IP, v1.0.1 (May 2018). Linked as the PDF because the HTML publication page returns 403 to ordinary clients.<\/li><li><a href=\"https:\/\/support.google.com\/youtube\/answer\/2734698\">YouTube Help \u2014 Supported subtitle and caption files<\/a> \u2014 gives DFXP one row covering <code>.ttml<\/code> and <code>.dfxp<\/code> (\u201cThese files types are interpreted as TTML files\u201d), alongside SRT, VTT, SBV and the broadcast formats.<\/li><li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTML\/Reference\/Elements\/track\">MDN \u2014 <code>&lt;track&gt;<\/code>: The Embed Text Track element<\/a> \u2014 HTML5 text tracks are WebVTT <code>.vtt<\/code> files.<\/li><li>xconvert\u2019s subtitle converter source (<code>parsers.ts<\/code>) \u2014 the <code>parseTime<\/code> regex accepts <code>[HH:]MM:SS[.,]fraction<\/code> and returns <code>0<\/code> for every other TTML time expression, which is where the offset\/frame\/tick caveat above comes from.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>DFXP is just the old name for TTML. Here is why players ignore both, what you lose converting to SRT, and how to do it without uploading the file.<\/p>\n","protected":false},"author":4,"featured_media":1877,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,14],"tags":[],"class_list":["post-1880","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>TTML and DFXP Subtitle Files: What They Are, How to Get SRT<\/title>\n<meta name=\"description\" content=\"DFXP is just the old name for TTML. Here is why players ignore both, what you lose converting to SRT, and how to do it without uploading the file.\" \/>\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\/ttml-dfxp-to-srt\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"TTML and DFXP Subtitle Files: What They Are, How to Get SRT\" \/>\n<meta property=\"og:description\" content=\"DFXP is just the old name for TTML. Here is why players ignore both, what you lose converting to SRT, and how to do it without uploading the file.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.xconvert.com\/blog\/ttml-dfxp-to-srt\" \/>\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-10-12T19:13:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/featured-11.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"840\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Stephanie Taylor\" \/>\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=\"Stephanie Taylor\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/ttml-dfxp-to-srt#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/ttml-dfxp-to-srt\"},\"author\":{\"name\":\"Stephanie Taylor\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/#\\\/schema\\\/person\\\/ae9300506c0e9e85f1a6ece4d762980d\"},\"headline\":\"TTML and DFXP Subtitle Files: What They Are, How to Get SRT\",\"datePublished\":\"2026-10-12T19:13:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/ttml-dfxp-to-srt\"},\"wordCount\":2266,\"image\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/ttml-dfxp-to-srt#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/featured-11.png\",\"articleSection\":[\"How To Guides\",\"Tools\"],\"inLanguage\":\"en-CA\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/ttml-dfxp-to-srt\",\"url\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/ttml-dfxp-to-srt\",\"name\":\"TTML and DFXP Subtitle Files: What They Are, How to Get SRT\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/ttml-dfxp-to-srt#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/ttml-dfxp-to-srt#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/featured-11.png\",\"datePublished\":\"2026-10-12T19:13:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/#\\\/schema\\\/person\\\/ae9300506c0e9e85f1a6ece4d762980d\"},\"description\":\"DFXP is just the old name for TTML. Here is why players ignore both, what you lose converting to SRT, and how to do it without uploading the file.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/ttml-dfxp-to-srt#breadcrumb\"},\"inLanguage\":\"en-CA\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/ttml-dfxp-to-srt\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-CA\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/ttml-dfxp-to-srt#primaryimage\",\"url\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/featured-11.png\",\"contentUrl\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/featured-11.png\",\"width\":1600,\"height\":840,\"caption\":\"The xconvert TTML to SRT converter at \\\/convert-ttml-to-srt with the Upload .ttml button highlighted \u2014 turn broadcast captions into a player-ready SRT\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/ttml-dfxp-to-srt#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.xconvert.com\\\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"TTML and DFXP Subtitle Files: What They Are, How to Get SRT\"}]},{\"@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\\\/ae9300506c0e9e85f1a6ece4d762980d\",\"name\":\"Stephanie Taylor\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-CA\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/af9a54599087d3f3dd2d0ea950291c9e18fcc503af09b136b37fa52c418fe467?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/af9a54599087d3f3dd2d0ea950291c9e18fcc503af09b136b37fa52c418fe467?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/af9a54599087d3f3dd2d0ea950291c9e18fcc503af09b136b37fa52c418fe467?s=96&d=mm&r=g\",\"caption\":\"Stephanie Taylor\"},\"url\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/author\\\/stephanie\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"TTML and DFXP Subtitle Files: What They Are, How to Get SRT","description":"DFXP is just the old name for TTML. Here is why players ignore both, what you lose converting to SRT, and how to do it without uploading the file.","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\/ttml-dfxp-to-srt","og_locale":"en_US","og_type":"article","og_title":"TTML and DFXP Subtitle Files: What They Are, How to Get SRT","og_description":"DFXP is just the old name for TTML. Here is why players ignore both, what you lose converting to SRT, and how to do it without uploading the file.","og_url":"https:\/\/www.xconvert.com\/blog\/ttml-dfxp-to-srt","og_site_name":"XConvert Blog","article_publisher":"https:\/\/www.facebook.com\/xconvertcom","article_published_time":"2026-10-12T19:13:00+00:00","og_image":[{"width":1600,"height":840,"url":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/featured-11.png","type":"image\/png"}],"author":"Stephanie Taylor","twitter_card":"summary_large_image","twitter_creator":"@xconvert_com","twitter_site":"@xconvert_com","twitter_misc":{"Written by":"Stephanie Taylor","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.xconvert.com\/blog\/ttml-dfxp-to-srt#article","isPartOf":{"@id":"https:\/\/www.xconvert.com\/blog\/ttml-dfxp-to-srt"},"author":{"name":"Stephanie Taylor","@id":"https:\/\/www.xconvert.com\/blog\/#\/schema\/person\/ae9300506c0e9e85f1a6ece4d762980d"},"headline":"TTML and DFXP Subtitle Files: What They Are, How to Get SRT","datePublished":"2026-10-12T19:13:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.xconvert.com\/blog\/ttml-dfxp-to-srt"},"wordCount":2266,"image":{"@id":"https:\/\/www.xconvert.com\/blog\/ttml-dfxp-to-srt#primaryimage"},"thumbnailUrl":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/featured-11.png","articleSection":["How To Guides","Tools"],"inLanguage":"en-CA"},{"@type":"WebPage","@id":"https:\/\/www.xconvert.com\/blog\/ttml-dfxp-to-srt","url":"https:\/\/www.xconvert.com\/blog\/ttml-dfxp-to-srt","name":"TTML and DFXP Subtitle Files: What They Are, How to Get SRT","isPartOf":{"@id":"https:\/\/www.xconvert.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.xconvert.com\/blog\/ttml-dfxp-to-srt#primaryimage"},"image":{"@id":"https:\/\/www.xconvert.com\/blog\/ttml-dfxp-to-srt#primaryimage"},"thumbnailUrl":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/featured-11.png","datePublished":"2026-10-12T19:13:00+00:00","author":{"@id":"https:\/\/www.xconvert.com\/blog\/#\/schema\/person\/ae9300506c0e9e85f1a6ece4d762980d"},"description":"DFXP is just the old name for TTML. Here is why players ignore both, what you lose converting to SRT, and how to do it without uploading the file.","breadcrumb":{"@id":"https:\/\/www.xconvert.com\/blog\/ttml-dfxp-to-srt#breadcrumb"},"inLanguage":"en-CA","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.xconvert.com\/blog\/ttml-dfxp-to-srt"]}]},{"@type":"ImageObject","inLanguage":"en-CA","@id":"https:\/\/www.xconvert.com\/blog\/ttml-dfxp-to-srt#primaryimage","url":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/featured-11.png","contentUrl":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/08\/featured-11.png","width":1600,"height":840,"caption":"The xconvert TTML to SRT converter at \/convert-ttml-to-srt with the Upload .ttml button highlighted \u2014 turn broadcast captions into a player-ready SRT"},{"@type":"BreadcrumbList","@id":"https:\/\/www.xconvert.com\/blog\/ttml-dfxp-to-srt#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.xconvert.com\/blog"},{"@type":"ListItem","position":2,"name":"TTML and DFXP Subtitle Files: What They Are, How to Get SRT"}]},{"@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\/ae9300506c0e9e85f1a6ece4d762980d","name":"Stephanie Taylor","image":{"@type":"ImageObject","inLanguage":"en-CA","@id":"https:\/\/secure.gravatar.com\/avatar\/af9a54599087d3f3dd2d0ea950291c9e18fcc503af09b136b37fa52c418fe467?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/af9a54599087d3f3dd2d0ea950291c9e18fcc503af09b136b37fa52c418fe467?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/af9a54599087d3f3dd2d0ea950291c9e18fcc503af09b136b37fa52c418fe467?s=96&d=mm&r=g","caption":"Stephanie Taylor"},"url":"https:\/\/www.xconvert.com\/blog\/author\/stephanie"}]}},"_links":{"self":[{"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/posts\/1880","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\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/comments?post=1880"}],"version-history":[{"count":2,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/posts\/1880\/revisions"}],"predecessor-version":[{"id":2321,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/posts\/1880\/revisions\/2321"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/media\/1877"}],"wp:attachment":[{"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/media?parent=1880"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/categories?post=1880"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/tags?post=1880"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}