CaptionPass
AlphaYou're using an early release of CaptionPass. Features and limits may change; report bugs or ideas using the contact email in the footer or on Pricing.

TTML and DFXP — broadcast-style timed text on the web

TTML (Timed Text Markup Language) and the older DFXP label describe XML-based caption documents common in broadcast, OTT, and some LMS stacks. On the open web, plain SRT or WebVTT still wins for simple uploads — but you will still see TTML when a client asks for “IMSC” or when a mastering house hands off a sidecar that is richer than a three-line SRT.

What makes TTML different from SRT or VTT

  • XML tree. Cues, regions, styles, and metadata live in elements — not sequential blocks of plain text. A missing namespace or wrong profile can make a file invalid for a strict player even if it looks fine in a text editor.
  • Timing vocabulary. TTML can express clock time, frame-based time, or tick-based time. If the frame rate in the document does not match the video you marry it to, cues slip — see timecode and frame rate.
  • Styling and layout. TTML can describe fonts, regions, and alignment. Many web players and social uploaders ignore most of that and only ingest plain text cues. Assume styling will be flattened or dropped unless your delivery spec says otherwise.

DFXP vs TTML in conversation

People still say “DFXP” when they mean an XML sidecar from an older broadcast toolchain. In practice, validate against what your receiver documents — YouTube, TikTok, HTML5, or an LMS — rather than assuming one TTML dialect maps cleanly to another without conversion.

Encoding and tooling

Like other text sidecars, TTML should be saved as UTF-8. If you strip namespaces or pretty-print aggressively, keep a checksum-friendly copy for regression tests — small XML edits can reorder whitespace and confuse diff-based review.

CaptionPass and TTML

CaptionPass can ingest TTML and emit platform-tuned outputs (for example SRT for short-form or WebVTT for HTML5) using presets documented in the HTTP API. When you need TTML out for an LMS pipeline, use the lms preset so the emitter targets TTML-friendly structure.

Run a TTML file through CaptionPass on the home page to see diagnostics and normalized output side by side.