ssa和ass字幕格式全解析 | 首頁 上一頁

以下内容转载自互联网，非本作者原创 ssa/ass 字幕格式全解析 内容: 一. 概述 二. 文件各个部分解析
三. 各种类型的行
四. [Script Info]部分的标题行
五. [v4+ Styles]部分的风格行Style
六. [Events]事件部分的对话行Dialogue
七. [Events]事件部分的注解行Comment
八. [Events]事件部分的图片行Picture
九. [Events]事件部分的声音行Sound
十. [Events]事件部分的影片行Movie
十一. [Events]事件部分的命令行Command
附 A. 风格覆盖代码(Tags, Codes)
附 B. 内嵌的字体/图片编码

注:
1) 此文档是对原 SSA 文件规格英文文档进行翻译和补充而成, 原文件可从以下链接获得:
http://www.perlfu.co.uk/projects/asa/ass-specs.doc
另外参考了以下资料:
http://aegisub.cellosoft.com/docs/ASS_Tags
http://en.wikipedia.org/wiki/SubStation_Alpha
2) 表述编写格式时, 用到的符号说明如下:
<..> 参数
[..] 可选项
3) 除附 A 以外, 用红色字体标明 ASS 相对于 SSA 格式的新增功能或者改动
4) 用蓝色, 加粗, 下划线等符号表明需要注意的地方.

一. 概述

SSA 全称 SubStation Alpha, 是由 CS Low(又称 Kotus)创建的一种字幕格式, 用以实现比传统字幕诸如 srt 等格式更为复杂的功能. SSA 目前的版本为 v4.00. SSA 同时也是一款软件的名称, 专用于创建和编辑 SSA 格式的字幕.
ASS 是一种比 SSA 更为高级的字幕格式, 全称 Advanced SubStation Alpha, 实质是 SSA v4.00+ 版本. 它拥有比 SSA 更多的功能.

1. SSA v4.00 与之前的 SSA 版本格式不同. v4 可以阅读和加载以前版本的格式, 但之前版本不支持 v4 以上的编写格式. 换句话说, SSA 从 v4 版本开始可以阅读它认识的命令而忽略不认识的命令, 从而可以向下兼容, 也可以向上兼容.
2. 文件为普通的 DOS 文本格式. 也就是说它可以用记事本打开编辑, 同时需要注意编写出错时有可能导致无法预料的结果.
3. 文件编写时所划分的各部分, 从形式上来说类似于 ini 文件, 但它并非真正的 ini 文件
4. 各部分中的绝大多行都以一说明性的文字加上冒号来开头, 指明该行包含哪一些信息.
5. 每一行中的信息都以逗号分隔. 因此风格名和人物角色名中要求不能出现逗号.
6. 事件部分([Events])里的各行可以不分先后. 也就是说人物对白行可以不按时间顺序排列
7. 不正确的行会被忽略. 同时会给出警告指出被忽略的行数
8. 一行里包含了完整的信息, 必须在一行内写完, 不能分成多行
9. 当文件中引用了一个未知的风格名(style)时, 加载时会用默认的风格来替代(Default)
10. 当一个风格(Style)中引用了系统中没有安装的字体, 则会用 Arial 字体来代替.

【返回顶端】

二. 文件各部分解析

[Script Info]
这一部分包含了文件内容的标题和总体信息. [Script Info]这一行必须是 v4 版本文件的第一行

[v4 Styles]
字幕正文使用的风格都在这一部分做出相关定义. 注: ASS 使用的是[v4+ Styles]

[Events]
这部分包含所有的事件, 有字幕, 评论, 图片, 声音, 影片和命令. 基本上屏幕中出现的所有内容都集中在这一部分.

[Fonts]
如果想把字体内嵌入字幕文件, 那么字体文件须采用数字编码后放在这一部分. 只有 truetyle 字体才能内嵌入 SSA/ASS 文件
每一个内嵌字体文件以一行开头, 格式如下:
fontname: <文件名>
开头的”fontname”必须全部用小写, 如果大写会让 ASS 文件视其为文件编码的一部分.
<文件名>是 SSA 文件保存字体时使用的文件名, 命名规则如下:
truetype 字体原来的字体名称
加一条下划线
如果是粗体则加一个”B”
如果是斜休则加一个”I”
加一个数字表明字体编码(字符集)
最后加上”.ttf”
例如:
fontname: comic_B0.ttf

在这一行之后是一些可打印的字符组成的行, 代表组成这个字体的二进制字符, 除了最后一行可能短些, 其余每行有 80 个字符.
从二进制转换到字符用的是 UUE-encoding 的编码方式, 编码的详细信息参见附 B

[Graphics]
如果选择内嵌图片, 那这一部分就包含了所有用到的数字编码格式的图片文件. 开头一行的格式如下:
filename: <文件名>
开头的”filename”必须为小写, 如果大写会被认为是文件编码的一部分.
<文件名>是 SSA 文件保存图片时使用的文件名, 它与[Events]事件部分中提及的图片名称一致.

