Turn TTML subtitle files into a CSV table you can edit and reuse in your workflow, then download the converted file instantly.
.ttml, .xml, or .dfxp file onto the page, click "Add Files," or paste the XML directly into the text box. Multiple files can be queued at once. Conversion runs entirely in your browser session — nothing is uploaded to a server.<p> cue inside <body><div>, reads each cue's begin and end attributes, flattens any inline <span> or <br/> runs into a single string, and writes one row per cue.Start, End, and Text. Times are normalized to HH:MM:SS,mmm (the same millisecond-precision form SRT uses), so the spreadsheet sorts chronologically out of the box..csv file. Open it in Excel, Numbers, Google Sheets, or any CAT tool that ingests delimited text. No sign-up, no watermark, no email gate.TTML (Timed Text Markup Language) is a W3C XML standard for subtitles and captions, adopted by Netflix, Amazon, the BBC, and most streaming pipelines because it preserves precise timing, styling, and positioning data. The trade-off is that TTML is verbose XML — translators, QC reviewers, and analysts can't open it in a familiar tool and start editing. CSV strips the markup down to start time, end time, and text, which is exactly what spreadsheet-driven workflows need:
<tt:p> tags, namespace declarations, or xml:id attributes, because there aren't any to touch.=LEN(text)/((end-start)*0.001) to flag cues that exceed Netflix's 17 cps reading-speed cap, or filter by duration to find cues shorter than the BBC's 1-second minimum hold.cues table with start_ms, end_ms, and text columns gives you queryable transcripts for full-text search, analytics, or accessibility audits — far easier than reparsing XML on every read.Need to round-trip back to a player-ready format afterwards? Convert the edited spreadsheet with CSV to TTML, or jump to other delivery targets via TTML to SRT, TTML to VTT, or TTML to TXT for a transcript-only export.
| Property | TTML | CSV |
|---|---|---|
| Type | XML-based timed text | Plain-text delimited values |
| Standard | W3C TTML2 + IMSC 1.2 (Aug 2020) | RFC 4180 |
| File extension | .ttml, .xml, .dfxp |
.csv |
| Timing precision | Milliseconds; supports media, clock, and frame-rate-based time bases |
Milliseconds via HH:MM:SS,mmm text |
| Styling & positioning | Full — colors, fonts, alignment, regions, animations | None — text only |
| Used by | Netflix, Amazon Prime, BBC iPlayer, HBO Max, IMSC-compliant pipelines | Excel, Google Sheets, CAT tools, BI pipelines |
| Human-editable | Painful — XML namespaces, strict schema | Trivial — open in any spreadsheet |
| Player support | Browsers via JS libs, broadcast workflows, video players | Not a playback format |
| File size (1-hour caption track) | ~150–400 KB | ~30–60 KB |
xconvert emits a three-column CSV with a header row. The columns match what every subtitle-aware CAT tool and most accessibility audit tools expect.
| Column | Format | Example |
|---|---|---|
Start |
HH:MM:SS,mmm |
00:01:23,456 |
End |
HH:MM:SS,mmm |
00:01:26,789 |
Text |
UTF-8 string; multi-line cues joined with \n; commas/quotes escaped per RFC 4180 |
"She said, ""hello"" — and walked away." |
Times use a comma decimal separator (the same form SRT uses) so the file round-trips losslessly through any SRT-aware tool. Inline TTML <br/> becomes a newline inside the quoted text cell; styling attributes (tts:color, tts:fontWeight, region) are dropped because CSV has no place to put them.
CSV is a flat, three-column tabular format — it has nowhere to store TTML's tts:color, tts:fontStyle, tts:textAlign, region, or <span> runs. The converter intentionally flattens every cue to plain text so translators and analysts can work in a spreadsheet. If you need to preserve styling, convert back with CSV to TTML and re-author the styling, or keep the original TTML alongside the CSV as your timing/styling reference.
Yes. TTML's begin/end attributes accept several forms — clock time (00:01:23.456), offset (83.456s, 1500ms, 1.5h), and frame-based (00:01:23:12 with a ttp:frameRate). The parser normalizes all of them to milliseconds and emits HH:MM:SS,mmm. Frame-based timing uses the ttp:frameRate and ttp:frameRateMultiplier declared in the document head (e.g., 24000/1001 = 23.976 for film).
Yes. Netflix's caption-delivery spec is IMSC 1.1/1.2 (a W3C profile of TTML2), and those files use the same <tt><body><div><p> cue structure the parser walks. Styling-only attributes (tts:extent, tts:origin, tts:displayAlign) are read and ignored — the cue text and timing pass through cleanly. Image-only IMSC profiles, which embed PNG subtitle bitmaps, can't be flattened to text and aren't supported.
<span> runs?Each <p> becomes one CSV row. Inline <br/> tags become embedded newlines inside the quoted text field — Excel and Google Sheets honor them when you turn on text wrap. Nested <span> runs are concatenated in document order; their styling attributes are dropped, but their text content is preserved. The result is one cue per row, no matter how complex the inline markup was.
Yes — use CSV to TTML for the reverse trip. The columns the importer expects are the same three the exporter writes (Start, End, Text). Two cautions: (1) Excel sometimes "helpfully" reformats 00:01:23,456 as a number or a date — format the column as Text before pasting, or use Google Sheets which leaves it alone. (2) Round-tripping discards the original styling and regions, so if you need to deliver styled captions, edit the text in CSV but apply styling in a TTML-aware editor afterwards.
That's RFC 4180 escaping. Whenever a cue contains a comma, a literal quote, or a newline, the entire field is wrapped in double quotes, and embedded quotes are doubled (" becomes ""). Every standards-compliant CSV parser (Excel, Sheets, pandas, R, Python csv module) handles this transparently — you'll see the original text once the file is loaded. If you're hand-parsing the file, use a real CSV library rather than text.split(',').
xmlns:tt?The parser matches elements by local name (p, span, br, body, div), not by prefix, so files declared with xmlns="http://www.w3.org/ns/ttml", xmlns:tt=..., or xmlns:tts=... all parse correctly. DFXP files — Distribution Format Exchange Profile, an older TTML1 profile still common in iTunes and SMPTE-TT pipelines — work too; rename the extension to .ttml first if the picker rejects .dfxp.
No. The entire conversion runs in your browser using JavaScript — your TTML file is read locally, parsed in memory, and the CSV is generated as a Blob your browser downloads directly. Confidential broadcast captions, unreleased streaming content, and NDA-protected localization files never touch our servers.
TTML is the base W3C standard for XML timed text. DFXP (Distribution Format Exchange Profile) is an older TTML1 subset widely used by Apple iTunes and SMPTE-TT pipelines. IMSC (TTML Profiles for Internet Media Subtitles and Captions) is the modern W3C profile family — IMSC 1.0/1.1/1.2 — used by Netflix, Amazon, and most streaming services. All three share the same <tt><body><div><p> cue structure, and all three flatten to the same CSV here.