SSA与ASS字幕

Posted guanghe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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进行

以上是关于SSA与ASS字幕的主要内容,如果未能解决你的问题,请参考以下文章

亿格瑞 A系列完美显示 ASS 特效字幕 特效字幕 和播放外挂字幕的方法

为啥 ffmpeg 刻录中文字幕(ass) 不换行?

使用ffmpeg压制硬字幕与logo

MKV格式的电影都会附带一个FONT.rar文件的字体,怎么用到字幕上去

android 中使用ffmpeg,将视频加入字幕,用ass文件,在PC上可以,但在Android上一直不行

ass translation python(ass字幕文件半自动平移时间轴py脚本)