SSA 会把文件中找到的任何文件保存到 SSA 的程序目录中的”Pictures”子目录中. 例如: c:\program files\Sub Station Alpha v4.00\Pictures. SSA 会先从文件本身中寻找这些编码好的文件, 但当没有找到时会去”Pictures”这个子目录里去找.

注: 现在的 SSA 文件已经很少包含”[Pictures]” 或者 “[Fonts]” 这两个部分. 因为这些功能只被 Sub Station Alpha 这一个程序所支持. 而其它的 filter (Vobsub/Vsfilter/Avery Lee Subtitler filter) 都不支持.

【返回顶端】

三. 各种类型的行

在这一节里简要地说明在每个部分中出现的所有行的类型和大致功能, 各自具体说明参见后面的章节.

; 只在编写中请说明作用的行, 加载字幕时不可见.
Title: 标题, 是对字幕的描述
Original Script: 最初创建字幕的人
Original Translation: (可选) 最初翻译对话的人
Original Editing: (可选) 最初的编辑者, 一般是所有参与翻译和校对等工作的人
Original Timing: (可选) 最初的时间轴人员
Synch Point: (可选) 指出从哪一个时间点开始进行字幕加载播放
Script Updated By: (可选) 对原字幕对话进行编辑更新的人
Update Details: 进行了哪些更新等具体信息
ScriptType:对 SSA/ASS 文件的版本做说明, 例如”v4.00″. ASS 的版本为”v4.00+”
Collisions: 当两条字幕重叠时, 如何进行相对移动
PlayResY: 文件所使用的视频高度参考标准
PlayResX: 文件所使用的视频宽度参考标准
PlayDepth:加载字幕时所使用的颜色深度
Timer:对字幕加载的速度调整, 数值为百分数. 例如”100.0000″代表 100%.
ScaledBorderAndShadow: 边框宽度与阴影深度是否随着视频分辨率同等比例缩放.
Style: 定义每条字幕所使用的风格
Dialogue: 指明为对话事件, 即屏幕上出现的字幕
Comment: 指明此行是评论/解释事件, 它与 Dialogue, Picture, Sound, Movie 或者 Command 事件包含相同的信息, 以此来进行解释说明, 但加载字幕时不会出现在屏幕
Picture: 指明为图片事件, 即显示.bmp, .jpg, .gif, .ico 或者 .wmf 格式的图片(注意不支持 png, 且 filter 不支持加载图片)
Sound:指明为声音事件, 即播放.wav 格式的声音(filter 不支持)
Movie: 指明为电影事件, 即加载 avi 视频(filter 不支持)
Command: 指明为命令事件, 即可在后台打开某个程序

【返回顶端】
四. [Script Info]部分的标题行

;分号, 后面可以跟任何内容. 这一行是说明性文字, 加载字幕时不显示
注意此类型行必须要把分号放最前. 老版本不是用分号而是用!:
Title:标题, 如果没有提供, 则自动使用<untitled>
Original Script: 剧本的最初作者, 若没有提供则自动使用<unknown>
Original Translation: (可选)原剧本的翻译者, 若没有提供则该行不显示
Original Editing: (可选)原剧本的编者和校对, 若没有提供则该行不显示
Original Timing: (可选)原剧本的时间轴人员, 若没有提供则该行不显示
Synch Point: (可选)从哪个时间点开始加载字幕, 若没有提供则该行不显示
Script Updated By: (可选)对原剧本的修改/更新人员, 若没有提供则该行不显示
Update Details: 更新的具体信息, 若没有提供则该行不显示
Script Type: SSA 的版本信息, ASS 的版本为”v4.00+”
Collisions: 当字幕时间重叠时, 前后字幕的堆叠方式.
值为”Normal”时, 后一条字幕出现在前一条字幕的上方.
如果值为”Reverse”时, 前一条字幕往上移动给后一条字幕让位.
PlayResY: 文件所使用的视频高度参考标准, 如果使用 Directdraw 回放 SSA v4 会自动选择最相近的启用的设置
PlayResX: 文件所使用的视频宽度参考标准, 如果使用 Directdraw 回放 SSA v4 会自动选择最相近的启用的设置.
如果只提供了 PlayResX, PlayResY 其中一种, 那另一种会按实际视频的像素值为准.
提供的分辨率数值影响以下参数:
1) 所有给出的坐标(到边缘的距离, \pos, \move, 矢量绘图等)都以此分辨率作为参照.
2) 所有的文字字号均按照此分辨率等比例放大缩小
3) 当 ScaledBorderAndShadow 被启用时, 所有边框宽度和阴影深度都按照此分辨率与实际分辨率的比例等比例缩放
4) 这个分辨率不影响最终显示文字的宽高比, 但影响矢量绘画图形的宽高比.
PlayDepth: 加载字幕时使用的色深(颜色的数目), 如果使用 Directdraw 回放 SSA v4 会自动选择最相近的启用的设置
Timer: 字幕加载的速度调整, 数值为百分数. 例如”100.0000″代表 100%. 其数值有 4 位小数点.
它相当于对 ASS 字幕的时间速度进行乘法运算.
当速度大于 100%时, 总时间会缩短, 而相应的字幕会越来越靠前.
当速度小于 100%时, 总时间会延长, 而相应的字幕会越来越靠后.
WrapStyle: 定义默认的换行方式,
0: 智能换行, 行分得较平均, 上面的行较长
1: 一行结束后从行尾的词分行
2: 不换行. 此模式下只有\n, \N 才换行
3: 与模式 0 相同, 但下面的行分得比较长
ScaledBorderAndShadow: 指定边框宽度与阴影深度是否随着视频分辨率等比例缩放. 可为 Yes, No. 默认为 No.
当取值为 No 时, 边框宽度与阴影深度完全按照指定的像素数显示.
当取值为 Yes 时, 边框宽度与阴影深度随着实际视频的分辨率同等比例缩放.

