ASS字幕格式规范

  1. 此文件翻译自“ASS格式规范”,并进行了筛减和补充,原文件可从以下链接下载:
    http://www.perlfu.co.uk/projects/asa/ass-specs.doc

2) ASS之后有多个更新的版本, 如ASS2, ASS3等,但是在开发中没有整合出最终版本,因此没有官方的相关具体说明文件,也没有得到广泛使用。而它新增的一些代码和改动,可以为VSFilter 2.39以上的版本识别和使用,虽不推荐在字幕发布中使用,但可用于压制中。
完整代码可参考:ASS标签 https://aegi.vmoe.info/docs/3.2/ASS_Tags/

3)另可参考以下资料:
维基百科 http://en.wikipedia.org/wiki/SubStation_Alpha
SSA/ASS字幕格式全解析 http://blog.csdn.net/winglyx/article/details/6791719
ASS基本特效代码图文教程https://wenku.baidu.com/view/f6986d79844769eae009edc4.html

4)推荐使用Sublime文本编辑器加载Advanced Substation Alpha插件进行编辑,界面如下:

目录
一、基本信息
二、[Script Info]部分
三、[v4+ Styles]部分
四、[Events]部分
附录:样式覆盖代码
①一般代码
②动画代码
一、基本信息
1、SSA全称Sub Station Alpha, 是一种字幕格式, 用以实现比传统字幕诸如srt等格式更为复杂的功能。SSA同时也是一款软件的名称, 专用于创建和编辑SSA格式的字幕。
ASS全称Advanced SubStation Alpha,是一种比SSA更为高级的字幕格式, 实质是SSA v4.00+ 版本. 它拥有比SSA更多的功能。
2、ASS是简单的(DOS)文本文件,因此可用任何文本编辑器“手动”编辑,但在手动编辑时必须谨慎,因为SSA将假定脚本遵守本文中规定的“规则”,任何错误都可能导致不可预测的结果。
3、脚本最多包含五部分:[Script Info]、[v4+ Styles]、[Events]、[Fonts]、[Graphics]
①"[Script Info]"必须是整个文件的第一行。
②现在的SSA文件已经很少包含"[Fonts]"和"[Graphics]" 这两个部分了,因为这些功能只被Sub Station Alpha这一个程序所支持,而其它的filter (Vobsub/Vsfilter/Avery Lee Subtitler filter) 都不支持。
4、每部分中的大多数行都以某个代码开头,称为“行描述符(line descriptor)”,由冒号结束。
5、行类型(line type)主要包括:①;分号开头的注释行;②Format:格式行;③[Script Info]部分15个行类型;④[v4+ Styles]部分的样式行;⑤[Events]部分的6个行类型。(行类型将在每部分分别介绍)。
6、每一行中的信息字段用逗号分隔,所以角色名称([Events]部分)和样式名称([v4+ Styles]部分)中不能含有逗号。
7、行不可分割,脚本中的每个条目都包含了一行中所有的信息,不能被分成多行。
8、格式不正确的行会被忽略。
9、[Events]部分的事件顺序可以打乱输入,仍可被正确播放, 您不能假定每个对话行都按照时间顺序排列在脚本文件中。
10、如果在脚本中使用了未知的样式,那么将使用*Default样式 。
11、如果样式指定了未安装的字体,那么将使用Arial/宋体。

二、[Script Info]部分
脚本信息,这一部分主要介绍文件本身和制作者的信息。

示例:

[Script Info]
Title:あの日見た花の名前を僕達はまだ知らない
Original Script:「海猫食堂字幕组」
ScriptType:v4.00+
Collisions:Normal
PlayResX:1920
PlayResY:1080
Timer:100.0000
[Script Info]部分最多包括如下16项内容(16个行类型,不同软件生成的信息包含的项目也不同,其中3~8、13可有可无,1、2建议含有,10、14、15、16常常含有,9、11、12一般一定含有):

