Skip to content

ASS 标签 (标准)

Published: at 23:05

ToC

说在前面

之前总结了一份 ASS 标签的文章,但因为解析的问题,原来的域名现在都 301 到这里了,所以相当于名存实亡,干脆直接在这里重新整理一份好了。

这里总结的都是标准的 ASS 标签,暂不包括 VSFilterMod 的标签,并且也没有计划在本文中包括其他标签。VSF 如果有空的话我会单独摸一篇(

由于是从 Markdown 直接(间接?)转换过来的,因此可能会出现一些问题,欢迎在评论区指出(

简介

本文精简自 ASS标签 页面,删去了所有的例子和原英文文本,并进行了格式化表示,旨在方便查阅。

阅读之前你需要了解类似 TypeScript 的类型标记方式。

特殊符号

名称内容说明
软换行/软空格\n插入一个强制换行符,只在换行方式 2 下生效。
硬换行\N插入一个强制换行符,在所有换行方式下都生效。
硬空格\h插入一个不换行的空格。句子将不会在硬空格处自动换行。

并且当硬空格出现在一行的开头或者结束的地方,也不会被忽略。
(Aegisub 排版引擎一般会忽略换行处的空格)。 |

特效标签:格式

特效标签需要包裹在 {} 内,以 \ 开头。

此处对下文描述的一些数据类型作简单说明:

ID数据类型简介
01int整数
02number实数
03boolean布尔,实际书写时须使用 0 / 1
04string字符串
05Time时间,表示形式为整数,单位毫秒
06Color颜色,实际书写时的表示格式:&HBBGGRR&
07Alpha透明度,实际书写表示为:&HAA
00 代表不透明
08Position位置,实际书写时用整数 1-9
对应小键盘上的位置
09DrawingCommands绘画指令

特效标签:整行

这一类特效标签会对整行字幕生效。

pos (设置位置)

格式

pos(x: int, y: int)

说明

设置一行字幕的位置,与行对齐有关。

move (移动位置)

格式

move(x1: int, y1: int, x2: int, y2: int, t1?: Time = 0, t2?: Time = 0)

说明

让一行字幕移动。当 t1t2 未定义时,移动时间即为字幕时间。它也会设置字幕的位置。 t1t2 相对字幕开始时间计算。

局限性

如果你需要这两种效果。那么你得把字幕分成几行,然后分别设定移动效果,让它们衔接起来。这就不是本文要涉及的内容了。

org (设置旋转中心)

格式

org(x: int, y: int)

说明

设定一行字幕的旋转中心

旋转中心默认为位置设定的参考点,其会随着动画移动;但如果设置了 [org](#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

注:对于 libassfadfade 是一样的。也就是说,二者的区别由参数数量决定,而非名称。你也可以用 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](#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](#fs) 更准确的指定字体大小。

fsp (字符间距)

格式

fsp(spacing: number)

说明

设置字符间距spacing 会按脚本分辨率计算。

frx, fry, frz, fr (旋转文本)

格式

frx(amount: number)
fry(amount: number)
frz(amount: number)
fr(amount: number)
Terminal window
alias fr=frz

说明

按坐标轴旋转文本

y
|
|
|
x —— —— —— ·
/
/
/
z

amount > 0 时,文本旋转的方向为:大拇指指向坐标轴方向时四指旋转的方向。

文本的锚点为当前字幕行的原点,由 [org](#org) 规定

fax, fay (剪切变换)

格式

fax(factor: number)
fay(factor: number)

说明

对文本应用一个剪切变换factor0 即意味着不做变换。

通常 factor ∈ [-2, 2],否则效果一般都不是很好。

剪切是在旋转之后应用的,以旋转后的坐标系为基准。这个剪切用的坐标系不受旋转中心的影响。

fe (字符集)

格式

fe(id: int >= 0)

说明

设置字体字符集

ID类型说明
0ANSIWindows CP-1252,西欧语言
1默认视用户操作系统的配置而定,但也允许字体子系统视情况选择一个不同的字符映射表
2符号码位的取值范围是 [0, 255],显示效果视具体字体而定,像 Wingdings 这样的装饰字体应该用这个 ID
128Shift-JIS日语
129Hangeul韩语的一个字符集
130Johab韩语的一个字符集
134GB2312简体中文
136BIG5繁体中文
162土耳其语
163越南语
177希伯来语
178阿拉伯语

c, 1c, 2c, 3c, 4c (文本颜色)

格式

c(color: Color)
1c(color: Color)
2c(color: Color)
3c(color: Color)
4c(color: Color)

说明

设置文本颜色

alpha, 1a, 2a, 3a, 4a (透明度)

格式

alpha(alpha: Alpha)
1a(alpha: Alpha)
2a(alpha: Alpha)
3a(alpha: Alpha)
4a(alpha: 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)
Terminal window
alias K=kf

说明

卡拉 OK 效果。该标签通常不手动创建。

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 动画化的特效标签如下表所示:

字符形状其他效果
fsfscxbord
fspfscyxbord
cfrxybord
1cfryshad
2cfrzxshad
3cfryshad
4cfaxclip
alphafayiclip
1abe
2ablur
3a
4a

对于 clipiclip 标签来说,只有方形的形式能够动画化。矢量绘图的形式无法动画化。

t 标签中混合使用 clipiclip 标签很难得到好看的效果。

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 标签中,或夹在 pp0 之间的特效标签区外部。
绘图指令使用主要填充颜色来填充图形,用边框颜色来填充边框。绘制出的图形也有阴影
绘图指令之间用空格分割,因此下文的格式说明也没有括号。
绘图的思路是这样的:想象在视频画面上有一个光标。当它移动时,它就沿途绘制了曲线;当闭合一个形状时,这个闭合图形就会被着色

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 线条。


Previous Post
【设计文档】PUG 的基本构成单元——Workflow、Pipeline 和 Pipe(1.0)
Next Post
SyntaxHighlighter Evolved 无法显示 YAML 高亮的解决方案