【返回顶端】
五. [v4+ Styles]部分的风格行 Style

Style 定义了字幕的样式和位置. 所有的 Style 都在单独的 Style 里进行定义.
除了阴影/边框的类型和深度, 其余所有的风格设置都可以由字幕文本中的覆写代码所替代.
在定义风格之前先要有一行”Format:”来定义风格中每一个字段所代表的含义, 这些字段名称必须拼写准确, 顺序可以打乱, 字段名表示如下:

Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding

字段 1: Name. 风格(Style)的名称. 区分大小写. 不能包含逗号.
字段 2: Fontname. 使用的字体名称, 区分大小写.
字段 3: Fontsize. 字体的字号
字段 4: PrimaryColour. 设置主要颜色, 为蓝-绿-红三色的十六进制代码相排列, BBGGRR. 为字幕填充颜色
字段 5: SecondaryColour. 设置次要颜色, 为蓝-绿-红三色的十六进制代码相排列, BBGGRR. 在卡拉 OK 效果中由次要颜色变为主要颜色.
字段 6: TertiaryColour(ASS 中的名称为 OutlineColor), 设置轮廓颜色, 为蓝-绿-红三色的十六进制代码相排列, BBGGRR.
字段 7: BackColour, 设置阴影颜色, 为蓝-绿-红三色的十六进制代码相排列, BBGGRR.
字段 4-7: ASS 的这些字段还包含了 alpha 通道信息. (AA BBGGRR), 注 ASS 的颜色代码要在前面加上&H
字段 8: Bold. -1 为粗体, 0 为常规
字段 9: Italic. -1 为斜体, 0 为常规
字段 9.1: Underline. [-1 或者 0] 下划线
字段 9.2: Strikeout. [-1 或者 0] 中划线/删除线
字段 9.3: ScaleX. 修改文字的宽度. 为百分数
字段 9.4: ScaleY. 修改文字的高度. 为百分数
字段 9.5: Spacing. 文字间的额外间隙. 为像素数
字段 9.6: Angle. 按 Z 轴进行旋转的度数, 原点由 alignment 进行了定义. 可以为小数
字段 10: BorderStyle. 1=边框+阴影, 3=纯色背景. 当值为 3 时, 文字下方为轮廓颜色的背景, 最下方为阴影颜色背景.
字段 11: Outline. 当 BorderStyle 为 1 时, 该值定义文字轮廓宽度, 为像素数, 常见有 0, 1, 2, 3, 4.
字段 12: Shadow. 当 BorderStyle 为 1 时, 该值定义阴影的深度, 为像素数, 常见有 0, 1, 2, 3, 4.
字段 13: Alignment. 定义字幕的位置. 字幕在下方时, 1=左对齐, 2=居中, 3=右对齐. 1, 2, 3 加上 4 后字幕出现在屏幕上方. 1, 2, 3 加上 8 后字幕出现在屏幕中间. 例: 11=屏幕中间右对齐.
字段 13: Alignment. 对于 ASS 字幕而言, 字幕的位置与小键盘数字对应的位置相同.
字段 14: MarginL. 字幕可出现区域与左边缘的距离, 为像素数
字段 15: MarginR. 字幕可出现区域与右边缘的距离, 为像素数
字段 16: MarginV. 垂直距离
牋 对于处在下方的字幕, 此值是字幕到底端的像素数
牋 对于处在屏幕上方的字幕, 此值为字幕到顶端的像素数.
牋 对于处在屏幕中间的字幕, 此值被忽略.
字段 17: AlphaLevel. SSA 字幕用来定义透明度
字段 17: AAS 没有该字段.
字段 18: Encoding. 指明字体的字符集或编码方式. 如 0 为英文, 134 为简体中文, 136 为繁体中文. 当文件为非 UNICODE 类型编码时, 该值对字幕的显示起作用.

