ASS to SRT: Subtitle Format Conversion Guide
🎬 Ready to convert? Use the free browser-based ASS to SRT Converter — no upload, no signup.
Open Converter →Table of Contents
If you work with video subtitles — anime fansubs, foreign language films, or custom caption tracks — you have almost certainly encountered the .ass format. ASS (Advanced SubStation Alpha) is the subtitle standard for high-quality fan releases, offering precise positioning, custom fonts, color styling, and karaoke effects. The problem: most devices, platforms, and video editors do not support it.
SRT (SubRip Text) is the opposite in almost every way — it has almost no styling capability, but it works everywhere. This guide covers everything you need to know to convert ASS to SRT correctly, including what gets lost, how timestamps are translated, and how to handle batch conversions efficiently.
What Is the ASS Format?
ASS stands for Advanced SubStation Alpha — an evolution of the older SSA (SubStation Alpha) format developed in the early 2000s. An ASS file is a structured plain-text file divided into sections:
- [Script Info] — metadata like title, creator, and playback resolution
- [V4+ Styles] — defines named styles with font, size, color, border, shadow, and alignment properties
- [Events] — the actual timed subtitle events, each referencing a defined style
The [Events] section is the heart of the file. It begins with a Format: line that declares the column order, followed by Dialogue: lines for each subtitle cue. A typical dialogue line looks like:
Dialogue: 0,0:01:02.34,0:01:05.12,Default,,0,0,0,,This is the subtitle text\Nwith a second line.
The timestamp format is H:MM:SS.cc where cc is centiseconds (hundredths of a second). Style override tags are embedded inline in curly braces: {\i1}italic text{\i0}, {\c&H0000FF&}colored text{\r}.
What Is the SRT Format?
SRT (SubRip Text) is a plain-text format developed alongside the SubRip subtitle ripper in the early 2000s. Its structure is elegantly simple:
1 00:01:02,340 --> 00:01:05,120 This is the subtitle text with a second line. 2 00:01:07,000 --> 00:01:09,500 Next subtitle here.
Each cue has four components: a sequential index number, a timestamp range in HH:MM:SS,mmm format (millisecond precision, comma as decimal separator), the subtitle text (which can span multiple lines), and a blank line separator. That is the entire specification.
Many video players accept limited HTML-like tags in SRT text — <i>, <b>, <u>, and <font color> — but support is inconsistent across players. The safest SRT output is plain text only.
Why Convert ASS to SRT?
The main reason to convert is compatibility. ASS is a niche format — it requires a player that explicitly supports it and has a renderer capable of handling the style engine. SRT is supported everywhere:
- Smart TVs — nearly all support SRT; ASS support varies wildly by manufacturer and firmware version
- Streaming devices — Roku, Fire TV, Apple TV, Chromecast — SRT is the common denominator
- Video editors — Premiere Pro, Final Cut Pro, DaVinci Resolve all handle SRT; ASS import is unreliable
- Video platforms — YouTube, Vimeo, and most streaming services accept SRT for caption uploads
- Mobile players — iOS and Android built-in players understand SRT; ASS requires a third-party app
A secondary reason is simplicity. If the original ASS file uses complex overlapping dialogue layers, custom positioning, or animated effects, and you just need the words timed correctly, SRT gives you exactly that — clean, portable, text-only.
What You Lose in Conversion
Understanding what gets removed helps you decide whether ASS→SRT is the right choice for your use case.
| ASS Feature | In SRT |
|---|---|
| Custom fonts and sizes | Removed — player default font used |
| Color styling ({\c&H...}) | Removed |
| Screen positioning ({\pos(x,y)}) | Removed — player decides placement |
| Karaoke timing ({\k}, {\kf}) | Removed — syllable text preserved |
| Animated transforms ({\t(...)}) | Removed |
| Drawing mode vector shapes | Removed entirely (not text) |
| Multiple styled layers | Merged into single text block per timestamp |
| Bold/italic/underline ({\b1},{\i1}) | Removed (basic; could be translated to <b>/<i>) |
| \N hard line breaks | Converted to real newlines ✓ |
| Dialogue text content | Fully preserved ✓ |
| Timing (start/end) | Fully preserved with ms precision ✓ |
The most critical loss for anime fansubs is positioning. Many fansub groups use ASS positioning to place subtitle text above characters speaking in the top portion of the frame, or to overlay sign translations at precise screen positions. In SRT, all text appears in the default location (usually bottom-center), which may obscure video content or look incorrect for some scenes.
Format Internals: How ASS Parsing Works
Correctly parsing ASS requires reading the Format: line rather than assuming a fixed column order. The standard column order is:
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
But not all files follow this exactly. A parser that hard-codes column positions will fail on non-standard files. The correct approach:
- Read the
Format:line and build a column index map - For each
Dialogue:line, split into exactly N fields where N = number of Format columns - The split must respect that the Text field (always last) can contain commas — split on the first N-1 commas only
This matters in practice because the Text field frequently contains dialogue with commas: "Yes, I know, but that is not the point." A naive split(',') would truncate this at the first comma.
Timestamp Conversion Details
ASS timestamps use centiseconds as the fractional unit. SRT uses milliseconds. The conversion is a simple multiplication:
| ASS Timestamp | SRT Timestamp | Note |
|---|---|---|
| 0:01:02.34 | 00:01:02,340 | cc × 10 = ms |
| 1:23:45.07 | 01:23:45,070 | Leading zero on single-digit ms |
| 0:00:00.00 | 00:00:00,000 | Valid — starts at time zero |
| 0:01:02.999 | 00:01:02,999 | Three-digit fraction = already ms |
Note that some rare ASS files use three-digit fractional seconds (milliseconds rather than centiseconds). A robust parser detects this by checking whether the fraction component is 2 or 3 digits wide and handles both cases.
SRT timestamps always use two-digit zero-padded hours, two-digit minutes, two-digit seconds, and three-digit milliseconds. ASS hours can be a single digit (0: rather than 00:) — the SRT output must normalize this.
Character Encoding Considerations
Encoding is a common source of garbled subtitles. ASS files come in two common encodings:
- UTF-8 — standard for files created in the past decade; handles all Unicode characters including CJK, Arabic, and Cyrillic
- Windows-1252 (Latin-1) — common in older files, especially European language releases from the 2000s; extended ASCII only
When a UTF-8 reader encounters a Windows-1252 file containing non-ASCII characters, the result is replacement characters (the Unicode replacement character �, often called "mojibake"). Signs: subtitle text contains ’ instead of ', or blocks of � characters where accented letters should be.
If you see garbled text after conversion, the source file is likely Windows-1252. Open it in a text editor like Notepad++ (Windows) or BBEdit (Mac), change the encoding to UTF-8, save, and re-upload. The Script Info section of an ASS file sometimes contains an ScriptType: v4.00+ line alongside a Title: that hints at the source language.
Batch Conversion Workflows
When converting a full subtitle archive — for example, a season of a show — batch conversion saves significant time. The online converter handles up to 50 files in one session. For larger archives, consider these approaches:
- Browser tool — drop the entire folder's contents (50 files per run), convert, download ZIP, repeat. Each ZIP is named with a timestamp so runs don't overwrite each other.
- FFmpeg — for programmatic conversion:
ffmpeg -i input.ass output.srt. Batch with a shell loop:for f in *.ass; do ffmpeg -i "$f" "${f%.ass}.srt"; done - Python + pysubs2 — the
pysubs2library handles ASS/SRT and many other formats:subs = pysubs2.load("input.ass"); subs.save("output.srt")
For the browser-based tool, the ZIP naming convention follows the pattern dataconversioncenter_ass_to_srt_yyyymmddhhmm.zip using your local time, making it easy to identify when each batch was processed.
Frequently Asked Questions
🎬 Convert your ASS subtitle files to SRT now — free, browser-based, no upload required.
Open ASS to SRT Converter →