说在前面
之前总结了一份 ASS 标签的文章,但因为解析的问题,原来的域名现在都 301 到这里了,所以相当于名存实亡,干脆直接在这里重新整理一份好了。
这里总结的都是标准的 ASS 标签,暂不包括 VSFilterMod 的标签,并且也没有计划在本文中包括其他标签。VSF 如果有空的话我会单独摸一篇(
由于是从 Markdown 直接(间接?)转换过来的,因此可能会出现一些问题,欢迎在评论区指出(
简介
本文精简自 ASS标签 页面,删去了所有的例子和原英文文本,并进行了格式化表示,旨在方便查阅。
阅读之前你需要了解类似 TypeScript
的类型标记方式。
特殊符号
名称 | 内容 | 说明 |
---|---|---|
软换行/软空格 | \n | 插入一个强制换行符,只在换行方式 2 下生效。 |
硬换行 | \N | 插入一个强制换行符,在所有换行方式下都生效。 |
硬空格 | \h | 插入一个不换行的硬空格。句子将不会在硬空格处自动换行。 并且当硬空格出现在一行的开头或者结束的地方,也不会被忽略。 (Aegisub 排版引擎一般会忽略换行处的空格)。 |
特效标签:格式
特效标签需要包裹在 {}
内,以 \
开头。
此处对下文描述的一些数据类型作简单说明:
ID | 数据类型 | 简介 |
---|---|---|
01 | int | 整数 |
02 | number | 实数 |
03 | boolean | 布尔,实际书写时须使用 0 / 1 |
04 | string | 字符串 |
05 | Time | 时间,表示形式为整数,单位毫秒 |
06 | Color | 颜色,实际书写时的表示格式:&HBBGGRR& |
07 | Alpha | 透明度,实际书写表示为:&HAA 00 代表不透明 |
08 | Position | 位置,实际书写时用整数 1-9 对应小键盘上的位置 |
09 | DrawingCommands | 绘画指令 |
特效标签:整行
这一类特效标签会对整行字幕生效。
pos
(设置位置)
格式
pos(x: int, y: int)
说明
设置一行字幕的位置,与行对齐有关。
move
(移动位置)
格式
move(x1: int, y1: int, x2: int, y2: int, t1?: Time = 0, t2?: Time = 0)
说明
让一行字幕移动。当 t1
,t2
未定义时,移动时间即为字幕时间。它也会设置字幕的位置。 t1
,t2
相对字幕开始时间计算。
局限性
- 只能匀速移动:一行中只能够存在一个
move
或pos
。
如果你需要这两种效果。那么你得把字幕分成几行,然后分别设定移动效果,让它们衔接起来。这就不是本文要涉及的内容了。
org
(设置旋转中心)
格式
org(x: int, y: int)
说明
设定一行字幕的旋转中心。
旋转中心默认为位置设定的参考点,其会随着动画移动;但如果设置了 org
,则旋转中心固定。
如果你将旋转中心放在 3D 场景中的消失点处,字幕行的 3D 旋转会有正确的和场景相匹配的透视效果。
把旋转中心放在画面外面是完全可行(有些时候也很有用)的。如果旋转中心足够的远,那么就可以计算出合适的小转动角,让文本看起来是沿直线(或者近似直线)在屏幕上移动。这有些难以掌控,但是可以用来绕过
move
的格式限制,比如无法加速移动,无法在每条线上进行几个移动。
每行字幕只有第一个 org
生效。
fad
(简单淡入淡出)
格式
fad(fadein: Time, fadeout: Time)
说明
设定一行字幕的简单淡入淡出效果。将某一参数设置为 0
时不产生参数对应效果。
fade
(复杂淡入淡出)
格式
fade(a1: Alpha, a2: Alpha, a3: Alpha, t1: Time, t2: Time, t3: Time, t4: Time)
说明
设定一行字幕的复杂淡入淡出效果。效果如下所示:
透明度 a1 a1->a2 a2 a2->a3 a3
时间轴 |------|----------|----------------|----------|------> 时间(t)
时间点 0 _t1 _t2 _t3 _t4
注:对于 libass
,fad
和 fade
是一样的。也就是说,二者的区别由参数数量决定,而非名称。你也可以用 fad
使用七个参数来实现复杂的淡入淡出效果。
clip
, iclip
(遮罩)
设置一个遮罩。遮罩中坐标按脚本分辨率计算,以视频左上角为原点。遮罩有如下两种类型:
方形
格式
clip(x1: int, y1: int, x2: int, y2: int)
iclip(x1: int, y1: int, x2: int, y2: int)
说明
clip
确定一个方形区域,只有区域内的字幕是可见的。
iclip
则相反,只有区域外的字幕是可见的。
矢量绘图
格式
clip(scale?: number = 1, commands: DrawingCommands)
iclip(scale?: number = 1, commands: DrawingCommands)
说明
用矢量绘图画一个遮罩区域来选择显示(clip
)或不显示(iclip
)字幕的一部份。
DrawingCommands
是和 p
一起使用的[绘画指令](#绘画指令);scale
作用和 p
中相同。
不同于方形的遮罩,矢量绘图遮罩无法被
t
动画化。如果你想要这种效果,你需要把一行字幕切成许多行,然后设定每一行在这个动画过程中的遮罩区域。
特效标签:标签后
i
(斜体)
格式
i(enable: boolean)
说明
应用/取消斜体。
b
(粗体)
格式
b(enable: boolean)
b(weight: int > 1)
说明
应用/取消粗体; 设置粗体的字重(大部分字体不支持字重)。
u
(下划线)
格式
u(enable: boolean)
说明
应用/取消下划线。
s
(删除线)
格式
s(enable: boolean)
说明
应用/取消删除线。
bord
(边框)
格式
bord(size: number >= 0)
说明
改变字符边框的宽度。
如果“比例缩放边框和阴影”是选中的,边框宽度值将取决于脚本的分辨率,否则会由视频的分辨率决定(也就是说边框的宽度会自适应使用该字幕的视频)。
xbord
, ybord
改变单坐标轴上的边框宽度。
shad
(阴影)
格式
shad(depth : number >= 0)
说明
设置字符与阴影间的距离。设置深度为 0
使阴影完全消失。其他方面和边框宽度 bord
的设置相似。
xshad
, yshad
改变单坐标轴方向上阴影与字符的距离。此处 depth
可小于 0
,以显示在反方向。
be
(边框模糊)
格式
be(enable: boolean)
be(strength: int)
说明
应用/取消边框模糊; 设置边框模糊循环叠加效果的次数。
效果通常在字符比较小的情况下更明显,有些时候会让字符看起来更舒服。
当文本有边框时,只会模糊边框;反之会模糊文本主体。
对于高强度模糊,blur
通常结果更有用。
blur
(边缘模糊[高斯函数])
格式
blur(strength: number >= 0)
说明
设置边缘模糊 (高斯函数)。
把
strength
设置的太高的话,渲染时会占用大量CPU
时间。
fn
(字体名称)
格式
fn(fontname: string)
说明
设置字体名称。
fs
(字体大小)
格式
fs(fontsize: int > 0)
说明
设置字体大小。
fscx
, fscy
(字体缩放)
格式
fscx(scale: number > 0)
fscy(scale: number > 0)
说明
设置字体在各坐标轴上的缩放。100
为原大小。这两个标签也会影响矢量绘图。
字体变形可以用来修正错误的渲染,也可以比
fs
更准确的指定字体大小。
fsp
(字符间距)
格式
fsp(spacing: number)
说明
设置字符间距,spacing
会按脚本分辨率计算。
frx
, fry
, frz
, fr
(旋转文本)
格式
frx(amount: number)
fry(amount: number)
frz(amount: number)
fr(amount: number)
alias fr=frz
说明
按坐标轴旋转文本。
y | | | x —— —— —— · / / / z
当 amount > 0
时,文本旋转的方向为:大拇指指向坐标轴方向时四指旋转的方向。
文本的锚点为当前字幕行的原点,由 org
规定
fax
, fay
(剪切变换)
格式
fax(factor: number)
fay(factor: number)
说明
对文本应用一个剪切变换。factor
为 0
即意味着不做变换。
通常 factor ∈ [-2, 2]
,否则效果一般都不是很好。
剪切是在旋转之后应用的,以旋转后的坐标系为基准。这个剪切用的坐标系不受旋转中心的影响。
fe
(字符集)
格式
fe(id: int >= 0)
说明
设置字体字符集。
ID | 类型 | 说明 |
---|---|---|
0 | ANSI | Windows CP-1252,西欧语言 |
1 | 默认 | 视用户操作系统的配置而定,但也允许字体子系统视情况选择一个不同的字符映射表 |
2 | 符号 | 码位的取值范围是 [0, 255] ,显示效果视具体字体而定,像 Wingdings 这样的装饰字体应该用这个 ID |
128 | Shift-JIS | 日语 |
129 | Hangeul | 韩语的一个字符集 |
130 | Johab | 韩语的一个字符集 |
134 | GB2312 | 简体中文 |
136 | BIG5 | 繁体中文 |
162 | 土耳其语 | |
163 | 越南语 | |
177 | 希伯来语 | |
178 | 阿拉伯语 |
ID
c
, 1c
, 2c
, 3c
, 4c
(文本颜色)
格式
c(color: Color)
1c(color: Color)
2c(color: Color)
3c(color: Color)
4c(color: Color)
说明
设置文本颜色。
1c
设置主要填充颜色。2c
设置次要填充颜色。这个仅会在标准卡拉 OK 的预填充时使用。3c
设置边框颜色。4c
设置阴影颜色。c
设置以上四种。
alpha
, 1a
, 2a
, 3a
, 4a
(透明度)
格式
alpha(alpha: Alpha)
1a(alpha: Alpha)
2a(alpha: Alpha)
3a(alpha: Alpha)
4a(alpha: Alpha)
说明
设置文本透明度。
1a
设置主要填充透明度。2a
设置次要填充透明度。这个仅会在标准卡拉 OK 的预填充时使用。3a
设置边框透明度。4a
设置阴影透明度。alpha
设置以上四种。
an
(行对齐)
格式
an(pos: Position)
说明
设置文本的行对齐方式,Position
的位置与小键盘对应。
k
, K
, kf
, ko
(卡拉 OK 效果)
格式
k(duration: int > 0)
kf(duration: int > 0)
ko(duration: int > 0)
K(duration: int > 0)
alias K=kf
说明
卡拉 OK 效果。该标签通常不手动创建。
k
: 在这个音节开始之前,使用次要填充颜色和透明度。当这个音节开始时,立即变为使用主要填充颜色和透明度。kf
: 在音节开始之前,使用次要填充颜色和透明度。当音节开始时,文本从左到右由次要填充颜色和透明度变为主要填充颜色和透明度,这个过程在音节结束时刚好结束。ko
: 和kf
类似,但是在音节开始之前,字符的边框会被移除。当音节开始时会立即出现。
q
(换行风格)
格式
q(style: int ∈ [0, 3])
说明
设置换行风格。
换行风格 | 说明 |
---|---|
0 | 智能断行,尽可能让所有的行等长,不可能等长时选择让顶端的行宽一些。只有遇到 \N 会强制换行。 |
1 | 行尾换行,尽可能填满一行,然后换行。只有遇到 \N 会强制换行。 |
2 | 不换行,多余的字符会超过屏幕边缘。遇到 \n 和 \N 都会强制换行。 |
3 | 智能换行,与智能断行相似,但是会选择让靠近底部的行更宽。 |
r
(重置样式)
格式
r(style?: string)
说明
重置其后文本的样式,会让一切样式标签失效,包括动画效果。
style
为重置后新的样式名称。
t
(渐变)
格式
t(t1?: Time, t2?: Time, accel?: Accel, style_modifiers: string)
说明
从一个样式动画渐变到另外一个。可以使用 t
动画化的特效标签如下表所示:
字符 | 形状 | 其他效果 |
---|---|---|
fs | fscx | bord |
fsp | fscy | xbord |
c | frx | ybord |
1c | fry | shad |
2c | frz | xshad |
3c | fr | yshad |
4c | fax | clip |
alpha | fay | iclip |
1a | be | |
2a | blur | |
3a | ||
4a |
对于
clip
和iclip
标签来说,只有方形的形式能够动画化。矢量绘图的形式无法动画化。在
t
标签中混合使用clip
和iclip
标签很难得到好看的效果。
Accel
可以指定动画的速度,1
为匀速,<1
为减速,>1
为加速。具体函数:y = x with x ∈ [0;1] = (t - t1)/(t2 - t1)
指定时间后的变化过程如下所示:
样式名 old old->new new
时间轴 |-------|----------------|-------> 时间(t)
时间点 0 _t1 _t2
绘画标签
p
(绘制模式/分辨率倍数)
格式
p(enable: boolean)
p(scale: int > 1)
说明
进入/退出绘制模式;设置分辨率倍数。放大倍数会被设置成 2 ^ (scale - 1)
。
(此处相当于放大画布,到预览时缩小。)
pbo
(基线偏移)
格式
pbo(amount: int)
说明
决定绘制时的基线偏移,偏移发生在 Y
方向。
注意原点是左上角,因此正值会使绘制位置偏下。
绘画指令
绘画指令需要出现在 clip
标签中,或夹在 p
、p0
之间的特效标签区外部。
绘图指令使用主要填充颜色来填充图形,用边框颜色来填充边框。绘制出的图形也有阴影。
绘图指令之间用空格分割,因此下文的格式说明也没有括号。
绘图的思路是这样的:想象在视频画面上有一个光标。当它移动时,它就沿途绘制了曲线;当闭合一个形状时,这个闭合图形就会被着色。
m
(闭合移动光标)
格式
m x:int y:int
说明
移动光标到 (x, y)
。会自动闭合图形,因为程序认为你这是要去从头开始画一个新的独立的图形。所有的绘图指令都要从这个命令开始。
n
(非闭合移动光标)
格式
n x:int y:int
说明
移动光标到 (x, y)
,但是不闭合当前的图形。
Line
(直线)
格式
l x:int y:int
说明
从当前光标位置到 (x, y)
画一条直线,同时把光标也移动过去。
b
(三阶贝塞尔曲线)
格式
b x1:int y1:int x2:int y2:int x3:int y3:int
说明
画一个三阶贝塞尔曲线,起点是当前光标位置,终点是 (x3, y3)
,控制点是 (x1, y1)
和 (x2, y2)
。
s
(三次 B 线条)
格式
s x1:int y1:int x2:int y2:int x3:int y3:int ... xN:int yN:int
说明
画一个到 N
点的三次B线条。它最少要包含三个坐标点(这种情况下和 b 相同)。这基本上是把几个贝塞尔曲线连接到一起。
p
(扩展 B 线条)
格式
p x:int y:int
说明
把B线条扩展到 (x, y)
,这本质上相当于给 s
追加一个坐标点。
c
(闭合 B 线条)
格式
c
说明
闭合 B 线条。