【返回顶端】

六. [Events]部分的对话行 Dialogue

Dialogue 类型的行(对话行)包括字幕对白, 时间轴信息, 以及对白的显示方式.
在对话行出现前必须有一条格式行 Format: 来对逗号分隔的每个字段进行定义, 该格式行中的每一个字段必须拼写准确, 内容如下:

Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text

最后的一个字段永远都是对白文字的字段, 因此可以包含逗号. 前面的字段顺序可以改变.

字段 1: Marked. 值为 0 表示该行为”未标识”行, 值为 1 表示该行为”标识”行
字段 1: Layer. ASS 的这个字段名是 Layer(图层), 可以为任意的整数. 图层不同的两条位置/时间有重叠的字幕不被视为有冲突, 图层号码大的字幕显示在图层号小的上方.
字段 2: Start. 事件开始的时间, 格式为 0:00:00:00(时:分:秒:百分数), 注意小时只有一位数
字段 3: End. 事件结束的时间. 格式为 0:00:00:00(时:分:秒:百分数), 注意小时只有一位数
字段 4: Style. 该条字幕所使用的风格. 风格的具体信息在[V4+ Style]这一部分中进行定义
字段 5: Name. 角色名, 指出对白是由影片中哪位演员所说的. 字幕加载时不显示, 只为了编写时理解方便.
字段 6: MarginL. 使用新的与左边缘的距离, 为 4 位数字代表的像素值. 0000 代表使用当前 Style 定义的值.
字段 7: MarginR. 使用新的与右边缘的距离, 为 4 位数字代表的像素值. 0000 代表使用当前 Style 定义的值.
字段 8: MarginV. 使用新的垂直距离, 为 4 位数字代表的像素值. 0000 代表使用当前 Style 定义的值. 具体说明参见上面[v4+ Style]里的说明
字段 9: Effect. 过渡效果. 可以为空值, 或者为三种过渡效果之一.
效果名称区分大小写, 必须拼写准确. 且不加任何引号:
“Karaoke” 是卡拉 OK 效果, 每个字依次高亮显示. 注: 在 ASS 中该效果已经废弃不用.
“Scroll up;y1;y2;delay[;fadeawayheight]” 滚动效果, 指文字/图片向上滚动. 各参数以分号分隔.
y1 与 y2 是屏幕垂直区域的像素值, 位置可以互换. 当这两个值都为 0 时则全屏幕内滚动
delay 可取值 1-100, 代表滚动速度的降低值. 当其为 0 时滚动速度最快.
“Banner;delay”横幅效果. 所有文字被合并到单行, 并从右至左横向移动.
delay 的值可由 1 到 100, 代表横幅移动速度的降低值. 当其为 0 时移动速度最快.
“Scroll down;y1;y2;delay[;fadeawayheight]” 向下滚动
“Banner;delay[;lefttoright;fadeawaywidth]”
注意红字为 ASS 新增功能.
lefttoright 可取值 0 或 1, 为可选, 默认为 0(右出左进)
当 delay 值大于 0 时, 移动速度为(1000/delay)像素每秒
(注意: Avery Lee 的字幕插件阅读滚动效果的顺序为: delay;y1;y2)
fadeawayheight 以及 fadeawaywidth 可令效果边缘的像素呈现透明.
字段 10: Text. 为对白字幕区域, 是最终出现在屏幕上的字幕. 任何位于第 9 个逗号后的内容均被看作是对白字幕, 所以本身可以包含逗号.
在这一个字段中可以包含\n, \N, \h 这三种分行/空格代码, 以及其它在大括号{ }内的风格覆写控制代码. 详情参看附 A.

【返回顶端】

七. [Events]事件部分的注解行 Comment

在[Events]这一部分内, 以 Comment: 开头的行. 它可以与其它类型的事件行包含一样的信息, 但不会被作为字幕加载到屏幕上. 它起评论/说明的作用.

【返回顶端】

八. [Events]事件部分的图片行 Picture

在[Events]这一部分内, 以 Picture: 开头的行. 它与 Dialogue 行包含一样的控制信息, 但是在字段 10 的位置指定要显示的图片完整路径与图片名称. 在前面字段指定的风格被忽略, 滚动效果可以运用到图片事件上. MarginL 和 MarginV 被用来指定图片与左边缘与下边缘的像素距离. 当 MarginL 为 0000 时图片水平居中显示. 当 MarginV 为 0000 时, 图片垂直居中.

支持的图片格式有.bmp, .jpg, .gif, .ico 以及.wmf 格式的图片(不支持 png) 注意, 只有 SSA 软件能支持加载图片事件, filter 则不支持.

九. [Events]事件部分的声音行 Sound

