部分引用自ass字幕格式
一、ass文件简介
引用自维基百科
SubStation Alpha(或 Sub Station Alpha),简称SSA,是由 CS Low(亦作 Kotus)创建、比传统字幕(如SRT)更加强大先进的字幕文件格式。该格式在Windows平台上可以经播放器由VSFilter渲染进行播放。这是一款广受欢迎且已停止开发的字幕编辑制作工具。
而Advanced SubStation Alpha(ASS)是一种比SSA更先进的字幕脚本格式。基于SSA 4.00+编码构建。ASS的主要变化就是在SSA编写风格的基础上增添更多的效果和指令。
该字幕格式常被字幕组所应用,分为内挂字幕、外挂字幕和内嵌字幕三种形式。内挂字幕一般指字幕文件与视频一同封装在MKV文件中,播放时需经过VSFilter渲染。外挂字幕指字幕文件以单独形式存在,播放时经VSFilter渲染到视频上。内、外挂字幕又称软字幕,是可以提取、取出和查看源代码的。而内嵌字幕则是指字幕被以图形方式硬编码到视频中,所以播放时不需VSFilter等渲染,一般来说,该过程不可逆。
SSA当前版本为V4.00。ASS则使用更高级的V4.00+编码。
目前有很多播放器支持渲染SSA、ASS字幕。
二、ass文件结构
1. [Script Info]
这一部分包含了文件内容的标题和总体信息。 [Script Info]这一行必须是v4版本文件的第一行
2. [v4 Styles]
字幕正文使用的风格都在这一部分做出相关定义。 ASS使用的是[v4+ Styles]
3. [Events]
这部分包含所有的事件, 有字幕, 评论, 图片, 声音, 影片和命令. 基本上屏幕中出现的所有内容都集中在这一部分.
4. [Fonts]
如果想把字体内嵌入字幕文件, 那么字体文件须采用数字编码后放在这一部分. 只有truetyle字体才能内嵌入SSA/ASS文件
每一个内嵌字体文件以一行开头, 格式如下:
fontname: <文件名>
开头的”fontname”必须全部用小写, 如果大写会让ASS文件视其为文件编码的一部分.
<文件名>是SSA文件保存字体时使用的文件名, 命名规则如下:
truetype字体原来的字体名称
加一条下划线
如果是粗体则加一个”B”
如果是斜休则加一个”I”
加一个数字表明字体编码(字符集)
最后加上”.ttf”
例如:
fontname: comic_B0.ttf
在这一行之后是一些可打印的字符组成的行, 代表组成这个字体的二进制字符, 除了最后一行可能短些, 其余每行有80个字符.
从二进制转换到字符用的是UUE-encoding的编码方式
三、各部分说明
1. [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位小数点. |
WrapStyle | 定义默认的换行方式, |
注 | 0: 智能换行, 行分得较平均, 上面的行较长 1: 一行结束后从行尾的词分行 2: 不换行. 此模式下只有\n, \N才换行 3: 与模式0相同, 但下面的行分得比较长 |
ScaledBorder AndShadow (无空格) |
指定边框宽度与阴影深度是否随着视频分辨率等比例缩放. 可为Yes, No. 默认为No. 当取值为No时, 边框宽度与阴影深度完全按照指定的像素数显示. 当取值为Yes时, 边框宽度与阴影深度随着实际视频的分辨率同等比例缩放. |
2. [v4+ Styles]部分的说明
Style定义了字幕的样式和位置. 所有的Style都在单独的Style里进行定义.
除了阴影/边框的类型和深度, 其余所有的风格设置都可以由字幕文本中的覆写代码所替代.
在定义风格之前先要有一行”Format:”来定义风格中每一个字段所代表的含义, 这些字段名称必须拼写准确, 顺序可以打乱, 字段名表示如下:
Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColor, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
标题行 | 说明 |
---|---|
Name | Name. 风格(Style)的名称. 区分大小写. 不能包含逗号. |
Fontname | Fontname. 使用的字体名称, 区分大小写. |
Fontsize | Fontsize. 字体的字号 |
PrimaryColour | 设置主要颜色, 为蓝-绿-红三色的十六进制代码相排列, &HAABBGGRR. 为字幕填充颜色 |
SecondaryColour | 设置次要颜色, 为蓝-绿-红三色的十六进制代码相排列, &HAABBGGRR. 在卡拉OK效果(ass已经废弃不用)中由次要颜色变为主要颜色. |
OutlineColor | 设置轮廓颜色, 为蓝-绿-红三色的十六进制代码相排列, &HAABBGGRR. |
BackColour | 设置阴影颜色, 为蓝-绿-红三色的十六进制代码相排列, &HAABBGGRR. |
注 | ASS的PrimaryColour,SecondaryColour,OutlineColor,BackColour字段还包含了alpha通道信息. (AABBGGRR), 注ASS的颜色代码要在前面加上&H |
Bold | -1为粗体, 0为常规 |
Italic | -1为斜体, 0为常规 |
Underline | -1为下划线,0为常规 |
Strikeout | -1为中划线/删除线,0为常规 |
ScaleX | 修改文字的宽度. 为百分数 |
ScaleY | 修改文字的高度. 为百分数 |
Spacing | 文字间的额外间隙. 为像素数 |
Angle | 按Z轴进行旋转的度数, 原点由alignment进行了定义. 可以为小数 |
BorderStyle | 1为边框+阴影, 3为纯色背景. 当值为3时, 文字下方为轮廓颜色的背景, 最下方为阴影颜色背景. |
Outline | 当BorderStyle为1时, 该值定义文字轮廓宽度, 为像素数, 常见有0, 1, 2, 3, 4 |
Shadow | 当BorderStyle为1时, 该值定义阴影的深度, 为像素数, 常见有0, 1, 2, 3, 4 |
Alignment | 定义字幕的位置. 字幕的位置与小键盘数字对应的位置相同. |
MarginL | 字幕可出现区域与左边缘的距离, 为像素数 |
MarginR | 字幕可出现区域与右边缘的距离, 为像素数 |
MarginV | 垂直距离 |
注 | 对于处在下方的字幕, 此值是字幕到底端的像素数 对于处在屏幕上方的字幕, 此值为字幕到顶端的像素数. 对于处在屏幕中间的字幕, 此值被忽略. |
Encoding | 指明字体的字符集或编码方式. 如0为英文, 134为简体中文, 136为繁体中文. 当文件为非UNICODE类型编码时, 该值对字幕的显示起作用 |
3. [Events]部分的Dialogue的说明
Dialogue类型的行(对话行)包括字幕对白, 时间轴信息, 以及对白的显示方式.
在对话行出现前必须有一条格式行Format: 来对逗号分隔的每个字段进行定义, 该格式行中的每一个字段必须拼写准确, 内容如下:
Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
最后的一个字段永远都是对白文字的字段, 因此可以包含逗号. 前面的字段顺序可以改变.
标题行 | 说明 |
---|---|
Layer | ASS的这个字段名是Layer(图层), 可以为任意的整数. 图层不同的两条位置/时间有重叠的字幕不被视为有冲突, 图层号码大的字幕显示在图层号小的上方. |
Start | 事件开始的时间, 格式为0:00:00:00(时:分:秒:百分数), 注意小时只有一位数 |
End | 事件结束的时间. 格式为0:00:00:00(时:分:秒:百分数), 注意小时只有一位数 |
Style | 该条字幕所使用的风格. 风格的具体信息在[V4+ Style]这一部分中进行定义 |
Name | 角色名, 指出对白是由影片中哪位演员所说的. 字幕加载时不显示, 只为了编写时理解方便. |
MarginL | 使用新的与左边缘的距离, 为4位数字代表的像素值. 0000代表使用当前Style定义的值. |
MarginR | 使用新的与右边缘的距离, 为4位数字代表的像素值. 0000代表使用当前Style定义的值. |
MarginV | 使用新的垂直距离, 为4位数字代表的像素值. 0000代表使用当前Style定义的值. 具体说明参见上面[v4+ Style]里的说明 |
Effect | 过渡效果. 可以为空值 |
Text | 为对白字幕区域, 是最终出现在屏幕上的字幕. |
四、ass文件中常见的转义符
转义符 | 说明 |
---|---|
\n | 软性分行(回车), 只在分行模式(WrapStyle)为2时有效. 在其它分行模式下相当于一个空格 |
\N | 硬性分行(回车), 在任何分行模式下都有效 |
\h | 硬性空格. 它保证显示字幕时不会在它的这个空格上分行(保证左右两个词在同一行) |
\b<0 或 1> | \b1令文字变为粗体. \b0强制文字不是粗体(bold) |
\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). |
\fs<字号> | 指定文字的大小, <字号>是一个指代高度的像素值, 只能用整数. (font size) |
\fsc<x 或 y><百分数> | 缩放文字大小. <x 或 y>指定文字是横向还是纵向缩放. <百分数>指定调整到百分之多少. 同样适用于矢量图形. |
\fsp<像素值> | 文字间增加额外的间隔(font spacing), 默认为0 |
\fr[<x/y/z>]<度数> | 文字旋转一定的度数(font rotation) |
\move(<x1>, <y1>, <x2>, <y2>[, <时值1>, <时值2>]) | 提供从一个位置到另一个位置的移动动态效果.只能够匀速移动, 不能够加速移动 |
\org(<x>, <y>) | 设置旋转的原点坐标(origin), 它影响一行中所有的旋转 |
\fad(<淡入时间>,<淡出时间>) | 提供简单的淡入淡出效果. <淡入时间>与<淡出时间>之和不能超过该行的时间长度. |
\fade(<a1>,<a2>,<a3>,<时值1>,<时值2>,<时值3>,<时值4>) | 提供复杂的透明度变化效果. <a1>,<a2>,<a3>为三个不同的透明度值(alpha), 取值从0到255. 0全见,255全透明 |
\c&H<bbggrr>& | 指定文字的颜色(color). <bbggrr>是一个十六进制的RGB数值, 但颜色顺序相反(蓝-绿-红). |
\alpha&H<aa>& | 设定文字的透明度(alpha). <aa>是一个十六进制数值. 00为全见, FF为全透明 |
\an<位置> | <位置>是一个数字代码, 用来代表字幕出现在屏幕中的位置(alignment) |