Turn a .sub subtitle file into .smi in a few clicks—fast, simple, and ready to download from your browser.
MicroDVD .sub and SAMI .smi are both survivors of the early-2000s desktop video era, and they solve the same problem in opposite ways. MicroDVD is one line per cue with frame numbers for timings. SAMI is Microsoft's HTML-derived captioning format, with a CSS style block, language classes and millisecond <SYNC> markers. This converter turns the first into the second in your browser, and the notes below cover the two things that decide whether the result plays: the frame rate, and the filename.
| Property | Value |
|---|---|
| Origin | Tiamat Software's MicroDVD Player, first released March 2000; development ended 2001 |
| Standard | None — a de facto convention |
| Cue syntax | {start_frame}{end_frame}text, one cue per line |
| Timing model | Frame numbers relative to a specific encode of the video |
| Frame rate | Not part of the syntax; by convention declared as a first cue, {1}{1}23.976 |
| Line breaks | The pipe character ` |
| Styling | Inline codes — {y:i} italic, {y:b} bold, {y:u} underline, {c:$BBGGRR} colour, {f:name} font, {s:n} size |
| Multi-language | Not supported — one language per file |
| Property | Value |
|---|---|
| Full name | Microsoft Synchronized Accessible Media Interchange |
| Publisher | Microsoft; documented in Understanding SAMI 1.0, published October 2001 and updated February 2003, and released as an open, licence-free specification |
| Extensions | .smi or .sami — both are specified |
| Structure | HTML-like: <SAMI> → <HEAD> (title and CSS <STYLE>) → <BODY> of <SYNC> blocks |
| Timing model | <SYNC Start=n>, where n is elapsed media time; DirectShow and Windows Media Player accept milliseconds only |
| Clearing a caption | A following <SYNC> whose paragraph contains a non-breaking space |
| Styling | CSS, restricted to what the SAMI engine implements, plus inline HTML tags including <B>, <I>, <U>, <FONT> and <BR> |
| Multi-language | Yes — one CSS class per language, matched against the player's language selection |
| Platform support | Windows Media Player and Internet Explorer historically; YouTube accepts .smi/.sami uploads |
{start}{end}text lines into the Input (SUB) box — the character count beside the label confirms the file was read..sub in a text editor and check whether the first line reads {1}{1}23.976 or similar. This converter reads every MicroDVD file at 25 fps and renders no frame-rate control, so anything other than 25 means the result needs verifying against the video.subtitles.smi; rename it to match your video file, because that is how Windows Media Player finds it.| Part | What is written |
|---|---|
| Header | <TITLE>Subtitles</TITLE> and a <STYLE TYPE="text/css"> block wrapped in an HTML comment |
| Paragraph style | P { font-family: Arial; font-size: 16pt; color: white; background-color: black; } |
| Language class | A single class, .ENCC { Name: English; lang: en-US; } |
| Cue | <SYNC Start=1000><P Class=ENCC>text</P> — Start in milliseconds |
| Cue end | A second <SYNC> at the end time carrying , which blanks the caption |
| Line breaks | MicroDVD's ` |
| Tag case | All tags uppercase, which is what Windows Media Player has historically expected |
Two deliberate omissions are worth knowing about. There is no <SAMIParam> block, so no Copyright, Media, Metrics or Spec declaration is written — the timings are milliseconds regardless, which is the only unit DirectShow and Windows Media Player read. And only one language class is defined. SAMI's real strength is carrying several languages in one file, each on its own class, with the player switching between them; a MicroDVD source has only one language to give it, and the class it lands on is .ENCC, labelled English. Editing that class name and lang: value is a two-line change if your captions are not English.
{25}{100}Hello means frames 25 to 100. What that is in milliseconds — the only unit a <SYNC Start=> attribute understands — depends on the frame rate of the video the file was cut against, and MicroDVD has nowhere in its syntax to record one. The convention is to put it in the first cue as {1}{1}23.976: FFmpeg's MicroDVD demuxer scans the opening lines for that shape, and the reference Python library pysubs2 raises UnknownFPSError and refuses the file rather than guess when it is absent.
This converter neither reads that line nor offers a frame-rate control, so every MicroDVD file is parsed at 25 fps. Delete a {1}{1}23.976 header from the input before converting — it is not recognised as metadata and will otherwise become a caption reading 23.976. And treat the <SYNC Start=> values in the output as provisional: load the file against the media and check the first and last caption before relying on it.
The check is arithmetic you can do by hand — the frame number divided by the frame rate is the time in seconds:
| Frame number | at 23.976 fps | at 24 fps | at 25 fps | at 29.97 fps | at 30 fps |
|---|---|---|---|---|---|
| 24 | 0:00:01.001 | 0:00:01.000 | 0:00:00.960 | 0:00:00.801 | 0:00:00.800 |
| 1,500 | 0:01:02.563 | 0:01:02.500 | 0:01:00.000 | 0:00:50.050 | 0:00:50.000 |
| 90,000 | 1:02:33.754 | 1:02:30.000 | 1:00:00.000 | 0:50:03.003 | 0:50:00.000 |
A frame-rate mismatch is not a fixed offset you can nudge back into place. The error accumulates, so a file that looks fine over the opening minute is badly adrift by the end:
| Source authored at | Read at 25 fps, captions land | After 1 minute | After 10 minutes | After 1 hour |
|---|---|---|---|---|
| 23.976 fps | early | 2.5 s early | 24.6 s early | 2 min 28 s early |
| 24 fps | early | 2.4 s early | 24.0 s early | 2 min 24 s early |
| 29.97 fps | late | 11.9 s late | 1 min 59 s late | 11 min 56 s late |
| 30 fps | late | 12.0 s late | 2 min 0 s late | 12 min 0 s late |
Two smaller input quirks are worth knowing before you convert. A UTF-8 byte-order mark at the head of the file makes the first line unmatchable, because the cue pattern is anchored to an opening { — the first caption then silently disappears, and Windows-authored .sub files frequently carry a BOM. And a cue written with an empty end frame, {1234}{}, is skipped, because this parser requires digits in both braces.
Nine times out of ten it is the filename. Windows Media Player looks for a SAMI file with the same base name as the media file, with a .smi extension, sitting in the same folder — and it does not auto-detect the .sami extension. This converter always downloads as subtitles.smi, so rename it: holiday.mp4 needs holiday.smi beside it. After that, check that captions are switched on in the player, since SAMI captions are closed rather than burned in.
No, and this trips people up in both directions. .smi is also used for SMIL presentations and, on some systems, for other unrelated formats — while SAMI itself may legitimately use .sami. The reliable test is the first line: a SAMI document opens with a <SAMI> tag. Your input has the same problem from the other side, since .sub is claimed by MicroDVD, by VobSub bitmap subtitles, and by SubViewer.
SAMI can; this conversion cannot. The format's design intent is several caption tracks in one file, each <P> tagged with a CSS class such as .ENCC or .FRFRCC, and the rendering engine displays only the class matching the viewer's selected language — falling back to the first class defined if none is chosen. A MicroDVD file contains a single language, so the output defines one class. To build a multi-language SAMI file, convert each language separately and merge the <SYNC> blocks by hand, adding a class definition per language.
They do not. MicroDVD's {y:i}, {y:b}, {c:$0000ff}, {f:Arial} and {s:12} codes are stripped during parsing, and no <I>, <B> or <FONT> tag is written to replace them — even though SAMI supports all three. What you get is the paragraph style from the <STYLE> block applied uniformly: white Arial 16pt on black. Editing that one CSS rule restyles the whole file.
Milliseconds. SAMI's Metrics parameter technically allows other time units for systems that use them, but Microsoft's documentation is explicit that DirectShow and Windows Media Player support milliseconds only, and that is what this converter writes. A <SYNC Start=61000> cue appears one minute and one second into the media.
< or an &?Cue text is written into the document as-is, so a stray < risks being read as the opening of a tag by whatever parses the file. There is also an upstream effect worth knowing: during parsing, anything that looks like a tag is removed from the text, so a line reading 5 < 6 but 7 > 2 arrives as 5 2 — the characters between the brackets are gone. Substitute typographic angle quotes or reword before converting.
We ran a three-cue MicroDVD file through this pipeline. The output was a complete <SAMI> document with the header, CSS block and .ENCC class described above, and a <BODY> containing six <SYNC> blocks — one carrying each caption and one carrying at each cue's end time to blank it. A cue written with MicroDVD's pipe separator came through as two lines joined by <BR>. Text, cue order and line breaks were exact. The Start values are the part to verify against your media, for the frame-rate reasons above.
No. The file is read in the tab with the browser's FileReader API, converted by JavaScript delivered with the page, and returned as a Blob download — nothing carrying your subtitle text leaves the machine, and there is no server-side copy to expire. If SAMI turns out to be the wrong target, SUB to SRT is the most broadly compatible option and the SUB converter hub lists the rest.