在[Events]这一部分内, 以 Sound: 开头的行. 它与 Dialogue 行包含一样的控制信息, 但是在字段 10 的位置指定要加载的声音文件完整路径与名称, 格式为.wav. 风格与距离等值被忽略, 而且结束的时间值也被忽略. 该声音会播放到它结束, 或者播放到新的声音行加入为止.
注: 各 filter 不支持加载声音行

【返回顶端】

十. [Events]事件部分的影片行 Movie

在[Events]这一部分内, 以 Movie: 开头的行. 它与 Dialogue 行包含一样的控制信息, 但是在字段 10 的位置指定要加载的视频文件完整路径与名称, 格式为.avi. 风格与效果等值被忽略

结束的时间值(End)指出影片画面消失的时间, 但如果 avi 文件仍然没有结束, 则其声音仍然会持续播放.

MarginL 和 MarginV 被用来指定影片与左边缘, 上边缘的像素距离(与图片行不同). 当 MarginL 为 0000 时视频水平居中显示. 当 MarginV 为 0000 时, 视频垂直居中.

注: Filter 不支持加载影片行
当 Movie 与 Sound 行有时间重叠时, 实际听到的声音以先开始的内容为准.

【返回顶端】

十一. [Events]事件部分的命令行 Command

在[Events]这一部分内, 以 Command: 开头的行. 它与 Dialogue 行包含一样的控制信息, 但是在字段 10 的位置指定要运行的程序完整路径与名称.
风格, 距离, 效果, 结束时间都被忽略. 程序会运行到它结束为止, 或者运行到手动关掉为止. 注: Filter 不支持加载命令行.

SSA 软件内置的一些命令可以出现在 SSA 文件内. 因完全用不到故将英文原文引用如下:
There are also internal SSA commands which can appear in SSA scripts – the “SSA:Pause”, “SSA:Wait for trigger” command events, and genlock control commands. These all begin with “SSA:”
The SSA:Pause command has the same effect as pressing “P” during script playback. It is useful as a second “synch point” to resume subtitling after switching sides of a laserdisk.
The “SSA:Wait for audio trigger” command has the same effect as pressing “P” during script playback, but pausing is automatically cancelled if the audio input to the computer exceeds a specified “trigger” level. It is useful as a second “synch point” to resume subtitling after switching sides of a laserdisk. The audio triggering can be overridden to resume playback – by pressing “P”.
Audio triggering “times out” after 10 minutes – If no audio peak of sufficient magnitude is received, and “P” is not pressed within 10 minutes – then playback will resume anyway.

【返回顶端】

附 A. 风格覆盖代码(Tags, Codes)

风格覆写控制代码专用于[Events]这一部分的最后一个字段中, 对于文字/图片风格的重新定义.

除了\n, \N, \h 这三个代码之外, 其余所有代码都必须放在大括号{ }之内
所有覆写代码都以反斜线开头\
多个代码可以放在一个{ }内

所有覆写代码作用于其后的所有文字. 如果只想作用于选定的文字, 则需要在选定文字的后面加一个”取消”作用的代码. 但也有少数代码会自动应用于整行文字, 如设定位置的代码.

下面将所有代码分成一般, 绘图两组来详细解释:
(一) 一般的代码

