SSA与ASS字幕
SSA字幕与ASS字幕
SSA全称SubStationAlpha,是由CSLow(又称Kotus)创建的一种字幕格式,用以实现比传统字幕诸如srt等格式更为复杂的功能.SSA目前的版本为v4.00.SSA同时也是一款软件的名称,专用于创建和编辑SSA格式的字幕。
ASS是一种比SSA更为高级的字幕格式,全称AdvancedSubStationAlpha,实质是SSAv4.00+版本.它拥有比SSA更多的功能.
它们主要特征如下:
1.SSAv4.00与之前的SSA版本格式不同.v4可以阅读和加载以前版本的格式,但之前版本不支持v4以上的编写格式.换句话说,SSA从v4版本开始可以阅读它认识的命令而忽略不认识的命令,从而可以向下兼容,也可以向上兼容.
2.文件为普通的DOS文本格式.也就是说它可以用记事本打开编辑,同时需要注意编写出错时有可能导致无法预料的结果.
3.文件编写时所划分的各部分,从形式上来说类似于ini文件,但它并非真正的ini文件
4.各部分中的绝大多行都以一说明性的文字加上冒号来开头,指明该行包含哪一些信息.
5.每一行中的信息都以逗号分隔.因此风格名和人物角色名中要求不能出现逗号.
6.事件部分([Events])里的各行可以不分先后.也就是说人物对白行可以不按时间顺序排列
7.不正确的行会被忽略.同时会给出警告指出被忽略的行数
8.一行里包含了完整的信息,必须在一行内写完,不能分成多行
9.当文件中引用了一个未知的风格名(style)时,加载时会用默认的风格来替代(Default)
10.当一个风格(Style)中引用了系统中没有安装的字体,则会用Arial字体来代替.
主要组成部分
[ScriptInfo]
这一部分包含了文件内容的标题和总体信息,这一行必须是v4版本文件的第一行
[v4Styles]
字幕正文使用的风格都在这一部分做出相关定义.
[Events]
这部分包含所有的事件,有字幕,评论,图片,声音,影片和命令.基本上屏幕中出现的所有内容都集中在这一部分.
[Fonts]
如果想把字体内嵌入字幕文件,那么字体文件须采用数字编码后放在这一部分.只有truetyle字体才能内嵌入SSA/ASS文件.
每一个内嵌字体文件以一行开头,格式如下:
开头的"fontname"必须全部用小写,如果大写会让ASS文件视其为文件编码的一部分.
<文件名>是SSA文件保存字体时使用的文件名,命名规则如下:
truetype字体原来的字体名称加一条下划线
如果是粗体则加一个"B"
如果是斜休则加一个"I"
加一个数字表明字体编码(字符集)最后加上".ttf"例如: fontname:comic_B0.ttf
在这一行之后是一些可打印的字符组成的行,代表组成这个字体的二进制字符,除了最后一行可能短些,其余每行有80个字符. 从二进制转换到字符用的是UUE-encoding的编码方式,
[Graphics]
如果选择内嵌图片,那这一部分就包含了所有用到的数字编码格式的图片文件.开头一行的格式如下:
开头的"filename"必须为小写,如果大写会被认为是文件编码的一部分. <文件名>是SSA文件保存图片时使用的文件名,它与[Events]事件部分中提及的图片名称一致.
SSA会把文件中找到的任何文件保存到SSA的程序目录中的"Pictures"子目录中.例如:c:\programfiles\SubStationAlphav4.00\Pictures.SSA会先从文件本身中寻找这些编码好的文件,但当没有找到时会去"Pictures"这个子目录里去找.
注:现在的SSA文件已经很少包含"[Pictures]"或者"[Fonts]"这两个部分.因为这些功能只被SubStationAlpha这一个程序所支持.而其它的filter(Vobsub/Vsfilter/AveryLeeSubtitlerfilter)都不支持.
[Script Info]详细参数
;分号,后面可以跟任何内容.这一行是说明性文字,加载字幕时不显示 注意此类型行必须要把分号放最前.老版本不是用分号而是用!:
Title:标题,如果没有提供,则自动使用<untitled>
OriginalScript:剧本的最初作者,若没有提供则自动使用<unknown>
OriginalTranslation:(可选)原剧本的翻译者,若没有提供则该行不显示
OriginalEditing:(可选)原剧本的编者和校对,若没有提供则该行不显示
OriginalTiming:(可选)原剧本的时间轴人员,若没有提供则该行不显示
SynchPoint:(可选)从哪个时间点开始加载字幕,若没有提供则该行不显示
ScriptUpdatedBy:(可选)对原剧本的修改/更新人员,若没有提供则该行不显示
UpdateDetails:更新的具体信息,若没有提供则该行不显示
ScriptType:SSA的版本信息,
Collisions:当字幕时间重叠时,前后字幕的堆叠方式.值为"Normal"时,后一条字幕出现在前一条字幕的上方. 如果值为"Reverse"时,前一条字幕往上移动给后一条字幕让位.
PlayResY:文件所使用的视频高度参考标准,如果使用Directdraw回放SSAv4会自动选择最相近的启用的设置
PlayResX:文件所使用的视频宽度参考标准,如果使用Directdraw回放SSAv4会自动选择最相近的启用的设置. 如果只提供了PlayResX,PlayResY其中一种,那另一种会按实际视频的像素值为准.
PlayDepth:加载字幕时使用的色深(颜色的数目),如果使用Directdraw回放SSAv4会自动选择最相近的启用的设置
Timer:字幕加载的速度调整,数值为百分数.例如"100.0000"代表100%.其数值有4位小数点. 它相当于对ASS字幕的时间速度进行乘法运算. 当速度大于100%时,总时间会缩短,而相应的字幕会越来越靠前.当速度小于100%时,总时间会延长,而相应的字幕会越来越靠后.
WrapStyle:定义默认的换行方式.
ScaledBorderAndShadow:指定边框宽度与阴影深度是否随着视频分辨率等比例缩放.可为Yes,No.默认为No. 当取值为No时,边框宽度与阴影深度完全按照指定的像素数显示. 当取值为Yes时,边框宽度与阴影深度随着实际视频的分辨率同等比例缩放.
[V4+ Styles]详细参数
Style定义了字幕的样式和位置.所有的Style都在单独的Style里进行定义.除了阴影/边框的类型和深度,其余所有的风格设置都可以由字幕文本中的覆写代码所替代.
在定义风格之前先要有一行"Format:"来定义风格中每一个字段所代表的含义,这些字段名称必须拼写准确,顺序可以打乱,字段名表示如下:
Fontname,Fontsize,PrimaryColour,SecondaryColour,,BackColour,Bold,Italic,BorderStyle,Outline,Shadow,Alignment,MarginL,MarginR,MarginV,,Encoding
字段1:Name.风格(Style)的名称.区分大小写.不能包含逗号.
字段2:Fontname.使用的字体名称,区分大小写.
字段3:Fontsize.字体的字号
字段4:PrimaryColour.设置主要颜色,为蓝-绿-红三色的十六进制代码相排列,BBGGRR.为字幕填充颜色
字段5:SecondaryColour.设置次要颜色,为蓝-绿-红三色的十六进制代码相排列,BBGGRR.在卡拉OK效果中由次要颜色变为主要颜色.
字段6:(),设置轮廓颜色,为蓝-绿-红三色的十六进制代码相排列,BBGGRR.
字段7:BackColour,设置阴影颜色,为蓝-绿-红三色的十六进制代码相排列,BBGGRR.
字段8:Bold.-1为粗体,0为常规
字段9:Italic.-1为斜体,0为常规
字段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=屏幕中间右对齐.
字段14:MarginL.字幕可出现区域与左边缘的距离,为像素数
字段15:MarginR.字幕可出现区域与右边缘的距离,为像素数
字段16:MarginV.垂直距离
字段17:AlphaLevel.SSA字幕用来定义透明度
字段18:Encoding.指明字体的字符集或编码方式.如0为英文,134为简体中文,136为繁体中文.当文件为非UNICODE类型编码时,该值对字幕的显示起作用
[Events]详细参数
Dialogue类型的行(对话行)包括字幕对白,时间轴信息,以及对白的显示方式.在对话行出现前必须有一条格式行Format来对逗号分隔的每个字段进行定义,该格式行中的每一个字段必须拼写准确,内容如下:
Start,End,Style,Name,MarginL,MarginR,MarginV,Effect,Text
最后的一个字段永远都是对白文字的字段,因此可以包含逗号.前面的字段顺序可以改变
字段1:Marked.值为0表示该行为"未标识"行,值为1表示该行为"标识"行
字段2:Start.事件开始的时间,格式为0:00:00:00(时:分:秒:百分数),注意小时只有一位数
字段3:End.事件结束的时间.格式为0:00:00:00(时:分:秒:百分数),注意小时只有一位数
字段4:Style.该条字幕所使用的风格.风格的具体信息在[V4Style]这一部分中进行定义
字段5:Name.角色名,指出对白是由影片中哪位演员所说的.字幕加载时不显示,只为了编写时理解方便.
字段6:MarginL.使用新的与左边缘的距离,为4位数字代表的像素值.0000代表使用当前Style定义的值.
字段7:MarginR.使用新的与右边缘的距离,为4位数字代表的像素值.0000代表使用当前Style定义的值.
字段8:MarginV.使用新的垂直距离,为4位数字代表的像素值.0000代表使用当前Style定义的值.具体说明参见上面[v4+Style]里的说明
字段9:Effect.过渡效果.可以为空值,或者为三种过渡效果之一.效果名称区分大小写,必须拼写准确.且不加任何引号:"Karaoke"是卡拉OK效果,每个字依次高亮显示. "Scrollup;y1;y2;delay"滚动效果,指文字/图片向上滚动.各参数以分号分隔. y1与y2是屏幕垂直区域的像素值,位置可以互换.当这两个值都为0时则全屏幕内滚动 delay可取值1-100,代表滚动速度的降低值.当其为0时滚动速度最快.“Banner;delay”横幅效果.所有文字被合并到单行,并从右至左横向移动.delay的值可由1到100,代表横幅移动速度的降低值.当其为0时移动速度最快.
字段10:Text.为对白字幕区域,是最终出现在屏幕上的字幕.任何位于第9个逗号后的内容均被看作是对白字幕,所以本身可以包含逗号. 在这一个字段中可以包含\n,\N,\h这三种分行/空格代码,以及其它在大括号{}内的风格覆写控制代码
在[Events]这一部分内,以Comment:开头的行.它可以与其它类型的事件行包含一样的信息,但不会被作为字幕加载到屏幕上.它起评论/说明的作用.
在[Events]这一部分内,以Picture:开头的行.它与Dialogue行包含一样的控制信息,但是在字段10的位置指定要显示的图片完整路径与图片名称.在前面字段指定的风格被忽略,滚动效果可以运用到图片事件上.MarginL和MarginV被用来指定图片与左边缘与下边缘的像素距离.当MarginL为0000时图片水平居中显示.当MarginV为0000时,图片垂直居中.
支持的图片格式有.bmp,.jpg,.gif,.ico以及.wmf格式的图片(不支持png)注意,只有SSA软件能支持加载图片事件,filter则不支持.
在[Events]这一部分内,以Sound:开头的行.它与Dialogue行包含一样的控制信息,但是在字段10的位置指定要加载的声音文件完整路径与名称,格式为.wav.风格与距离等值被忽略,而且结束的时间值也被忽略.该声音会播放到它结束,或者播放到新的声音行加入为止.注:各filter不支持加载声音行
在[Events]这一部分内,以Movie:开头的行.它与Dialogue行包含一样的控制信息,但是在字段10的位置指定要加载的视频文件完整路径与名称,格式为.avi.风格与效果等值被忽略
结束的时间值(End)指出影片画面消失的时间,但如果avi文件仍然没有结束,则其声音仍然会持续播放.
MarginL和MarginV被用来指定影片与左边缘,上边缘的像素距离(与图片行不同).当MarginL为0000时视频水平居中显示.当MarginV为0000时,视频垂直居中.
[Events]中Text详细参数
\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>模糊边缘bluredges
\fn<字体名称>指定使用系统中已安装的字体,区分大小写.如果使用的字体没有安装,则会用Arial来替代(fontname). 注字体名与fn间不能有空格,也没有其它的括号等
\fs<字号>指定文字的大小,<字号>是一个指代高度的像素值,.(fontsize)
\fsc<x或y><百分数>缩放文字大小.<x或y>指定文字是横向还是纵向缩放.<百分数>指定调整到百分之多少.同样适用于矢量图形.
\fsp<像素值>文字间增加额外的间隔(fontspacing),默认为0
\fr[<x/y/z>]<度数>文字旋转一定的度数(fontrotation)
<x/y/z>表明文字沿着三维空间中哪个坐标轴旋转. 原点由\org代码来指定,否则由默认的定位点来决定(参见\pos的说明)
\fr默认代表\frz.<度数>可以为负值,可以大于360.此命令同样适用于矢量图形.
\fe<字符集>指定文字的编码(fontencoding).例如0为英文,134为简体中文,136为繁体中文.1为系统默认.
\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进行