ass字幕格式

2023-11-07

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通道信息. (AABBGGRR), 注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的定位点说明)
8) 命令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.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ass字幕格式 的相关文章

  • 确保适配器的内容不会从后台线程修改,而仅从 UI 线程修改

    我有一个带有 EditText 名为 filtro 和 ListView 名为 list view 的活动 当用户插入文本时 适配器应该刷新 如果我多次更改文本 则会发生崩溃 然后显示消息 确保适配器的内容不是从后台线程修改 而是仅从 UI
  • get-childItem 的新 -file 参数是像 -filter 一样快还是像 -include 一样慢?

    EDIT希望在这里澄清我的复杂和误导性问题 基于我错误的假设 file 接受输入 感谢您纠正我并指出这只是一个开关参数 我的示例中的输入实际上传递给 path 听起来这可能是搜索多种文件类型最快的纯 powershell 方式 因为 fil
  • 在 DownloadProgressChanged 事件期间从 DownloadFileAsync 对事件处理程序的更新缓慢

    我的问题 我正在编写一个 PowerShell 脚本 在继续执行其他任务之前 该脚本需要从远程 Web 服务器下载几个大文件 我的项目要求之一是显示每次下载的进度 以便最终用户知道发生了什么 对另一个 SO 问题的回复包含一个使用注册事件和
  • Scipy max_filter 太疯狂了

    我对 scipy 的 Maximum filter 函数有一个小问题 但没有得到解决方案 我有三个不同的 numpy 数组 a np array 152 nan 30 nan nan nan nan nan nan nan nan nan
  • Excel FILTER() 对于空白单元格返回 0

    我怀疑以前有人问过这个问题 但我找不到 FILTER 即使指定了返回字符串 通常也会为空白行返回 0 Using filter 我经常收到空单元格的 0 返回值 假设 A 列中有 6 行数据 abc xyz abc xyz abc If I
  • RegisterGlobalFilters 的目的是什么?

    在 MVC3 中 我以这种方式启用了 CustomErrors
  • jQuery mousemove 性能 - 节流事件?

    我们面临着与 mousemove 连接的 jQuery 事件传播性能问题 我们有一个屏幕填充画布 需要跟踪用户是否在其上拖动鼠标 因此我们在该对象上添加了一个鼠标移动侦听器 如下所示 ourCanvas on mousemove funct
  • Flash AS3 EventDispatcher - 有什么方法可以获取已注册侦听器的列表吗?

    有没有什么方法可以获取注册监听器的列表EventDispatcher 我知道EventDispatcher有hasEventListener方法告诉您是否注册了任何侦听器 但是有没有一种简单的方法来询问EventDispatcher找出听众
  • 在 C# 中,当有人插入、删除或修改记录时,如何从 MySQL 获取事件?

    我正在 WPF Net 中开发一个程序 我需要知道何时有人对数据库的任何表进行更改 这个想法是在数据库发生更改时从数据库接收一个事件 我读了很多文章 但找不到解决我的问题的方法 亲切的问候 最好的解决方案是使用消息队列 在您的应用程序向数据
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • 未对齐的内存访问

    我正在开发不支持未对齐内存访问的嵌入式设备 对于视频解码器 我必须处理 8x8 像素块中的像素 每个像素一个字节 该设备具有一些 SIMD 处理功能 使我能够并行处理 4 个字节 问题是 8x8 像素块不能保证从对齐的地址开始 并且函数需要
  • C#:如何在调用时触发事件的方法上创建属性?

    在 C 或 NET 中 是否有一种方法可以在方法上创建一个属性 以便在调用该方法时触发事件 理想情况下 我能够在调用该方法之前和之后运行自定义操作 我的意思是这样的 TriggersMyCustomAction public void Do
  • 一张桌子还是许多张桌子来举办许多不同但相互作用的活动?

    我正在创建一个应用程序 其核心功能是跟踪一段时间内的各种数据 血糖水平 胰岛素剂量 食物摄入量等 并且我正在尝试决定如何最好地在数据库中组织这些信息 最基本的是 这个特定保护伞中的所有内容都是一个事件 因此我想到有一个事件表 其中包含可能出
  • 调试目标调用异常

    我正在使用 Visual Studio 2008 C Express Edition 并且正在尝试调试由于我触发的事件而发生的 TargetInitationException 我的问题并不是专门针对此异常 因此我没有包含有关此异常的任何详
  • 对齐类型并按值传递参数

    按值传递对齐类型或具有对齐类型的结构不适用于某些实现 这会破坏 STL 容器 因为某些方法 例如 resize 按值获取参数 我使用 Visual Studio 2008 运行了一些测试 但不完全确定按值传递何时以及如何失败 我主要关心的是
  • 如何使用javascript取消http请求

    我有一个页面 其中有一个事件处理程序附加到onclick事件 当事件触发时 它将文本框的内容传递给GET要求 自从url 不在同一个域中所以我创建一个脚本标签并将网址附加到其源 如下所示 elem onclick fire function
  • IE中是否有AJAX进度事件以及如何使用它?

    我尝试了所有我能想到的方法 至少可以实现 IE9 中的进度功能 但没有任何效果 所有其他浏览器都可以进入进度函数并编写测试文本 没有任何问题 希望有人能帮助我 谢谢你 var info document getElementById inf
  • java - 如何使列表彼此并排(水平)而不是向下(垂直)。

    如何使列表彼此并排 水平 而不是向下 垂直 Example 一月 这是我不断得到的 SMTWTFS 1 2 3 4 5 一月 这是我想要得到的 SMTWTFS 1 2 3 4 5 6 7 8 9 谢谢任何帮助 我将不胜感激 我是新手 我无法
  • 如何在 asp:TextBox 的 keyup 事件上调用 javascript 函数

    如何在asp net的TextBox控件的keyup事件上调用javascript函数 我正在尝试类似的事情 但它不起作用
  • 通过 Scriptaculous 拖放防止 JavaScript 点击事件

    我的页面上有一些可拖动的元素 这些相同的元素有一个导航到另一个页面的点击事件 我试图确定在用户拖动时防止触发单击事件的最佳方法 但如果不拖动则仍然允许单击事件 有人对实现这一目标的最佳方法有任何想法吗 我通过使用类似以下内容解决了这个问题

