Convert your SUB subtitle file to ASS format in a few clicks—no installs needed.
MicroDVD .sub files store their timings as frame numbers, not clock times, so nothing can be converted out of one until a frame rate is fixed. Advanced SubStation Alpha (.ass) is the opposite kind of file: real timestamps, a named style table, and per-line override tags. This page covers the whole job — finding the frame rate your file was cut for, running the conversion, and knowing which parts of a MicroDVD file an ASS script can and cannot carry.
The conversion happens inside the page. Your file is read with the browser's FileReader, parsed by JavaScript already loaded in the tab, and handed back as a Blob download. There is no queue and no account.
{start}{end}text lines straight into the Input (SUB) box. One file at a time — the character count beside the label confirms it loaded..sub in a text editor and look at the first line. If it reads {1}{1}23.976 or similar, that is the frame rate, and you will need it — this converter reads every MicroDVD file at 25 fps and has no frame-rate control.subtitles.ass — or "📋 Copy" to paste it straight into Aegisub. Load it against the video and verify the first and last cue before you build on it.A MicroDVD line such as {25}{100}Hello means "show this from frame 25 to frame 100". What that is in seconds depends entirely on the video it was authored against, and MicroDVD's syntax has nowhere to record it. The near-universal workaround is to smuggle the rate into the first cue as {1}{1}23.976: FFmpeg's MicroDVD demuxer scans the opening lines of a file looking for exactly that shape, and the reference Python library pysubs2 refuses to read a file at all — raising UnknownFPSError — when neither an explicit rate nor that hint is available.
This converter does not read that line, and it does not offer a frame-rate control. Every MicroDVD file is parsed at 25 fps, and the {1}{1}23.976 header, if present, is treated as an ordinary cue whose visible text is the number. Two things follow. Delete that header line from the input before converting, or it becomes a caption. And do not treat the converted timings as final: open the result against the video and check the first and last cue before you build anything on top of it.
The arithmetic is simple enough to check by hand — a 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 |
That last row is the reason a frame-rate mismatch is worth taking seriously. It is not a constant offset you can nudge back into place — the error grows with runtime, so a file that looks acceptable over the opening titles is minutes out by the closing credits:
| Source authored at | Read at 25 fps, cues 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 |
The upside of landing in ASS is that the repair is easy to make afterwards. Once the script is open in a subtitle editor you are working with real timestamps on a single style, so a uniform shift or a proportional rescale applies to every Dialogue line at once — far less painful than editing frame numbers in the original .sub.
The script this page builds is a complete but deliberately plain v4.00+ file. It is a starting point for typesetting, not finished typesetting.
| Section | What is written |
|---|---|
[Script Info] |
ScriptType: v4.00+ and Collisions: Normal, plus a generator comment |
[V4+ Styles] |
Exactly one style, DefaultVCD — Arial 28, primary and secondary &H00B4FCFC, outline &H00000008, back &H80000008, bold on, alignment 2 (bottom-centre), 30 px margins |
[Events] |
One Dialogue: line per cue, layer 0, all assigned to DefaultVCD |
| Timing precision | Centiseconds — 0:00:01.04, hundredths of a second, matching the ASS time field |
| Line breaks | MicroDVD's ` |
The style uses the &HAABBGGRR hexadecimal colour notation ASS expects. If you pick SSA instead of ASS in the "To format" dropdown, the page patches that Style line on the way out: the SSA v4 builder otherwise writes those colours as raw decimals — including a negative BackColour — and the patch substitutes the &HAABBGGRR values renderers read cleanly.
MicroDVD carries inline control codes — {y:i} for italic, {y:b} bold, {y:u} underline, {c:$BBGGRR} for colour in reversed byte order, {f:name} for font and {s:n} for size, lowercase affecting one line and uppercase everything from that point on. ASS has a direct equivalent for every one of them. The conversion does not use them.
| MicroDVD input | What reaches the ASS Dialogue line |
|---|---|
{y:i}Hello |
Hello — the italic code is stripped, no {\i1} is written |
{c:$0000ff}Hello |
Hello — colour dropped, the line renders in DefaultVCD |
{f:Arial}{s:12}Hello |
Hello — font and size dropped |
| `Hello | World` |
| Frame numbers | Resolved to timestamps at 25 fps, with the caveats in the walk-through |
Everything lands on the single DefaultVCD style, so restyling in Aegisub is a one-place edit rather than a per-line cleanup. That is convenient when you are re-typesetting from scratch and lossy when you were hoping to inherit the original author's look.
{digits}{digits} followed by text. A .sub file that is really VobSub (paired with an .idx, binary, subtitle images rather than text) or a SubViewer .sub with hh:mm:ss timestamps produces zero matches and this message. Nothing is lost; switch "From format" to the format the file actually is.23.976 or 25.000 — that is the frame-rate hint line, {1}{1}23.976. This parser has no special case for it, so it becomes a real caption. Note the number, then delete the line from the input.{ at the start of the line. Windows-authored .sub files often carry one; re-save without a BOM, or paste the text in rather than uploading the file.{1234}{} never appears — MicroDVD readers vary in whether they accept an empty end-frame, and this parser requires digits in both braces. Give the cue a real end frame.< and a > — the text cleanup strips anything that looks like a tag, so a line reading 5 < 6 but 7 > 2 arrives as 5 2. Replace stray angle brackets with ‹ › or word them differently before converting.If your .sub is VobSub — a .sub plus an .idx, where the subtitles are bitmap images rather than characters — no text converter can read it, because there is no text in the file. That needs OCR. Likewise, MicroDVD files that were machine-translated line-by-line often carry the | separator in odd places; check the \N breaks in the output before you typeset over them. For the reverse direction and the other targets, start from the SUB converter hub or go straight to SUB to SRT.
No, and this is the single most common mix-up with the extension. MicroDVD .sub is a plain text file of {start}{end}text lines. VobSub .sub is a binary stream of subtitle bitmaps ripped from a DVD, always paired with a small .idx index file. Only the first is text; open the file in a text editor, and if you see readable dialogue with curly-brace numbers, it is MicroDVD. YouTube adds a third claimant to the extension, listing .sub as an alternate for SubViewer files.
Frame numbering assumes the subtitle file and one specific encode of the video share a frame rate. Re-encode the video at a different rate, or hand the file to someone with a different release, and every cue is wrong. ASS stores hours, minutes, seconds and hundredths, which stay correct regardless of how the video was encoded. That portability is the main reason to move a MicroDVD file into ASS, SRT or ASS's relatives at all.
Not automatically through this converter — MicroDVD's {y:i} and {c:$...} codes are stripped during parsing and no {\i1} or {\c&H...&} override is written in their place. If the styling matters, the practical route is to convert the timings and text here, then apply styling in Aegisub, where a single edit to the DefaultVCD style restyles the whole script at once.
ScriptType: v4.00+, which is Advanced SubStation Alpha rather than the older SubStation Alpha v4.00. That is the flavour Aegisub, libass, mpv and VLC read. Choosing SSA in the "To format" dropdown instead produces the older v4.00 style block with the colour patch described above.
The parse is a single pass over the lines with one regular expression per line and everything is held in memory as an array of cue objects, so a feature-length subtitle file of a few thousand cues converts as soon as you press the button. Because the work happens in the tab rather than on a server, the practical constraint is your browser, not an upload limit or a queue.
No. This tool reads the file with the browser's FileReader API and builds the output with JavaScript that was delivered with the page. There is no network request carrying your subtitle text, no account, and no server-side copy — which also means there is nothing to expire or delete. That is specific to the subtitle converter; xconvert's video and audio tools do work on servers.
It is skipped silently. Only lines matching {digits}{digits} become cues; blank lines, stray notes and [BEGIN]/[END] markers that some MicroDVD players expect are ignored rather than turned into empty Dialogue events. If every line is ignored you get the "No cues parsed" message instead of an empty script.
We ran a three-cue MicroDVD file — {25}{100}The quick brown fox, a piped two-line cue, and a third cue — through this exact pipeline. The output was a complete v4.00+ script with the [Script Info], [V4+ Styles] and [Events] sections, one Dialogue: 0,...,DefaultVCD, NTP,0000,0000,0000,, line per cue, and the piped cue joined with \N. Text, cue order and line breaks came through exactly. The timings are the part to verify yourself, for the reasons in the walk-through.
If you want the widest compatibility, SUB to SRT is the safe default — SubRip is the format desktop players, editors and video platforms are most likely to read. For web video, SUB to VTT is the format <track> elements expect. Pick ASS when you intend to typeset: positioning, karaoke timing, per-line overrides and a real style table are things only ASS and SSA carry.