Advanced Sub Station Alpha (file extension .ass) is a powerful subtitle format that supports extensive text formatting, animations, and effects.
The Sub Station Alpha (SSA) format was created by programmer Kotus in 1996 for the anime fansubbing community. In 2002, Advanced Sub Station Alpha (ASSA) was released with new features including layers, alpha channel support, and rotation.
Despite being called “Advanced Sub Station Alpha,” the file extension remains .ass (though .assa would be more accurate).
Key Features:
Pros:
Cons:
An ASS file consists of several sections, each starting with a section header in square brackets:
[Script Info]
Title: My Subtitle
ScriptType: v4.00+
...
[V4+ Styles]
Format: Name, Fontname, Fontsize, ...
Style: Default, Arial, 20, ...
[Events]
Format: Layer, Start, End, Style, ...
Dialogue: 0, 0:00:01.00, 0:00:03.00, Default, ...
ASS uses a different timecode format than SRT:
hours:minutes:seconds.centiseconds
Important notes:
.) is used as decimal separator (not comma)Examples:
0:00:01.00 (1 second)
0:01:15.25 (1 minute, 15.25 seconds)
1:30:45.10 (1 hour, 30 minutes, 45.1 seconds)
This section contains metadata and global settings for the subtitle file.
[Script Info]
; This is an Advanced Sub Station Alpha v4+ script.
Title: My Subtitle File
ScriptType: v4.00+
WrapStyle: 0
PlayResX: 1920
PlayResY: 1080
ScaledBorderAndShadow: yes
Video Aspect Ratio: 0
Video Zoom: 6
Video Position: 0
| Field | Description | Default |
|---|---|---|
Title |
Name of the subtitle file | (none) |
ScriptType |
Format version | v4.00+ |
PlayResX |
Video width in pixels | 384 |
PlayResY |
Video height in pixels | 288 |
WrapStyle |
Line wrapping style (0-3) | 0 |
ScaledBorderAndShadow |
Scale borders with video | yes |
Timer |
Timer speed percentage | 100.0000 |
Important: Always set PlayResX and PlayResY to match your video resolution! The default of 384×288 is rarely correct for modern videos.
WrapStyle values:
0 — Smart wrapping, lines evenly balanced1 — End-of-line wrapping2 — No word wrapping3 — Smart wrapping, lower line widerThis section defines the appearance of subtitles.
The Format line defines the order and names of style fields:
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Each style starts with Style: followed by comma-separated values matching the format:
Style: Default,Arial,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,1,1,2,10,10,10,1
| Field | Description | Example Values |
|---|---|---|
| Name | Style name | Default, Title, Sign |
| Fontname | Font family | Arial, Times New Roman |
| Fontsize | Font size in points | 20, 24, 18 |
| PrimaryColour | Text color (BGR + Alpha) | &H00FFFFFF (white) |
| SecondaryColour | Secondary/karaoke color | &H0000FFFF (yellow) |
| OutlineColour | Border color | &H00000000 (black) |
| BackColour | Shadow color | &H00000000 (black) |
| Bold | Bold (0=no, -1=yes) | 0, -1 |
| Italic | Italic (0=no, -1=yes) | 0, -1 |
| Underline | Underline (0=no, -1=yes) | 0, -1 |
| StrikeOut | Strikeout (0=no, -1=yes) | 0, -1 |
| ScaleX | Horizontal scale (%) | 100, 120 |
| ScaleY | Vertical scale (%) | 100, 120 |
| Spacing | Letter spacing | 0, 2 |
| Angle | Z-axis rotation (degrees) | 0, 45 |
| BorderStyle | 1=outline+shadow, 3=box | 1, 3 |
| Outline | Outline width | 1, 2, 0 |
| Shadow | Shadow depth | 1, 2, 0 |
| Alignment | Numpad alignment | 2 (bottom center) |
| MarginL | Left margin (pixels) | 10, 20 |
| MarginR | Right margin (pixels) | 10, 20 |
| MarginV | Vertical margin (pixels) | 10, 20 |
| Encoding | Font encoding/charset | 1 (default) |
Colors in ASS are in BGR format (Blue-Green-Red, not RGB!) with alpha:
&H<AA><BB><GG><RR>
Important notes:
00 = opaque, FF = transparentColor examples:
&H00FFFFFF = White (opaque)
&H00000000 = Black (opaque)
&H000000FF = Red (opaque)
&H0000FF00 = Green (opaque)
&H00FF0000 = Blue (opaque)
&H8000FF00 = Green (50% transparent)
&HFF0000FF = Red (fully transparent/invisible)
Alignment uses numpad-style numbering:
7 (Top-left) 8 (Top-center) 9 (Top-right)
4 (Middle-left) 5 (Middle-center) 6 (Middle-right)
1 (Bottom-left) 2 (Bottom-center) 3 (Bottom-right)
Most subtitles use 2 (bottom-center) as default.
This section contains the actual subtitle lines.
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Example:
Dialogue: 0,0:00:01.00,0:00:03.00,Default,,0,0,0,,Hello, World!
| Field | Description | Example |
|---|---|---|
| Layer | Rendering layer (0=bottom) | 0, 1, 2 |
| Start | Start timecode | 0:00:01.00 |
| End | End timecode | 0:00:03.00 |
| Style | Style name | Default |
| Name | Character name (optional) | John, Narrator |
| MarginL | Override left margin | 0, 10 |
| MarginR | Override right margin | 0, 10 |
| MarginV | Override vertical margin | 0, 10 |
| Effect | Transition effect (rarely used) | `` |
| Text | Subtitle text with optional tags | Hello, World! |
Comments use Comment: instead of Dialogue::
Comment: 0,0:00:01.00,0:00:03.00,Default,,0,0,0,,This line won't appear
Override tags modify the appearance of text inline. They’re enclosed in curly braces {}:
{\b1}Bold text{\b0} normal text
{\i1}Italic text{\i0} normal text
{\c&H0000FF&}Red text
See ASSA Override Tags for comprehensive documentation.
| Tag | Description | Example |
|---|---|---|
\b1 / \b0 |
Bold on/off | {\b1}Bold{\b0} |
\i1 / \i0 |
Italic on/off | {\i1}Italic{\i0} |
\u1 / \u0 |
Underline on/off | {\u1}Underline{\u0} |
\s1 / \s0 |
Strikeout on/off | {\s1}Strike{\s0} |
\c&H<BGR>& |
Text color | {\c&H0000FF&}Red |
\fs<size> |
Font size | {\fs30}Large text |
\fn<name> |
Font name | {\fnArial}Arial |
\pos(x,y) |
Position | {\pos(640,360)}Center |
\an<1-9> |
Alignment | {\an8}Top center |
\fad(in,out) |
Fade in/out (ms) | {\fad(500,500)} |
\t(<tags>) |
Transform animation | {\t(\frz360)}Rotate |
\N — Hard line break (always breaks)\n — Soft line break (breaks if needed)Example:
Dialogue: 0,0:00:01.00,0:00:03.00,Default,,0,0,0,,Line one\NLine two
[Script Info]
; This is an Advanced Sub Station Alpha v4+ script.
Title: Example Subtitle
ScriptType: v4.00+
PlayResX: 1920
PlayResY: 1080
ScaledBorderAndShadow: Yes
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H0000FFFF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,1,1,2,10,10,10,1
Style: Title,Arial,30,&H00FFFFFF,&H0000FFFF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,0,8,10,10,10,1
Style: Sign,Arial,18,&H00FFFF00,&H0000FFFF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,3,0,0,5,10,10,10,1
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.00,0:00:03.00,Default,,0,0,0,,Normal text.
Dialogue: 0,0:00:03.08,0:00:05.08,Default,,0,0,0,,Two\Nlines.
Dialogue: 0,0:00:05.16,0:00:07.16,Default,,0,0,0,,{\i1}Italic{\i0}
Dialogue: 0,0:00:07.24,0:00:09.24,Default,,0,0,0,,{\b1}Bold{\b0}
Dialogue: 0,0:00:09.32,0:00:11.32,Default,,0,0,0,,{\u1}Underline{\u0}
Dialogue: 0,0:00:11.40,0:00:13.40,Default,,0,0,0,,{\c&H0000FF&}Red
Dialogue: 0,0:00:13.48,0:00:15.48,Default,,0,0,0,,{\an8}Top aligned
Dialogue: 0,0:00:15.56,0:00:17.56,Title,,0,0,0,,Title style text
Dialogue: 1,0:00:10.00,0:00:20.00,Sign,,0,0,0,,{\pos(960,200)}On-screen sign
Comment: 0,0:00:01.00,0:00:02.00,Default,,0,0,0,,This is a comment
ASS files should be saved as:
Best practice: Always use UTF-8 without BOM for best compatibility.
Layers control the rendering order of subtitles:
Higher layer numbers appear on top of lower layer numbers. Useful for signs that should appear behind dialogue or complex typesetting.
; in [Script Info] sectionComment: instead of Dialogue: in [Events] sectionExample:
[Script Info]
; This is a comment
Title: My Subtitle
[Events]
Comment: 0,0:00:01.00,0:00:03.00,Default,,0,0,0,,This line is commented out
PlayResX and PlayResY to match your videoDefault, Signs, Narratoryes for resolution-independent bordersProblem: Using RGB instead of BGR format
Wrong: &H00FF0000 (expecting red, but getting blue)
Right: &H000000FF (red in BGR format)
Problem: Alpha value set to FF (fully transparent)
Wrong: &HFF0000FF (fully transparent red)
Right: &H000000FF (opaque red)
Problem: PlayResX/PlayResY don’t match video resolution
Wrong: PlayResX: 384, PlayResY: 288 (default)
Right: PlayResX: 1920, PlayResY: 1080 (for 1080p video)
Problem: ScaledBorderAndShadow not set
Solution: Add to [Script Info]:
ScaledBorderAndShadow: yes
Problem: Multiple subtitles with same layer and position Solution: Use different layers or stagger timing
Dialogue: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,,{\k50}Ka{\k50}ra{\k50}o{\k50}ke
Dialogue: 0,0:00:01.00,0:00:03.00,Default,,0,0,0,,{\p1}m 0 0 l 100 0 100 100 0 100{\p0}
Dialogue: 0,0:00:01.00,0:00:05.00,Default,,0,0,0,,{\t(0,4000,\frz360\fscx200\fscy200)}Animated text
See ASSA Override Tags for comprehensive coverage of advanced features.
Different players use different rendering engines:
Note: Some override tags may work differently or not at all depending on the renderer.
Subtitle Edit can convert many formats to ASS:
| Property | Value |
|---|---|
| File Extension | .ass |
| MIME Type | text/x-ssa, application/x-ass |
| Character Encoding | UTF-8 (recommended), UTF-16 |
| Line Endings | Windows (CRLF), Unix (LF) |
| Timecode Format | H:MM:SS.cc |
| Timecode Precision | Centiseconds (hundredths) |
| Color Format | BGR + inverted alpha |
| Default Resolution | 384×288 (should be overridden!) |
Note: The last official specification was v4.00+ in 2002. Modern features are defined by libass implementation and community practice.