随机推荐

  • python之struct详解

    python之struct详解 醉小义的博客 CSDN博客 python struct 尊重原创
  • Unity中,在按钮的处理事件中,显示UI(Panel)的一些问题

    问题来源 自己遇到的 32条消息 Unity SetActive True 滞后严重 游戏 CSDN问答 简单概括就是 点击按钮 开始处理某个事件 这个事件需要花费较长时间 我的想法是加入一个加载中界面 方便告知用户当前程序没有卡住 在完成
  • kodi刮削器 中文_手把手教你用Kodi,搭建最强私人娱乐/学习中心!(小白篇)...

    喜欢本篇内容请给我们点个在看 什么是KODI 简单的说 Kodi 就是一个功能强大且免费的媒体播放器 支持全平台 如Windows Linux iOS Android Xbox 以及树莓派等 可播放电影 电视剧 音乐 电视直播 电台等等 特
  • JS逆向解析---某知名小说网站内容加密

    该小说网站的全部内容都是经过一个JS的加密 要想爬取这个网站那么将其内容解析是不可避免的 本文将讲解如何对其进行JS的逆向解析 网站 shuqi 随便点开一本书 打开浏览器自带的抓包工具 点击第一个包 但是在这里找不到我们想要的数据 说明不
  • 实现ListView中每行显示进度条,并且各自显示自己的进度

    package com sagaware process list import java util ArrayList import java util HashMap import java util List import java
  • Web2.0网站一些通用业务采用NoSql的解决方案

    首先理解NoSql的划分 Often NoSQL databases are categorized according to the way they store the data and fall under categories su
  • MySQL生产环境高可用架构实战

    分布式技术MongoDB 1 MySQL高可用集群介绍 1 1 数据库主从架构与分库分表 1 2 MySQL主从同步原理 2 动手搭建MySQL主从集群 2 1 基础环境搭建 2 2 安装MySQL服务 2 2 1 初始化MySQL 2 2
  • 仿射密码 affine

    参考链接 https www cnblogs com 0yst3r 2046 p 12172757 html 仿射加密法 在仿射加密法中 字母表的字母被赋予一个数字 例如 a 0 b 1 c 2 z 25 仿射加密法的密钥为0 25直接的数
  • Incorrect integer value: '' for column 'id' at row 1 错误解决办法

    最近一个项目 在本地php环境里一切正常 ftp上传到虚拟空间后 当执行更新操作 我的目的是为了设置id为空 set id 时提示 Incorrect integer value for column id at row 1 解决办法 方法
  • 广工人福利,openwrt+gduth3c通过inode认证,妈妈再也不用担心我要用电脑开wifi了

    刚开校园网的时候 天天都只能用电脑开wifi 用类似于360wifi 猎豹wifi之类的软件要经常开着电脑 而且电脑网卡发射功率又小 上个厕所wifi就断了 睡觉前在床上还没wifi用 超级不爽 于是从家里面拿来了放在自己房间挂迅雷百度云的
  • x86下的C函数调用惯例

    1 从汇编到C 1 1 汇编语言的局限性 汇编语言是一种符号化了的机器语言 machine code 即用指令助记符 符号地址 标号等符号书写程序的语言 汇编语句与机器语句一一对应 它只是把每条指令及数据用便于记忆的符号书写而已 汇编语言
  • 用自己的数据增量训练预训练语言模型

    预训练模型给各类NLP任务的性能带来了巨大的提升 预训练模型通常是在通用领域的大规模文本上进行训练的 而很多场景下 使用预训练语言模型的下游任务是某些特定场景 如金融 法律等 这是如果可以用这些垂直领域的语料继续训练原始的预训练模型 对于下
  • spring配置文件解读——applicationContext.xml

    spring的配置文件 applicationContext xml 听着晴天看星晴的博客 CSDN博客
  • binutils internal struct

    http fossies org dox binutils 2 23 2 structelf internal sym html dl iterate phdr REPAIR RAX inline hook
  • [动态规划] leetcode 416. 分割等和子集

    问题描述 分割等和子集 给你一个只包含正整数的非空数组 nums 请你判断是否可以将这个数组分割成两个子集 使得两个子集的元素和相等 例子 输入nums 1 5 11 5 输出true 动态规划求解 这是一个0 1背包问题的变种 也就是每种
  • Idea工具使用经典总结

    安装教程 下载地址 https www jetbrains com idea download section windows 准备idea ideaIU 2017 2 3 exe 软件与激活包 JetbrainsCrack 2 6 9 r
  • 设备节点如何与设备驱动关联

    1 上层应用如何调用设备驱动 1 在linux中一切皆是文件 设备驱动程序对上层应用程序来说和普通文件没什么差异 2 上层应用程序通过设备节点来访问驱动程序 在驱动程序注册到内核后 用申请到的主次设备号来创建设备节点 2 向内核注册字符驱动
  • 【已解决】Error: Unable to access jarfile .\xxxx.jar

    报错类型 Error Unable to access jarfile xxxx jar 复现工具的时候 通过命令 java jar xxxx jar 运行 jar 包报了这个错误 报错原因是 在命令行中出现的路径下找不到 xxxx jar
  • micro-app在vue-element-admin中一些使用研究

    1 简述 本文承接上一篇micro app在vue element admi中的搭建 对micro app在vue element admin中的一些平时开发中常用的功能做了一些研究 本文代码 2 路由 关于路由 这边从两方面进行研究 一方
  • ass字幕格式

    ssa ass字幕格式全解析 内容 一 概述 二 文件各个部分解析 三 各种类型的行 四 Script Info 部分的标题行 五 v4 Styles 部分的风格行Style 六 Events 事件部分的对话行Dialogue 七 Even