Title, Original Script, Original Translation, Original Editing, Original Timing, Synch Point, Script Updated By, Update Details, Script Type, Collisions, PlayResX, PlayResY, PlayDepth, Timer, WrapStyle, ScaledBorderAndShadow
1、Title: 标题,是对脚本的描述,通常为作品名称或字幕组名称。
2、Original Script: 原作者 ,通常为作者名称或字幕组名称。
3、Original Translation: 对白的翻译者。
4、Original Editing: 原校对和润色者。
5、Original Timing: 时间轴制作者。
6、Synch Point: 描述脚本在视频的何处开始播放,通常使用0。
7、Script Updated By: 其他编辑过此原始脚本的字幕组名称。
8、Update Details: 对原始脚本的更新细节——由其他字幕组制作。
9、Script Type: 这是SSA脚本格式的版本信息,ASS版本为V4.00+。
10、Collisions: 决定了在自动防止字幕碰撞/冲突显示时,字幕是如何移动的。
包含Normal和Reverse两种模式:
①若为"Normal" ,则后一条字幕将出现在前一条字幕的上方;
②若为"Reverse",则前一条字幕将向上移动给后一条字幕让位。
11、PlayResX: 播放脚本时屏幕的宽度,建议与视频分辨率一致。
12、PlayResY: 播放脚本时屏幕的高度,建议与视频分辨率一致。
①屏幕的左上角坐标为(0,0),右下角坐标为(PlayResX数值,PlayResY数值),所有给出的坐标(三个边距, \pos, \move, 矢量绘图等)都以此数值作为参照;
② 所有的文字字号均按照此分辨率等比例放大缩小;
③ 这个分辨率不影响最终显示文字的宽高比, 但影响矢量绘画图形的宽高比。
13、PlayDepth: 播放脚本时颜色的深度。
14、Timer: 播放速度,是百分数,100.0000%即精确的100%,小数点后有四位。
默认100%。当超过100%时,将会减少字幕的整体持续时间,即意味着字幕将会越来越快地出现;低于100%时,将越来越慢。这种拉伸和压缩只在脚本播放期间起效,不会更改脚本中项目的实际时间值。
15、WrapStyle: 当一个Dialogue行中存在用空格分开的多句话时,此项定义了默认换行方式:
①0(默认):智能换行,尽量平均,若无法平均,上方字幕会更长;
②1:行尾换行,一行的最后一个空格才换行,只有\N可以强制换行;
③2:不换行,\n和\N都可以强制换行;
④3:同0,智能换行,尽量平均,若无法平均,下方的字幕会更长。
16、ScaledBorderAndShadow: 边框宽度与阴影深度是否随着视频分辨率同等比例缩放。
① no: 边框宽度与阴影深度完全按照指定的像素数显示;
②Yes: 边框宽度与阴影深度随着实际视频的分辨率同等比例缩放.。
三、[v4+ Styles]部分
这一部分用来定义字幕的外观和位置,以便[Events]部分直接引用。此部分由格式行(Format:)和样式行(Style:)组成。除边框样式外,所有样式都可以在[Events]部分使用代码重设。

示例:

