Home › Tools › ASS / SSA to SRT Converter

ASS / SSA to SRT Converter

Turn SubStation Alpha (.ass, .ssa) subtitles into clean SubRip (.srt) — in your browser, with nothing uploaded.

Drop a subtitle file here, or

Your file never leaves your device

This tool is plain JavaScript. There is no upload step and no server-side processing, so confidential captions, unreleased content and client material stay on your machine.

What this does

SubStation Alpha is the format fansub groups and heavily styled releases use. Dialogue lives in an [Events] section, one Dialogue: line per cue, and the order of the fields on those lines is declared by a Format: line above them. Most editors, mobile players and upload forms cannot read any of that, so this converter rewrites the cues as SubRip.

How to use it

  1. Paste your .ass or .ssa file into the box, or drop it onto the page.
  2. Dialogue lines are read in the order the file's own Format: line declares — the parser never assumes a fixed column order, which is what breaks most converters on SSA v4.00 files.
  3. Copy the result or download it as a .srt file.

Good to know

  • Both .ass (v4.00+) and .ssa (v4.00) are accepted. The SSA variant adds a Marked=0 field to each Dialogue line, which is handled by reading the Format: line rather than guessing.
  • A Dialogue: line is split on commas only as far as the declared field count — the Text field is last and keeps any commas of its own. This is why naive converters cut dialogue off at the first comma in the sentence.
  • Comments (Comment: lines), Picture: and Sound: lines are not dialogue and are skipped.
  • Karaoke effects ({\k}, {\kf}) are timing data, not text, so they are removed rather than rendered. The result is a plain reading copy.

What survives the conversion, and what cannot

Timing is preserved exactly. ASS writes times as 0:00:01.00 — one digit for hours, two for centiseconds. SubRip wants milliseconds with three digits and a comma. The converter multiplies the centiseconds by ten, so a cue at 0:01:02.35 comes out as 00:01:02,350 and lands in exactly the same place on the timeline.

Italics and bold come across. ASS marks them with override blocks such as {\i1}, {\i0}, {\b1} and {\b0}, which SubRip does not understand. Those are translated into the SRT tags <i> and <b>, and {\r} closes whatever was open. Everything else inside an override block — fonts, colours, outlines, karaoke timing, vector drawings — is discarded, because SubRip has nowhere to put it.

Positioning is lost, and there is no way around that. ASS can place a line anywhere on the frame using {\pos()}, {\an8} or {\move()}. SubRip has no positioning at all. Sign translations that sit beside a speaker, or captions pushed to the top of the frame so they do not cover a face, will jump to the bottom centre. If a release depends on that layout, keep the ASS as the master file and treat the SRT as a delivery copy only.

Line breaks are normalised. ASS uses \N for a hard break and \n for a soft one; both become real line breaks, which is what SubRip expects. \h, a non-breaking space, becomes an ordinary space. Cue numbers are regenerated from 1 so the file opens in every editor.

Worked example

Input — .ass
[Script Info]
ScriptType: v4.00+

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.00,0:00:04.00,Default,,0,0,0,,Hello there.
Dialogue: 0,0:00:04.20,0:00:07.00,Default,,0,0,0,,{\i1}Music playing{\i0}\NSign on wall: EXIT
Output — .srt
1
00:00:01,000 --> 00:00:04,000
Hello there.

2
00:00:04,200 --> 00:00:07,000
<i>Music playing</i>
Sign on wall: EXIT

Centiseconds became milliseconds, {\i1} became , and \N became a real line break. Nothing else about the cues changed.

FAQ

Does this upload my subtitle file anywhere?
No. The whole file is parsed in JavaScript on your device. You can disconnect from the network after the page loads and the converter still works.
Why did my sign translations end up at the bottom of the screen?
Because SRT has no positioning. ASS places those lines with {\pos()} or {\an8}, and SubRip has no equivalent field to carry the coordinates. The text is kept; the placement is not.
The output has no italics even though the original was italicised
Only {\i1} and {\b1} style overrides map to SRT tags. If a release styled italics through the [V4+ Styles] section instead of inline overrides, the styling lives in the style definition rather than the cue, and there is no inline marker to translate.
Can I convert the other way, from SRT to ASS?
Yes — use the SRT to ASS converter. It writes a complete ASS v4+ script with a default style and Dialogue: lines.

Troubleshooting

  1. No dialogue lines foundThe file needs an [Events] section, and that section needs a Format: line naming Start, End and Text. A file where the header was stripped out, or where cues were saved without the events block, has nothing to convert.
  2. Timestamps look wrong — everything is ten times too longThat is the signature of a file that was already converted from SRT by a tool that treated centiseconds as milliseconds. Re-export the original ASS and convert from that instead.
  3. The output is empty even though the file opens fine in a playerCheck the extension and the first line. Some releases ship MicroDVD ({0}{25}text) or a plain script inside a file named .ass. Those have no Dialogue: lines at all, so they need a different converter.
  4. Styling beyond italics disappearedFonts, colours and outlines are stored in override blocks or in the [V4+ Styles] section. SubRip carries only inline <i>, <b> and <u>, so everything else is dropped by design rather than by mistake.
  5. Two languages came out stacked in one cueThat is how the source was written — one Dialogue: line containing both languages separated by \N. Split it into two files if you need one language per track.

Related tools

Last updated 2026-09-21. All conversions happen locally in your browser.