\n 软性分行(回车), 只在分行模式(WrapStyle)为 2 时有效. 在其它分行模式下相当于一个空格
\N 硬性分行(回车), 在任何分行模式下都有效
\h 硬性空格. 它保证显示字幕时不会在它的这个空格上分行(保证左右两个词在同一行)
\b<0 或 1> \b1 令文字变为粗体. \b0 强制文字不是粗体(bold)
当参数大于 1 时, 会被作为字体的重量值. (注: 大多字体只有量化到 2 级或 3 级的粗度, 所以很少用到这个重量值)
字体重量值为 100 的倍数, 如 100 为最细, 400 为普通, 700 为粗体, 900 为最粗
\i<0 或 1> \i1 令文字变为斜体. \i0 强制文字不是斜体(italic)
\u<0 或 1> 下划线(underline)开关
\s<0 或 1> 中划线(删除线)开关(strikeout)
\bord<宽度> 指定边框宽度(border), 像素数. 可以为小数
\shad<深度> 指定阴影深度(shadow), 不能为负数
\be<0 或 1>模糊边缘 blur edges
\fn<字体名称>指定使用系统中已安装的字体, 区分大小写. 如果使用的字体没有安装, 则会用 Arial 来替代(font name).
注字体名与 fn 间不能有空格, 也没有其它的括号等
\fs<字号>指定文字的大小, <字号>是一个指代高度的像素值, 只能用整数. (font size)
\fsc<x 或 y><百分数>缩放文字大小. <x 或 y>指定文字是横向还是纵向缩放. <百分数>指定调整到百分之多少. 同样适用于矢量图形.
\fsp<像素值> 文字间增加额外的间隔(font spacing), 默认为 0
\fr[<x/y/z>]<度数> 文字旋转一定的度数(font rotation)
<x/y/z>表明文字沿着三维空间中哪个坐标轴旋转.
原点由\org 代码来指定, 否则由默认的定位点来决定(参见\pos 的说明)
\fr 默认代表\frz. <度数>可以为负值, 可以大于 360. 此命令同样适用于矢量图形.
\fe<字符集>指定文字的编码(font encoding). 例如 0 为英文, 134 为简体中文, 136 为繁体中文. 1 为系统默认.
注: 当 ASS/SSA 文件本身的编码为非 Unicode 编码时, 这个数值总影响到按哪种代码页来显示字幕.
推荐保存 ASS/SSA 文件时选择 Unicode 方式的编码, 例如 UTF-8. 这样可以忽略这个值的设置
\c&H<bbggrr>& 指定文字的颜色(color). <bbggrr>是一个十六进制的 RGB 数值, 但颜色顺序相反(蓝-绿-红).
<bbggrr>排在最前的 00 可以忽略不写, 例如{\c&HFF&}={\c&H0000FF&}, 为纯红色
\1c&Hbbggrr&, \2c&Hbbggrr&, \3c&Hbbggrr&, \4c&Hbbggrr&分别设定主要, 次要, 边框, 阴影颜色
\c 相当于\1c, 为字体本身填充颜色
\alpha&H<aa>&设定文字的透明度(alpha). <aa>是一个十六进制数值. 00 为全见, FF 为全透明
\1a&Haa&, \2a&Haa&, \3a&Haa&, \4a&Haa&分别设定主要, 次要, 边框, 阴影颜色的透明度
\alpha 一次性调整文字所有元素的透明度
\a<位置> <位置>是一个数字代码, 用来代表字幕出现在屏幕中的位置(alignment)
1, 2, 3 代表出现在画面底端的字幕, 分别为左对齐, 居中, 右对齐
5, 6, 7 代表出现在画面顶端的字幕, 分别为左对齐, 居中, 右对齐(在 1,2,3 基础上加了 4)
9, 10, 11 代表出现在画面中间的字幕, 分别为左对齐, 居中, 右对齐(在 1,2,3 基础上加了 8)
当一行出现多个\a 代码时, 只有最前面的一个有效
\an<位置> <位置>为一数字代码, 代表字幕的位置, 从 1 到 9, 与小键盘的数字键代表的位置一致
当一行出现多个\an 代码时, 只有最前面的一个有效
注: 一般情况下\a, \an 设置字幕位置, 但当有\pos, \move 等代码时, \a 和\an 设置的是文字的定位点.
\k<时间长度>卡拉 OK 效果, 高亮之前文字使用次要颜色, 高亮后使用主要颜色
<时间长度>代表在下一小段出现高亮效果之前的当前段高亮停留时间, 值为百分之一秒的倍数
\k<时间长度>按照每一分隔好的小段来进行高亮显示
\kf 或者\K<时间长度>是从左至右的流畅填充高亮
\ko<时间长度>, 与\k 相似, 但在高亮之前文字边框也被去掉, 高亮后才显示边框
\q<方式>定义分行方式, 即 WrapStyle
值为 0: 智能分行, 大致平均分行, 不能完全平均时上面的行较长.
值为 1: 行尾分行, 尽管排满一整行后, 再分到下一行
值为 2: 不分行, 超出长度的行会排到屏幕以外. 这种方式下, \n 和\N 都可以强制分行
值为 3: 智能分行, 与方式 0 相似, 但下面的行比较长
\r[<风格>]取消一行中之前的所有覆写代码效果, 包括动态特效. (restore/reset)
<风格>令其恢复到指定的风格, 如果没有指定<风格>则恢复到这一行的默认风格
\t([<时值 1>, <时值 2>, ] [<加速度>,] <风格代码>)
提供从一种风格转到另一种风格的逐渐变化的动态效果. 只有部分风格代码可以用\t 进行动态变换:
字体　　几何形　　其它
\fs \fscx \bord
\fsp \fscy \shad
\c \frx \clip
\1c \fry
\2c \frz
\3c \fr
\4c
\alpha
\1a
\2a
\3a
\4a
注: 对于 \clip, 只有矩形可以呈动态效果, 矢量绘画图形无法呈动态
<时值 1>与<时值 2>是从该行开始显示后计算的毫秒数, 两时值间的时间间隔就是动态效果的运行时间(两时值无先后之分).
这两个时候没有指定时相当于<时值 1> = <时值 2> = 0. 这时动态效果在整行的时间内运行
<加速度>没有指定时相当于 1, 此时匀速变化. <加速度>在 0 和 1 之间时速度由快变慢, 大于 1 时由慢变快.
在<时值 1>之前, 显示内容是{\t}代码之前的风格, <时值 2>以后是<风格代码>所指定的风格.
\pos(<x>, <y>) 设置该行显示的位置, x,y 为定位点的坐标值, 屏幕可见区的坐标为正值. 原点(0,0)在左上角落
对于不同屏幕排列的字幕, 定位点的相对位置不同.
\an1 的定位点在字幕左下角, \an2 的定位点在字幕正中下方, \an3 的定位点在字幕右下角
\an4 的定位点在字幕正中左端, \an5 的定位点在字幕正中, \an6 的定位点在字幕正中最右端
\an7 的定位点在字幕左上角, \an8 的定位点在字幕正中上方, \an9 的定位点在字幕右上角
一行中有多个\pos 时以最前面的\pos 值为准
\move(<x1>, <y1>, <x2>, <y2>[, <时值 1>, <时值 2>])
提供从一个位置到另一个位置的移动动态效果.
x1, y1 是定位点起始的坐标(定位点的说明参见\pos 代码), x2, y2 是定位点结束的坐标
1)未达到<时值 1>时, 文字位置的定位点在(x1, y1)
2)在<时值 1>和<时值 2>之间, 定位点从(x1, y1)移动到(x2, y2)
3)超过<时值 2>后, 文字的定位点固定在(x2, y2)点.
当时值 1, 时值 2 没有指明时相当于两个都是 0, 此时在该行的整个时间段内匀速移动(时值的具体说明参见\t 代码)
时值 1, 时值 2 可以大于该行的总时间段, 令没有达到终点时结束移动.
\move 只能够匀速移动, 不能够加速移动
一行中有多个\move 代码时只有排在最前面的\move 效果有效
一行中不能同时使用{\pos}和{\move}代码, 如果同时出现则只有排在最前面的效果有效
\org(<x>, <y>)设置旋转的原点坐标(origin), 它影响一行中所有的旋转
当有旋转效果的一行中没有\org 代码, 则用于旋转的原点坐标就是默认的定位点.
原点坐标可以放置在画面可见区域以外, 足够远时通过旋转一个小角度可让字幕产生”穿过屏幕”的效果
一行中有多个\org 代码时只有排在最前面的\org 有效
注意: \t, \move 和 \pos 会忽略位置重叠的检测
\fad(<淡入时间>,<淡出时间>)
提供简单的淡入淡出效果. <淡入时间>与<淡出时间>之和不能超过该行的时间长度.
\fade(<a1>,<a2>,<a3>,<时值 1>,<时值 2>,<时值 3>,<时值 4>)
提供复杂的透明度变化效果. <a1>,<a2>,<a3>为三个不同的透明度值(alpha), 取值从 0 到 255. 0 全见,255 全透明
这个代码里的 7 个参数要求全部写齐, 作用方式如下:
1) 在<时值 1>之前, 透明度为<a1>
2) 在<时值 1>与<时值 2>之间, 透明度从<a1>变化到<a2>
3) 在<时值 2>与<时值 3>之间, 透明度为固定的<a2>
4) 在<时值 3>与<时值 4>之间, 透明度从<a2>变化到<a3>
5) 在<时值 4>之后, 透明度为<a3>
\clip(<x1>, <y1>, <x2>, <y2>)
定义一个矩形框, 只有在这个框里的字幕才为可见
<x1>, <y1>, <x2>, <y2>为构成矩形的两个对角点
\clip([<等级>,] <绘图命令>)
定义一个绘画图形, 令这个图形内的字幕可见
<绘图命令>参见第二组代码.
<等级>是指定图形的缩放等级. 为 2 的(等级-1)次方. 如/clip4, 2 的(4-1)次方为 8, 即将后面的图形缩至 1/8

