====== ffmpeg - Subtitles - ASS file syntax ====== ASS (Advanced SubStation Alpha) is a newer version of SSA (SubStation Alpha); technically version 4+). * SubStation Alpha (SSA) is a subtitling / script format that supports text formatting, animation, graphics and karaoke. ASS is an improvement upon the SSA V4 specification. * ASS files have INI-style sections: each section is preceded by a line containing the sections name, in square brackets. * Aside from this, each line is generally composed of: a line descriptor, which tells about what the line is about; a colon; and the line data itself. * Any whitespace between these parts are allowed. * Blank lines are also allowed. * Hard comment lines are preceded by either a semicolon or !: (with "!" as the line descriptor). * Unrecognized and incorrect line formats are ignored. Fields on the line data are separated by a comma and, with the exception of the Text field, which should be the last field, must not contain any commas. ---- ===== File Specification ===== SSA and ASS files are plain text files. * ASS added Unicode support. ---- ===== Scripts ===== See: [[https://aegisub.org/]] ---- ===== Styles section ===== The Styles section defines different preset styles that can be used to adjust the appearance of individual lines in the script. * The actual name of the section depends on the file version, for ASS this is [V4+ Styles]. * In the Events section, unrecognized styles are styled with the "Default" style. * Unrecognized fonts are assigned to Arial - this may occur when the font is not installed in a target system. The following is a sample Styles section: {{c|directive|[V4+ Styles]}} {{c|key1|Format:}} Name{{c|key|,}} Fontname{{c|key|,}} Fontsize{{c|key|,}} PrimaryColour{{c|key|,}} SecondaryColour{{c|key|,}} OutlineColour{{c|key|,}} BackColour{{c|key|,}} Bold{{c|key|,}} Italic{{c|key|,}} Underline{{c|key|,}} StrikeOut{{c|key|,}} ScaleX{{c|key|,}} ScaleY{{c|key|,}} Spacing{{c|key|,}} Angle{{c|key|,}} BorderStyle{{c|key|,}} Outline{{c|key|,}} Shadow{{c|key|,}} Alignment{{c|key|,}} MarginL{{c|key|,}} MarginR{{c|key|,}} MarginV{{c|key|,}} Encoding {{c|key1|Style:}} Default{{c|key|,}}Arial{{c|key|,}}28{{c|key|,}}&H00FFFFFF{{c|key|,}}&H1EFFFFFF{{c|key|,}}&H0048001C{{c|key|,}}&H7F000000{{c|key|,}}-1{{c|key|,}}0{{c|key|,}}0{{c|key|,}}0{{c|key|,}}100{{c|key|,}}100{{c|key|,}}0{{c|key|,}}0{{c|key|,}}1{{c|key|,}}1.5{{c|key|,}}0.5{{c|key|,}}2{{c|key|,}}10{{c|key|,}}10{{c|key|,}}10{{c|key|,}}1 **NOTE:** * **Format**: Defines the format of subsequent Style lines. This is provided for backward-compatibility. * **Style**: Defines a style. The style is subsequently identified by its Name field. ---- ===== Styles ===== ^Field^Description^ |Name|Identifies the style. Case-sensitive.| |Fontname|The subtitle font as identified by operating systems.| |Fontsize|The point size of the font.| |PrimaryColour|The font color. See the Data types section for information on how color values are represented.| |SecondaryColour|A secondary font color. This may be used in subtitle collisions (SSA) or as the first color displayed in the karaoke.| |OutlineColour|(SSA uses TertiaryColor) The color used to outline the font.| |BackColour|The color of the subtitle shadow.| |Bold|Text formatting that can be applied to the subtitle. Boolean value. (See Data types section.)| |Italic|:::| |Underline (v4+)|:::| |Strikeout (v4+)|:::| |ScaleX|(v4+) These are multipliers that can be used to scale the subtitle.| |ScaleY|:::| |Angle (v4+)|The rotation of the subtitle, in floating-point degrees. The rotation origin depends on the alignment of the subtitle.| |BorderStyle|1 - Outline with shadow, 3 - Rendered with an opaque box.| |Outline|The width of the text outline, in pixels.| |Shadow|The depth of the text shadow, in pixels.| |Alignment|The alignment of the subtitle. See the Data types section.| |MarginL|Left margin.| |MarginR|Right margin.| |MarginV|Vertical margin.| |Encoding|A number representing the encoding to be used.| ---- ===== Events section ===== This section contains the different objects to be displayed on screen, each having its corresponding properties, including timing. The following are the fields available to ASS: ^Field^Description^ |Layer|An integer indicating the layer the subtitle is in. Subtitles having different layer numbers will be ignored during collision detection. Lower layer numbers are drawn first.| |Start|The start time of the subtitle. See the **Data types** section.| |End|The end time of the subtitle.| |Style|The style to be used by the script. Styles are defined in the Styles section.| |Name|The person who spoke the dialog.| |MarginL|4-digit margin override.| |MarginR|:::| |MarginV|:::| |Effect|An effect or special directive associated with the line. Possible values are:| |:::|Scroll up;;;[;fadeawayheight],| |:::|Banner;[;lefttoright(0|1)][;| |:::|Scroll down;;;[;fadeawayheight]| |Text|The subtitle text. This is a special field in the sense that it must always be the last field, and can contain commas.| The following are the Event section descriptors: ^Descriptor^Description^ |Dialogue|A normal subtitle line.| |Comment|A commented subtitle line. These will not be displayed on screen.| |Picture|Displays a picture with the path specified in the Text field.| |Sound|Plays a WAV file with the path specified in the Text field.| |Movie|Plays an AVI file with the path specified in the Text field.| |Command|Executes the program with the path specified in the Text field.| ---- ===== Style overrides ===== The ASS format has an extensive set of overrides that can be used to modify parts of or whole specific subtitles. * All override codes except for \N, \n and \h must be enclosed in curly brackets ({}). * Consecutive override codes may be placed inside a single pair of brackets. * Override codes typically affect only the text succeeding it, but some codes modify the whole line. * All override codes are preceded by a backslash (\) and may contain a parameter, if it must be provided. * If an override code requires 2 or more parameters, these are placed inside parentheses and are comma-delimited. The following is a list of ASS override codes. ^Override code^Parameters^Description^ |n| |Soft line break - the line may break here.| |N| |Hard / forced line break| |h| |Non-breaking space| |b|0 1|Bold; off (0) or on (1)| |i|0 1|Italic; off (0) or on (1)| |u|0 1|Underline; off (0) or on (1)| |s|0 1|Strikethrough; off (0) or on (1)| |bord|width|Border| |shad|depth|Shadow| |be|blur amount|Outline blur ("blur edges")| |fn|Font name|Changes the font.| |fs|size|Font size| |fscx|Percent|Font scaling| |fscy|:::|:::| |fsp|pixels|Font spacing| |fr/frz|degrees|Rotation around the x/y/z-axes.| |frx|:::|:::| |fry|:::|:::| |fe|charset|Encoding number| |c/1c|color|Primary / secondary / outline / shadow colour| |2c|:::|:::| |3c|:::|:::| |4c|:::|:::| |alpha/1a|alpha value|Primary / secondary / outline / shadow transparency| |2a|:::|:::| |3a|:::|:::| |4a|:::|:::| |an|alignment code|Alignment| |k|duration (x0.01s)|The duration of time, in centiseconds, the succeeding text will be displayed, until the end of the line or the next k override code. This creates a karaoke effect.| |kf/K|:::|:::| |ko|:::|:::| |q|integer|Wrapping style| |r|[style]|Resets all previous override styles, applying the default style. To apply a different style, put it as a parameter.| |t|([, ,][,])|Applies a transition animation to the line. The start and end times are in milliseconds, and the styles can be any combination of the available animatable styles.| |pos|(x,y)|Sets the position of the subtitle anchor, where 0,0 is the top-left corner. Note that the subtitle anchor also depends on the line's alignment.| |move|(x1,y1,x2,y2[,t1, t2])|Animates the subtitle position at the specified time or at the entirety of the subtitle time from point 1 to point 2. Time is in milliseconds, relative to the beginning of the subtitle. The subtitle anchor depends on the line's alignment.| |org|(x,y)|Relocates the rotation origin of the subtitle. By default, the subtitle rotates about its anchor.| |fade|a1,a2,t1,t2,t3,t4|Creates a three-part fade animation.| |fad|fade in duration, fade out duration|Sets a fade-in and fade-out duration. 0 will effectively disable the effect.| |clip|x1,y1,x2,y2|Clips a subtitle inside a rectangle.| |clip|[scale,] drawing|Clips a subtitle inside a drawing.| ---- ===== File attachment ===== Files can be attached to scripts and are stored as plain text. The method used is a form of UUEncoding. ---- ===== Data types ===== * **Color**: Color values are expressed in hexadecimal BGR format as &HBBGGRR& or ABGR (with alpha channel) as &HAABBGGRR&. * Transparency (alpha) can be expressed as &HAA&. Note that in the alpha channel, 00 is opaque and FF is transparent. * **Boolean values (Styles section)**: -1 is true, 0 is false. * **Alignment**: Alignment values are based on the numeric keypad. * 1 - bottom left, 2 - bottom center, 3 - bottom right, 4 - center left, 5 - center center, 6 - center right, 7 - top left, 8 - top center, 9 - top right. * In addition to determining the position of the subtitle, this also determines the alignment of the text itself. * **Time**: Time is expressed as h:mm:ss:xx (xx being hundredths of seconds). * The hour can only be a single digit. ---- ===== References ===== https://wiki.multimedia.cx/index.php?title=SubStation_Alpha https://aegisub.org/ https://validator.subtitledpro.com/