[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,方正准圆_GBK,71,&H00FFFFFF,&H00000000,&H00000000,&H00000000,-1,0,0,0, 100,100,1,0.00,1,1,1,2,15,15,25,134
Style: SONG,方正清刻本悦宋简体,48,&H00FFA030,&H00000000,&H00FFFFFF,&H60000000,-1, 0,0,0,100,100,0,0.00,1,2,1,7,80,15,30,134
格式行和样式行的内容一一对应。格式行定义了如何解释样式中的每个字段,因此格式行必须出现在所有的样式之前,且格式行中列出的字段名必须拼写正确!格式行允许在未来将新字段添加到脚本格式中,并且允许旧版本的软件读取它所识别的字段——即使字段顺序已经更改。包括如下23个字段:

Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
1、Name 样式名称(用于[Events]部分引用,区分大小写,不能包含逗号)
2、Fontname 字体名称( Windows所使用的字体名称,区分大小写 )
3、Fontsize 字体大小(字号)
4、PrimaryColour 主体颜色(一般情况下文字的颜色)
5、SecondaryColour 次要颜色( 在卡拉OK效果中字幕由次要颜色变为主体颜色。 )
6、OutlineColor 边框颜色
7、BackColour 阴影颜色
8、Bold 粗 体( -1=开启,0=关闭)
9、Italic 斜 体( -1=开启,0=关闭)
10 Underline 下划线 ( -1=开启,0=关闭)
11 Strikeout 删除线( -1=开启,0=关闭)
12 ScaleX 横向缩放(单位 [%],100即正常宽度)
13 ScaleY 纵向缩放(单位 [%],100即正常高度)
14 Spacing 字间距(单位 [像素],可用小数)
15 Angle 旋转角度(绕z轴逆时针旋转\frz,负数=顺时针旋转。单位 [度],可用小数)
16 BorderStyle 边框样式(1=边框+阴影,3=不透明底框)
17 Outline 边框宽度(单位 [像素],可用小数)
18 Shadow 阴影深度(单位 [像素],可用小数,右下偏移)
19 Alignment 对齐方式(同小键盘布局,决定了旋转/定位/缩放的参考点)
20 MarginL 左边距(字幕距左边缘的距离,单位 [像素],右对齐和中对齐时无效)
21 MarginR 右边距(字幕距右边缘的距离,单位 [像素],左对齐和中对齐时无效)
22 MarginV 垂直边距(字幕距垂直边缘的距离,单位 [像素],下对齐时表示到底部的距离、上对齐时表示到顶部的距离、中对齐时无效, 文本位于垂直中心)
23 Encoding 编码( 0=ANSI,1=默认,128=日文,134=简中,136=繁中,一般用默认1即可 )

*颜色格式:&Haabbggrr,均为十六进制,取值0-F。
前2位(alpha)为透明度,00=不透明,FF=DEC255=全透明;后6是BGR蓝绿红颜色。 排在最前的00可以忽略不写, 如:{\c&HFF&}={\c&H0000FF&}为纯红色、&HFFFFFF=纯白色、&HC8000000=透明度为200的黑色。

四、[Events]部分
这一部分由格式行(Format:)和事件行组成。因此格式行必须出现在所有事件前。事件行包括:

①Dialogue: 这是一个“对话”事件,用于显示一些文本。
②Comment: 这是一个“评论”事件,它包含与对话、图片、声音、电影或命令事件相同的信息,但在脚本回放期间会被忽略。
③Picture: 这是一个“图片”事件 ,意味着SSA将显示指定的

.bmp .jpg .gif .ico或.wmf图形( 不支持.png, 且filter不支持加载图片)。
④Sound: 这是一个“声音”事件,意味着SSA将播放指定的.wav文件。 (filter不支持)
⑤Movie: 这是一个“影片”事件,意味着SSA将播放指定的.avi文件。 (filter不支持)
⑥Command: 这是一个“命令”事件,意味着SSA将执行指定的程序作为后台任务。 (filter不支持)
*③~⑥使用频率及兼容性过低,不作讲解。

示例:

[Events]
Format: Layer, Start, End, Style, Actor, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:22:41.88,0:22:43.04,Default,波波,0000,0000,0000,,你怎么在这里?
Dialogue: 0,0:22:46.28,0:22:50.12,Default,仁太,0000,0000,0000,,那一天 在这里停滞的时间又开始流动了
Comment: 0,0:00:00.00,0:00:00.00,Default,,0000,0000,0000,,----------------------片尾曲
Dialogue: 0,0:20:42.37,0:20:46.20,SONG,,0000,0000,0000,,这个有你的夏天 将来的梦想
Dialogue: 0,0:20:46.29,0:20:49.30,SONG,,0000,0000,0000,,满满的希望 我永远难忘
*Name和Effect可省略,缺省后保留逗号

格式行和事件行的内容一一对应。格式行定义了如何解释事件中的每个字段 ,因此格式行必须出现在所有的事件之前,且格式行中列出的字段名必须拼写正确!格式行允许在未来将新字段添加到脚本格式中,并且允许旧版本的软件读取它所识别的字段——即使字段顺序已经更改。包括如下10个字段:

Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
1、Layer 字幕图层(任意的整数,图层不同的两个字幕不被视为有冲突,图层号大的显示在上层)
2、Start 开始时间(格式0:00:00.00 [时:分:秒:百分数],小时只有一位数)
3、End 结束时间(格式0:00:00.00 [时:分:秒:百分数],小时只有一位数)
4、Style 样式名称(引用[v4+ Styles]部分中的Name)
5、Name 角色名称(用于注释此句是谁讲的,字幕中不显示,可省略,缺省后保留逗号)
6、MarginL 重新设定的左边距(为四位数的像素值,0000表示使用当前样式定义的值)
7、MarginR 重新设定的右边距(为四位数的像素值,0000表示使用当前样式定义的值)
8、MarginV 重新设定的垂直边距(为四位数的像素值,0000表示使用当前样式定义的值)
9、Effect* 过渡效果(三选一,可省略,缺省后保留逗号;效果中各参数用分号分隔)
①文本/图片向上滚动:Scroll up;;;[;]
②文本/图片向下滚动:Scroll down;;;[;]
y1,y2 =上下范围(不区分顺序,y1=y2=0时全屏幕滚动);fadeawayheight=上下的淡入淡出范围;
delay取值1~100,它减慢了滚动的速度,0意味着没有延迟。字幕的移动速度为(1000/delay)像素/秒,即字幕从起点到终点所用时间=|y1-y2|*(delay/1000) 秒。)
③文本/图片横向移动:Banner;[;][;]
lefttoright=0/1:0=从右向左移动(默认), 1=从左向右移动, 可省略;fadeawaywidth=左右的淡入淡出范围

  • Karaoke:卡拉OK效果,在ASS中该Effect已经废弃不用,变为在Text中使用代码实现。
    10、Text Dialogue:字幕文本( 这是真正作为字幕在银幕上显示的文本。第9个逗号之后的所有内容都被视为字幕文本,因此它可以包含逗号。它还可以通过以下代码来改变[v4+ Styles]部分中的字体属性,并实现各种特效)
    *Picture、Sound、Movie、Command的Text为文件的完整路径和名称。

附录: 样式覆盖代码
*所有代码均由反斜杠 \ 开头
*除\n,\h,\N外,所有代码均输入在 { } 内,一个 { } 内可存在多个代码
*下列代码中的说明符号(实际使用中没有)含义:<参数>,<../..>选择一项,[可缺省项]

①基础代码
1、空格与换行
\n 空格(若宽度超出范围则空格后自动换行),
\h 硬空格(不换行),\N 硬回车(两行之间没有空隙)

\q<0,1,2,3> 更改 脚本中的WrapStyle换行方式:
①0(默认):智能换行,尽量平均,若无法平均,上方字幕会更长;
②1:行尾换行,一行的最后一个空格才换行,只有\N可以强制换行;
③2:不换行,\n和\N都可以强制换行;
④3:同0,智能换行,尽量平均,若无法平均,下方的字幕会更长。

2、改变字体效果
\fn 改变字体(如:\fn微软雅黑)
\fs 改变字体大小(不可用小数)
\r [