(二)绘图代码

\p<等级>进入绘图模式并指定坐标的放大等级.
<等级>为坐标的缩放等级, 按 2 的(等级-1)次方计算. 如/clip4, 2 的(4-1)次方为 8, 即将后面的坐标缩至 1/8
当<等级>=0 时, 关闭绘图模式.
\pbo<y> 定义所绘图形的基线偏移值.(baseline offset)
当 y>0 时, 图形的所有坐标沿 y 轴向下移指定的像素值
当 y<0 时, 图形的所有坐标沿 y 轴向上移指定的像素值

绘图命令:

m <x> <y> 将鼠标移至坐标(x, y), 同时将现有的图形封闭(即开始画新的图形), 所有绘画都以这个命令开始.
n <x> <y> 将鼠标移至坐标(x, y), 同时不封闭原有的图形
l <x> <y>从鼠标原来的坐标位置画一条直线到(x, y), 并从这个点继续绘画
b <x1> <y1> <x2> <y2> <x3> <y3>
画一条三度贝塞尔曲线至(x3, y3), 以(x1, y1), (x2, y2)作为控制点
s <x1> <y1> <x2> <y2> <x3> <y3> .. <xN> <yN>
从现有坐标画一条”三次均匀 B 样条”(cubic uniform b-spline)到点(xN, yN)
该命令至少要含有三个坐标点(三个坐标时等同于贝塞尔曲线)
这个命令实质上是把几条贝塞尔曲线连结到一起.
p <x> <y>沿长 B 样条(b-spline)到点(x, y), 作用相当于在 s 命令后多加一个坐标点(x, y)
c 结束 B 样条(b-spline)

