Turn TTML subtitles into SMI files quickly—upload your TTML, convert to SMI, and download the converted subtitle file.
<SYNC Start="..."> values, <P Class="ENUSCC"> language classes, or <STYLE> CSS by hand..smi file downloads instantly with the same base name as the source TTML — just rename it to match your video file so Windows Media Player auto-loads the captions.TTML (Timed Text Markup Language) is a W3C XML standard used by Netflix, broadcasters, and streaming platforms for accurate, styled captions. SAMI/SMI is Microsoft's older HTML-flavoured caption format, released in 1998, that remains the format Windows Media Player and many Windows-era playback chains expect. Converting TTML to SMI is usually about meeting a player or workflow that won't read TTML directly:
.smi file with a matching base name in the same folder as the video. TTML is not natively recognised, so a TTML caption track on a .wmv or .asf file is effectively invisible until you convert it..smi companion files. If your source is a TTML caption pull from a streamer, converting to SMI matches what the rest of the community uses.tt:/ttp:/tts: prefixes, and region/style indirection make hand-editing painful. SMI's <SYNC Start="ms"><P Class="LANG">text</P> structure is closer to HTML and far easier to fix in Notepad or VS Code.Class="ENUSCC", Class="KRCC" etc. on each <P>. A multilingual TTML divided across <div xml:lang="..."> blocks collapses cleanly into a single SMI with parallel language classes.| Property | TTML | SMI (SAMI) |
|---|---|---|
| Full name | Timed Text Markup Language | Synchronized Accessible Media Interchange |
| Standardized by | W3C (TTML1 2010, TTML2 2018) | Microsoft (released June 1998), de-facto only |
| Underlying syntax | XML with tt:/ttp:/tts:/ttm: namespaces |
HTML-style tags (<SAMI>, <HEAD>, <BODY>, <SYNC>, <P>) |
| Timestamp form | 00:00:12.500 clock-time or media-time |
Millisecond integer in <SYNC Start="12500"> |
| Styling | XML <style> + <region> (CSS-like properties) |
CSS subset inside <STYLE> block |
| Multi-language | <div xml:lang="..."> blocks or separate documents |
Multiple <P Class="LangCode"> lines per <SYNC> |
| Player support | Modern web/streaming (HLS sidecar, DASH, IMSC1 profiles) | Windows Media Player, VLC, PotPlayer, KMPlayer, GOM, MPC-HC |
| Typical use today | Netflix delivery, broadcast captioning, IMSC1 | Korean drama scene, WMP workflows, legacy corporate video |
| File extension | .ttml, .ttml2, .dfxp, .xml |
.smi, .sami |
When the converter writes the SAMI body, each subtitle cue gets a Class attribute on its <P> element so Windows Media Player can offer a language picker. Common classes you'll see in the output:
| Class name | Language | Typical use |
|---|---|---|
ENUSCC |
English (US) | Default English caption track |
ENCC |
English | Generic English |
KRCC |
Korean | K-drama and Korean fansub releases |
JPCC |
Japanese | Anime and J-drama caption tracks |
CHCC / ZHCC |
Chinese | Simplified or Traditional Chinese |
FRCC |
French | French dubs/captions |
ESCC |
Spanish | LatAm and ES-ES tracks |
If your TTML has xml:lang="ko" regions, the converter maps them to Class="KRCC"; en-US becomes ENUSCC, and so on. You can hand-edit the class string post-conversion if your target player expects different names.
Yes, but the file naming has to match. Per Microsoft's SAMI documentation, WMP looks for a .smi file with the same base name as the media file, in the same directory — for example, movie.wmv plus movie.smi. If captions still don't appear, check that the "Captions and subtitles" option is enabled under Play > Lyrics, Captions, and Subtitles > On if Available. WMP's SAMI support is a legacy feature and Microsoft now recommends MediaPlayer (Windows 10/11) for new workflows.
TTML is an XML standard designed for high-end captioning with regions, animations, named styles, and strict timing semantics — it's what Netflix and broadcasters deliver. SMI was designed in 1998 as a lightweight, HTML-like text format anyone could edit in Notepad. The conversion drops TTML's region/style indirection into inline CSS and flattens timed <p> elements into <SYNC Start="..."> blocks. The result is human-readable but loses some of TTML's positioning precision.
Basic styling like bold, italic, font color, and font size transfers via inline CSS in the SMI's <STYLE> block. Advanced TTML features — region anchoring, animated <set> transitions, ruby annotations, IMSC1 image-based subtitles — do not have SAMI equivalents and are stripped. If you need pixel-accurate positioning, SMI may not be the right target; consider keeping TTML for the streaming workflow and only generating SMI for the Windows Media Player layer.
The output is written as UTF-8 by default, which is the safe choice for modern Windows Media Player builds and all modern editors. Older WMP builds on Windows XP/2003 sometimes expect ANSI (Windows-1252) or the platform code page (Windows-949 for Korean, Shift-JIS for Japanese). If your captions show as ????? or mojibake, re-save the file in your target legacy code page using Notepad's "Save As > Encoding" dropdown — SMI is plain text so this is a 10-second fix.
Yes, and that's actually one of SMI's strengths. If your TTML has <div xml:lang="en"> and <div xml:lang="ko"> blocks, the converter writes both as parallel <P Class="ENUSCC"> and <P Class="KRCC"> lines under the same <SYNC Start="..."> timecode. Windows Media Player then offers a language menu under Play > Lyrics, Captions, and Subtitles > Language. Define class names in the <STYLE> block so WMP labels them correctly.
TTML supports several timing modes: clock time (00:00:12.500), media time, frame counts (12500f), and offset time (5.5s). All of them are converted to millisecond integers for SMI's <SYNC Start="ms">, which is the only timing form SAMI understands. Frame-based TTML requires a frame rate (commonly 23.976, 24, 25, or 29.97 fps) — the converter reads ttp:frameRate from the TTML header to compute the millisecond values. If the source omits a frame rate, 30 fps is assumed.
No — the converter preserves your source timing as-is. SAMI tolerates overlapping <SYNC> blocks (each language class can have its own line), but if your TTML has cues that genuinely overlap on the same language track, the SMI output will too. If you need to clean up timing, do it in the TTML before converting, or hand-edit the <SYNC Start="..."> values in the resulting SMI text file.
For new captioning projects, no — WebVTT and TTML are the modern standards, and SAMI was effectively deprecated when Microsoft moved on from the Windows Media Player SDK. But SMI is still very much alive in three corners: Korean drama fansub releases, legacy corporate Windows Media pipelines, and a long tail of installed copies of PotPlayer/KMPlayer/GOM Player whose users prefer SMI files alongside their video library. If you need to feed any of those, converting TTML to SMI is the right move.
No. The conversion runs entirely in your browser using JavaScript — no file leaves your machine, no account, no watermark, no file-size cap beyond what your browser can hold in memory. That makes it safe for confidential broadcast captions, unreleased Netflix pulls, or any caption file you'd rather not send to a third-party server.