ASS and SSA Subtitles: What Converting to SRT Loses
What ASS to SRT conversion discards, and the two faults that corrupt the result: assumed column order, and centisecond timestamps read as milliseconds.
Advanced SubStation Alpha, and its older SubStation Alpha sibling, are the formats used where subtitles are typeset rather than merely written. Fonts, colours, exact screen positions, karaoke timing and drawing commands all live inside the file. SRT carries none of that. So converting ASS to SRT is not really a format change, it is a decision about what to throw away, and it is worth knowing exactly what goes.
What survives
The words and the timing. Nothing else. Here is a real conversion, including a positioned and coloured cue and a hard line break:
Dialogue: 0,0:00:01.50,0:00:03.20,Default,,0,0,0,,{pos(960,200)c&H00FF00&}Look at the sky
Dialogue: 0,0:00:03.30,0:00:05.00,Default,,0,0,0,,First lineNSecond line
becomes
1
00:00:01,500 --> 00:00:03,200
Look at the sky
2
00:00:03,300 --> 00:00:05,000
First line
Second lineThe override block in braces held the position and the colour, and it is gone. The \N was a hard line break and became a real one, which is correct, because SRT does express line breaks. If the styling was carrying meaning, and in typeset subtitles it often is, that meaning does not arrive in the SRT.
The column order is declared, not fixed
This is the first place naive converters break. The subtitles live under an [Events] heading, and immediately above them is a Format: line that states what the columns are:
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, TextThat line is part of the file, not part of the specification. A file that lists the columns in a different order is still perfectly valid. A converter that assumes the usual order and reads the third field as the end time will happily produce a file full of confident nonsense on any file that does not match. Read the header, or use something that does.
The timestamps are centiseconds
The second place converters break, and the harder one to spot, because the output looks plausible. An ASS timestamp is 0:00:01.50, and that final pair is hundredths of a second, not thousandths. So .50 means 500 milliseconds, not 50.
fraction correct read as ms cue is early by
.05 50 ms 5 ms 45 ms
.50 500 ms 50 ms 450 ms
.99 990 ms 99 ms 891 msThe error is never more than a second, which is exactly why it survives review. Nothing is obviously broken. The captions simply feel slightly ahead of the speaker, worst on the cues whose timings end in high fractions, and the file looks fine in a text editor. If subtitles from a converted ASS file feel subtly early, this is the first thing to check, ahead of the usual out-of-sync causes.
Not every line is a subtitle
An [Events] section can hold Comment: lines alongside Dialogue: lines. Comments are notes left by whoever made the file, translator remarks, timing markers, alternate takes, and they are not meant to be shown. A converter that treats every line under [Events]as a cue will publish someone's working notes on screen.
When not to convert at all
If the styling matters, converting to SRT is the wrong move and no tool will make it the right one. Two alternatives are usually better. Keep the ASS file and use a player or an encoder that renders it. Or, if the target is a web player, convert to WebVTT instead, which cannot do everything ASS does but can at least carry position, so a caption need not sit wherever the player defaults to. That distinction is covered in caption positioning and safe areas.
Convert to SRT when the words and timing are the point and the styling was decoration, which is the common case for a transcript, a translation base, or a platform that discards styling anyway. YouTube is one of those: it accepts many formats and applies its own presentation regardless, so styling the file for YouTube achieves nothing.
A short checklist
- Decide first whether the styling is decoration or meaning.
- Check the converter reads the
Format:line rather than assuming column order. - Spot-check one cue with a high fraction, such as
.99, for centisecond handling. - Confirm
Comment:lines did not become subtitles. - Use WebVTT rather than SRT if position needs to survive.
The ASS to SRT converter here reads the Format: header, treats the fraction as centiseconds, skips Comment: lines, and tells you how many cues lost styling rather than dropping it silently. If you are starting from the video rather than an existing subtitle file, the caption generator builds an editable track you can export as SRT or VTT directly.
Quick answers
What is lost converting ASS to SRT?
Fonts, colours, screen positioning, karaoke timing and drawing commands, because SRT carries no styling at all. The words and the timing survive, and hard line breaks written as \N become real line breaks. If the styling carried meaning rather than decoration, do not convert to SRT.
Why are my converted ASS subtitles slightly early?
Almost certainly centiseconds read as milliseconds. An ASS timestamp like 0:00:01.50 means 500 milliseconds, not 50. The resulting error is under one second, up to 891 milliseconds on a cue ending in .99, which is why it survives review while making captions feel subtly ahead of the speaker.
Why did my converted file show translator notes on screen?
Because an ASS Events section holds Comment: lines as well as Dialogue: lines, and a converter that treats every line as a cue publishes the working notes. Comments are annotations and should be skipped.