绘图代码的注意事项:
1) 除了在\clip(..)命令中, 绘图命令必须以{\p1+}开头, 以{\p0}结尾.　(“1+”指大于等于 1 的整数)
2) 所有绘图都必须以 m 命令开头
3) 所有图形都必须最终闭合
4) 所有没有闭合的图形会在起始点和终点之间连上一条直线来闭合
5) 在同一行中, 若图形有重叠, 则重叠部分执行异或逻辑运算(即正正得负, 负负得正)
6) 如果相同的绘图命令在一起, 则只需保留最前面命令代码, 后面的坐标可以连着写
7) 绘图中使用的是相对坐标系. 坐标原点由当前的基线位置(\pbo), 当前行的排列方式决定(参见\pos 的定位点说明)
命令 p c 只能用在 B 样条命令 s 的后面

ASS 之后又有更新的版本, 如 ASS2, ASS3 等. 这些在开发中没有整合出最终版本, 因此没有官方的相关具体说明文件, 也没有得到广泛使用. 而它新增的一些代码和改动, 可以为 VSFilter 2.39 以上的版本识别和使用. 虽不推荐在字幕发布中使用, 但可用于压制中.
边框宽度\xbord<字号>
\ybord<字号>
沿 x 轴和 y 轴分别对文字边框宽度进行调整. 注: 如果在一行中用了\xbord, \ybord 后又使用\bord, 则会被\bord 覆写.
阴影深度\xshad<depth>
\yshad<depth>
沿 x 轴和 y 轴分别对文字阴影深度进行调整, 可以使用负值
边缘模糊\be<强度>
按一般模糊的倍数来模糊文字边缘, <强度>必须为整数. 注当强度过大时会导致文字”消失”
\blur<强度>
与\be 相似, 但它用的是更加高级的高斯模糊, <强度>可以为非整数. 注意过高的值可能占用过多系统 CPU
文字倾斜\fax<因数>
\fay<因数>
沿 x 轴和 y 轴分别对文字行进行倾斜调整. <因数>可以为负数. 如\fax-0.5 等同于斜体. (注: 一般情况下因数的绝对值不要超过 2)
卡拉 OK \kt<时间长度>
传统的卡拉 OK 模式是从左至右, 依次填充音节. 而\kt<时间长度>重新定义了该音节开始填充的时间
<时间长度>是指该音节从整行开始过了多长时间后开始填充.
例如{\k10}一{\kt30\k10}二{\kt10\k10}三
先填充”一”, 过了 0.1 秒后”一”填充完毕, 开始填充”三”, 又过了 0.1 秒”三”填充完毕, 再过了 0.1 秒(一行开始后 0.3 秒)开始填充”二”
动态风格\t([<时值 1>, <时值 2>, ] [<加速度>,] <风格代码>)
除了原有的风格, 新增了以下的代码也可以使用{\t}动态转变效果
\fax \fay \be \blur \xbord \ybord \xshad \yshad \iclip
(注: 对于\clip 和\iclip, 只有矩形框才能使用动态效果, 绘画图形不能使用动态效果)
图形蒙板\iclip(<x1>,<y1>,<x2>,<y2>)
\iclip([<等级>,] <绘图命令>)
\iclip 与\clip 相似, 所有参数与命令都一致, 但效果相反, 即在图形区域内的文字不可见, 以外的文字可见.
注: 当\iclip 和\clip 出现在同一行时, 所有的图形效果都会当成”\iclip”处理.
另注:
所有的坐标值不再局限使用整数, 可以使用小数.
一行的开始, 结束时间, 以及卡拉 OK 的时间可以使用更加精准的时间(原 SSA, ASS 都只精确到 0.01 秒)<未验证>
【返回顶端】

附 B. 内嵌的字体/图片编码
SSA 所使用的内嵌字体/图片编码是 UUE-encoding 的一种形式. (因极少用到, 以下仅引用原文)
It takes a binary file, three bytes at a time, and converts the 24bits of those bytes into four 6-bit numbers. 33 is added to each of these four numbers, and the corresponding ascii character for each number is written into the script file.
The offset of 33 means that lower-case characters cannot appear in the encoded output, and this is why the “filename” lines are always lower case.
Each line of an encoded file is 80 characters long, except the last one, which may be shorter.
If the length of the file being encoded is not an exact multiple of 3, then for odd-number filelengths, the last byte is multiplied by hexadecimal 100, and the most significant 12 bits are converted to two characters as above. For even-number filelengths, the last two bytes are multiplied by hexadecimal 10000, and the most significant 18 bits are converted to three characters as above.
There is no terminating code for the embedded files. If a new [section] starts in the script, or if another filename line is found, or the end of the script file is reached then the file is considered complete.