ssa/ass字幕格式全解析
内容:
附B. 内嵌的字体/图片编码一. 概述 二. 文件各个部分解析 三. 各种类型的行 四. [Script Info]部分的标题行 五. [v4+ Styles]部分的风格行Style 六. [Events]事件部分的对话行Dialogue 七. [Events]事件部分的注解行Comment 八. [Events]事件部分的图片行Picture 九. [Events]事件部分的声音行Sound 十. [Events]事件部分的影片行Movie 十一. [Events]事件部分的命令行Command 附A. 风格覆盖代码(Tags, Codes) 注: 1) 此文档是对原SSA文件规格英文文档进行翻译和补充而成, 原文件可从以下链接获得: http://www./projects/asa/ass-specs.doc 另外参考了以下资料: http://aegisub./docs/ASS_Tags http://en./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. |
|