ffmpeg 结合 ASS字幕制作+特效制作

时间:2024-02-21 12:53:28
 
1.ssa的基本结构
 
用记事本打开一个ssa文件
范例
ScriptType: v4.00
Collisions: Normal
PlayResX: 384
PlayResY: 288
Timer: 100.0000
 
[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style:,华文新魏,25,&Hffffff,&Hff8080,&Hffffff,&Hff0000,0,0,1,2,1,2,20,20,20,0,134
Style: mine,方正舒体,24,&Hffffff,&Hff8080,&Hffffff,&Hff0000,0,0,1,2,1,2,20,20,20,0,134
[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue:Marked=0,0:00:20.50,0:00:55.90,Default,,0020,0020,0270,Banner;20;0;50,{\fe134\fn华文新魏\fs12}郑重声明:本作品之片源、字幕均来自互联网,版权归电影公司所有。任何组织和个人不得公开传播或用于任何商业盈利用途,否则一切后果由该组织或个人承担!本站和制作者不承担任何法律及连带责任!请自觉于下载后24小时内删除。如果喜欢本片,请购买正版!
 
解释
 
[Script Info] 
脚本信息这部分包含了该脚本文件的头部以及一般说明。“[Script Info]”在ssa字幕中必须是该脚本的第一行。
"ScriptType"
脚本类型。默认就可以了。
“PlayResX”
      影片文件(脚本文件)的X轴坐标总长度。一般默认384。
“PlayResY”
      影片文件(脚本文件)的Y轴坐标总长度。一般默认288。
“Timer”
      不用解释了,用默认(100.0000)的就行。
 
 
[v4 styles] Version4的style:(绿色字为在上面范例中对应部分)这部分包含了脚本的所有样式/风格,字幕中用到的样式必须先在此指定。
各部分说明:(一下内容的开头必须大写,格式不能有错误)
Format 是在说明各参数的含义 
 
Name 给字幕所起的名字 Style 
 
Fontname 字体类型 华文新魏      
Fontsize 字体大小。十进制整数 25  
PrimaryColour 字幕的前景颜色(第一颜色)。十六进制的 BGR (蓝-绿-红) 值. &Hffffff
(以&Hffffff为例,“&H”代表十六进制,“ffffff”为十六进制的白色。 ) 
SecondaryColour 字幕的辅助颜色(第二颜色)。十六进制的 BGR (蓝-绿-红) 值. &Hff8080
(目前仅知道在卡拉OK效果时会用上。两行字幕同时出现在同一位置时,辅色会自动替换主色。)
OutlineColor 背景(阴影)颜色/字幕边缘色,阴影色(第三颜色)。十六进制的 BGR (蓝-绿-红) 值.(在ass中为tiaryColour,解释相同) &Hffffff
 
BackColour 轮廓颜色/字幕边框色(第四颜色).十六进制的 BGR (蓝-绿-红) 值. &Hff0000
Bold 定义字体是否为粗体. -1(或者1)为粗体On, 0为粗体Off. 0
Italic 定义字体是否为斜体. -1(或者1)为粗体On, 0为粗体Off. 0
Borderstyle 边框类型 1=边框 + 投影, 3=不透明的矩形框 1
Outline 轮廓.当Borderstyle(边框类型)为 1 时, 指定文字周围轮廓的宽度,(像素)。可取 0, 1, 2, 3 , 4. 2
Shadow 阴影. 当Borderstyle(边框类型)为 1 时, 指定文字投影的深度,(像素). 可取 0, 1, 2, 3 , 4. 1
(注:投影总是要附加轮廓效果,当没有给出轮廓的宽度时,SSA将强制加上1个像素的轮廓效果. ) 
Alignment 设置文字的对齐方式:1=左对齐(Left),2=中对齐(Centered),3=右对齐(Right),4=置顶,8=置中,5=1+4=置顶左对齐,6=2+4,11=3+8对齐。值加4 意味着在原来的对齐方式上加上顶部对齐.加 8意味着在原来的对齐方式上加上中间对齐. 2
 
MarginL 左边距.单位像素. 20
MarginR 右边距.单位像素. 20
MarginV 垂直边距.单位像素. 20
(MarginL、MarginR、MarginV 会影响字幕的垂直方向的坐标和一排能显示的字幕个数,超出则会自动换行)推荐值:10,10,12底端,顶端不好定,只有编出来后再来调整
 
AlphaLevel 透明度.取值范围0-255. 
Encoding 字幕的编码方式. 0 = English (Western, ANSI) Windows,1 = 缺省,2 = 符号,128 = Japanese-Shift-JIS(日文),129 = 韩文,134 = GB2312(简体中文),136 = BIG5(繁体中文),161=希腊语,162=土耳其语,163=越南语,177=希伯来语,178=阿拉伯语,186=波罗的语,222=泰国语,204 = 俄语 134
Style: mine,方正舒体,24,&Hffffff,&Hff8080,&Hffffff,&Hff0000,0,0,1,2,1,2,20,20,20,0,134
中的mine为另一种格式的起名,在Events中的Style如果用mine后面的对白就会默认采用mine中所设置的格式...而第一行中是没有取名直接跳到字体"华文新魏"去的,但是大家注意那里有个逗号,证明那个留空了,留空了的默认取名为Default,所以在下文的Style中大家会看到这个!
 
[Events] 类似,该部分必须以如下声明为第一行
Format: Marked,Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
(SSA的格式) 
最后一个是文本,可以包含逗号. 
Marked 标记符号    Marked=0 为未标记. Marked=1 为已标记. marked=0
Start 事件开始时间,格式为 0:00:00:00 ie. Hrs:Mins:Secs:hundredths. 注意小时的位置只有一位数! 0:00:20.50
End 事件结束时间,格式为 0:00:00:00 ie. Hrs:Mins:Secs:hundredths. 注意小时的位置只有一位数!! 0:00:55.90
style 样式名.如果是引用的样式不存在或者名称不对,SSA就将采用缺省样式(Default)。即便在[v4+ styles]部分不存在"Default"样式的定义,SSA/ASS将采用软件作者的缺省定义:字体使用"Arial",主色为白色,字符集为Western. Default
Name 角色名称. 表示在对话中,这句话是哪个角色说的. 仅仅起一个注释的作用,在编辑修改时供参考.(天天注:这里可以填NTP)
MarginL 左边距。4位数字,像素. 全0的话(0000)表示按照样式中定义的边距来显示. 0020
MarginR 右边距。4位数字,单位像素.. 全0的话(0000)表示按照样式中定义的边距来显示. 0020 
MarginV 垂直边距。4位数字,单位像素. 全0的话(0000)表示按照样式中定义的边距来显示. 0270 
Effect 变换效果. 可以不写, 或者可以包含下面三种效果之一(效果名称必须严格按以下格式,而且是大小写敏感,不要两边的引号“" ”): 参数中[]中的参数可选(我是没用过). Banner
 
1."Scroll up;y1;y2;delay[;fadeawayheight]" 
向上滚动效果.各个参数以;(分号)相隔. 
y1 和 y2 值定义了要向上滚动的文字的出现位置和消失位置. 像素, 而且这两个值无顺序先后问题,反正是从低的位置(即制相对较大的位置开始向上卷动),比如Scroll up;100;10;20和Scroll up;10;100;20的效果是一样的. 
 
2."Scroll down;y1;y2;delay[;fadeawayheight]"
向下卷动效果.各个参数以分号相隔. 
类似于Scroll up,y1 和 y2 值定义了要向下滚动的文字的出现位置和消失位置. 像素, 而且这两个值无所谓顺序先后问题,反正是从高的位置(即制相对较小的位置开始向下卷动),比如Scroll down;100;10;50和Scroll up;10;100;50的效果是一样的. 
 
3."Banner;delay[;lefttoright;fadeawaywidth]"
这个效果是强制文字做单行横向显示,从右到左(SSA)滚动. 默认值为0即字幕是从右到左滚动,如果为1/1以上,则从左到右滚动. 
 
delay(延迟值) 是从1开始的数字, 0意味着字幕没有延迟,将会尽可能快地卷动,一闪而过,而这个值的上限是多少我也不清楚,反正几千都没有关系(如果你不怕慢死),数字越大越慢,不过常用的范围在0-100之间. 
 
当delay值大于0时, 文字每移动1个像素所需时间为(1000/delay) 秒. 
fadeawayheight 和 fadeawaywidth 参数是设置卷动文字的边缘模糊或者说透明的像素值. 
 
Banner最常用的地方是做版权声明:
Dialogue:Marked=0,0:00:20.50,0:00:55.90,Default,,0020,0020,0270,Banner;20;0;50,{\fe134\fn华文新魏\fs12}郑重声明:本作品之片源、字幕均来自互联网,版权归电影公司所有。任何组织和个人不得公开传播或用于任何商业盈利用途,否则一切后果由该组织或个人承担!本站和制作者不承担任何法律及连带责任!请自觉于下载后24小时内删除。如果喜欢本片,请购买正版!
特效的格式一定不能出现错误,否则加载字幕就会也出现错误的,特别注意时间的写法及逗号的使用....最上面的只是一个BANNER的范例,平时显示的如果不是免责声明也就不同了!
 
 
[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue:Marked=0,0:00:20.50,0:00:55.90,Default,,0020,0020,0270,,{\fe134\fn华文新魏\fs12}天天来了!!快跑~~这里的修改主要是将BANNER删除,直接在MarginV后输入对白就OK了!
 
 
我再大大PS个,上面的Name和Effect是可以留空不填的,但是,留空也要多打个逗号...千万不要忘记...(可以看天天修改后的范例,Default和0270后都是有两个逗号的,都是留空没有填写Name和Effect)
 
2.基本代码一览
 
\n........................回车换行
\N........................强制换行
\h........................强制空格
\a...........................................强制字幕在屏幕上的对齐位置
\b<0/1/weight>..........................................字体加粗
\i<0/1>.................................................斜体字
\u<0/1>.................................................下划线
\s<0/1>.................................................strikeout
\bord............................................字体加宽
\shad............................................阴影深度
\be<0/1>................................................边角模糊
\fn...............................................强制字体类型
\fe............................................强制字幕编码
\fs...............................................强制字幕大小例如:\fs34
\fsc<百分比>........................................字体比例[fscx代表横向比例fscy代表纵向,单位:百分比]
\fsp............................................字间距
\fr[]<角度数>.....................................旋转[x,y,z轴三个方向]\c&H&...........................................强制主字幕色
\<1/2/3/4>c&H&..................................主/次/外框/阴影字幕色设定
\alpha&H&...........................................主色透明度 
\<1/2/3/4>a&H&......................................主/次/外框/阴影透明度
\k[].....................................卡拉OK效果 (f-从左至右添充[未填充时显示次要色,填充后显示主色], o-字幕外框高亮显示?)
\K......................................................跟 \kf 同样效果(填充效果)
\r[]..............................................强制加载名为“name”的预设风格 ["[v4 Styles]"定义的]
\t([,,][<加速度>,]<特效码> )...................动态显示, 加速度: 0~1减速, 大于1加速(方括号内的可以却省设置)
\move(,,,[,,]).........移动(方括号内的可以却省设置)
\pos(, )...........................................强制定位
\clip(, , , )...........................字幕裁剪
\fad(, ).........................................淡入淡出[t1-开始时间,t2-结束时间]
\q.................................................换行方式:0智能换行,1行尾换行,2无换行,3智能换行下一行变宽
 
3.高级部分
 
主要是滚动特效和涉及ssa中的嵌套、控制性变化以及常用的组合特效滚动特效横幅滚动:Banner; 
Dialogue: Marked=0,0:00:01.30,0:01:28.90,Default,,0000,0000,0000,Banner;28;0;60,郑重声明:本作品之片源、字幕均来自互联网,版权归原电影公司所有。任何组织和个人不得公开传播或用于任何商业盈利用途,否则一切后果由该组织或个人承担!本站和制作者不承担任何法律及连带责任!请自觉于下载后24小时内删除。如果喜欢本片,请购买正版!{\\\\move(20, 20,20,20} 
或者: 
Dialogue: Marked=0,0:00:01.34,0:00:50.35,mine,,20,20,260,Banner;28;0;60,本作品来自互联网,仅供个人影视制作学习交流之用,任何组织和个人不得公开传播或用于任何商业盈利用途…… 
 
这2个的效果都是在影片的顶部从右到左的滚动出现免责信息。Banner之前的260是方位,表示显示在顶部,改成10或者下面的那个{\\\\move(20, 20,20,20}去掉即显示在屏幕的底部,根据爱好确定部位好了。Banner之后的3个参数分别表示:28是滚动的速度,越小速度越快;0是从右到左,改成1就是从左到右;60是淡出,你将这个数值改成100再看看效果即可明白!从下往上 
Dialogue: Marked=0,0:00:00.20,0:00:10.10,Default,,0000,0000,0000,Scroll up;0;300;40;70,往上滚动从上往下 
Dialogue: Marked=0,0:00:00.20,0:00:10.10,Default,,0000,0000,0000,Scroll down;0;300;40;70,往下滚动 
 
0;300表示移动的距离 40;是移动的速度,越小就越快 70是淡出,具体效果看附件里的样本 
 
1,字体变化字体变化组合本身就可以实现很漂亮的效果 
1.1 字体排版 
{\\\\fe134\\\\fn方正舒体\\\\fs24\\\\frz30}极速 
{\\\\fe130\\\\fnComic Sans MS}{\\\\frx60}bbs.btbbt.com
 
{\\\\fe}是语种编码,简体中文134,繁体136,英文的是130。有些操作系统在style里定义格式后可以省略编码的命令 
{\\\\frx},{\\\\fry},{\\\\frx}是字体分别按x轴,y轴,z轴倾斜一个角度,如特效中“碧”“晴”的排版完整的代码如下: 
Dialogue: Marked=0,0:00:01.00,0:00:04.30,Default,,0000,0000,0000,,{\\\\frx50}X轴心旋转字体50度 
Dialogue: Marked=0,0:00:01.00,0:00:04.30,Default,,0000,0000,0000,,{\\\\pos(150,150)}{\\\\fry60}Y轴心旋转字体60度 
Dialogue: Marked=0,0:00:01.00,0:00:04.30,Default,,0000,0000,0000,,{fs15}{\\\\pos(140,90)}{\\\\frz30}Z轴心旋转字体30度 
 
1.2 字变形 
{\\\\t(\\\\fscy300)}字变高 
{\\\\t(80,500,\\\\fscy300)}字变高 
{\\\\t(\\\\fscy300)}字拉长 
{\\\\t(80,500,\\\\fscx300)}字拉长 
{\\\\t(80,500,\\\\fscx200\\\\fscy400)}字体变形出现\\\\t的命令都可以进行时间控制,也就是里面的80,500。表示在定义的时间轴里出现和完成这个特效的时间。时间控制和嵌套是ssa特效里变化最多、亦是不好掌握的一个内容。完整的代码如下: 
Dialogue: Marked=0,0:00:04.35,0:00:07.10,Default,,0000,0000,0000,,{\\\\t(80,500,\\\\fscy300)}{\\\\pos(190,200)}字变高 
Dialogue: Marked=0,0:00:04.35,0:00:07.10,Default,,0000,0000,0000,,{\\\\t(80,500,\\\\fscx300)}{\\\\pos(190,240)}字拉长 
Dialogue: Marked=0,0:00:04.35,0:00:07.10,Default,,0000,0000,0000,,{\\\\t(80,500,\\\\fscx200\\\\fscy400)}{\\\\pos(190,140)}字变形 
 
1.3 字体缩放 
{\\\\fs1}{\\\\t(1,\\\\fs15)}1号字体放大到15号字体 
{\\\\fs15}{\\\\t(15,\\\\fs5)}15号字体缩小到1号字体 
{\\\\fscx500%}{\\\\fscy500%}{\\\\t(1,\\\\fscx100%,\\\\fscy100%)}缩小 
100%是定义的style里的字体大小,这个缩放可以带字体变形,如: 
{\\\\fscx500%}{\\\\fscy700%}{\\\\t(1,\\\\fscx100%,\\\\fscy200%)}变形缩小 
 
{\\\\fs10}{\\\\t(0,900,\\\\fs50)}控制性放大 
{\\\\fs50}{\\\\t(200,600,\\\\fs10)}控制性缩小 
{\\\\fs50\\\\t(0,600,\\\\fs10\\\\t(800,1400,\\\\fs24))}控制性缩放这个嵌套有些难度,但拆分成最简单的{\\\\t\\\\fs}就容易理解了。完整的代码如:(这里定义的style里是15号字体) 
Dialogue: Marked=0,0:00:16.00,0:00:16.50,Default,,0000,0000,0000,,{\\\\pos(160,140)}{\\\\fscx500%}{\\\\fscy500%}{\\\\t(1,\\\\fscx100%,\\\\fscy100%)}{\\\\frz15}缩{\\\\frz345}放 
Dialogue: Marked=0,0:00:16.00,0:00:16.50,Default,,0000,0000,0000,,{\\\\pos(160,250)}{\\\\fscx500%}{\\\\fscy700%}{\\\\t(1,\\\\fscx100%,\\\\fscy200%)}变形缩小 
Dialogue: Marked=0,0:00:16.50,0:00:17.50,Default,,0000,0000,0000,,{\\\\pos(160,140)}{\\\\frz15}{\\\\t(1,\\\\fs50)}缩{\\\\frz345}放 
Dialogue: Marked=0,0:00:20.00,0:00:22.50,Default,,0000,0000,0000,,{\\\\fs10}{\\\\t(0,900,\\\\fs50)}控制性放大 
Dialogue: Marked=0,0:00:20.00,0:00:22.50,Default,,0000,0000,0000,,{\\\\pos(160,160)}{\\\\fs50}{\\\\t(200,600,\\\\fs10)}控制性缩小 
Dialogue: Marked=0,0:00:23.00,0:00:25.50,Default,,0000,0000,0000,,{\\\\pos(160,190)}{\\\\fs10\\\\t(0,600,\\\\fs50\\\\t(1200,1800,\\\\fs10))}控制性缩放效果 
 
1.4 字体旋转 
{\\\\c&HFF80FF&}{\\\\t(30,1500,\\\\fry720)}JRvS(转动) 
{\\\\c&HFF80FF&}{\\\\t(30,1500,1,\\\\fry720)}JRvS(转动) 
 
{\\\\t(\\\\frx360)}、{\\\\t(\\\\fry360)}、{\\\\t(\\\\frz360)}是字体分别绕x轴,y轴,z轴旋转360度。一般使用{\\\\t(\\\\fry360)}出现沿y轴转动的特效为多数。同样里面的30和1500表示时间的控制 
{\\\\fs30\\\\fry90}{\\\\t(0,1500,2,\\\\fs20\\\\fry0)}字体Y轴旋转变小完整代码如下: 
Dialogue: Marked=0,0:00:31.51,0:00:35.50,Default,,0000,0000,0000,,{\\\\pos(160,140)}{\\\\t(\\\\fry1440)}copd 制作-X轴 
Dialogue: Marked=0,0:00:35.49,0:00:40.50,Default,,0000,0000,0000,,{\\\\pos(160,140)}copd 制作-X轴 
Dialogue: Marked=0,0:00:31.51,0:00:40.50,Default,,0000,0000,0000,,{\\\\pos(160,240)}{\\\\t(30,2500,\\\\fry1440)}copd 制作-X轴(控制性) 
Dialogue: Marked=0,0:00:31.51,0:00:35.50,Default,,0000,0000,0000,,{\\\\pos(60,60)}{\\\\t(\\\\frz1440)}copd 制作-Z轴 
Dialogue: Marked=0,0:00:35.49,0:00:40.50,Default,,0000,0000,0000,,{\\\\pos(60,60)}copd 制作-Z轴 
Dialogue: Marked=0,0:00:31.51,0:00:35.50,Default,,0000,0000,0000,,{\\\\fs15}{\\\\pos(230,40)}{\\\\t(\\\\frx1440)}copd 制作-y轴 
Dialogue: Marked=0,0:00:35.49,0:00:40.50,Default,,0000,0000,0000,,{\\\\fs15}{\\\\pos(230,40)}copd 制作-y轴 
Dialogue: Marked=0,0:00:41.00,0:00:45.00,Default,,0000,0000,0000,,{\\\\pos(190,200)}{\\\\fs50\\\\frx90}{\\\\t(0,1500,\\\\fs18\\\\frx0)}字体X轴旋转变小 
Dialogue: Marked=0,0:00:41.00,0:00:45.00,Default,,0000,0000,0000,,{\\\\pos(190,60)}{\\\\fs40\\\\frz360}{\\\\t(0,500,\\\\fs18\\\\frz0)}字体z轴旋转变小 
Dialogue: Marked=0,0:00:41.00,0:00:45.00,Default,,0000,0000,0000,,{\\\\pos(190,260)}{\\\\fs64\\\\fry90}{\\\\t(0,1500,\\\\fs30\\\\fry0)}字体Y轴旋转变小 
 
1.5 字体变色 
{\\\\c&HFF8000&\\\\t(0,500,\\\\c&H80FF00&}从蓝色过度到绿色至于什么搭配比较渐进,请看vobsub或者一些画图软件中的调色板,如“****到绿色”等。颜色代码,vobsub229以上的版本即可查看。颜色代码进行层层嵌套,即可实现闪动的霓虹灯效果,如附件内JRvS的效果完整代码; 
Dialogue: Marked=0,0:00:45.30,0:00:48.00,Default,,0000,0000,0000,,{\\\\pos(190,100)}{\\\\c&HFF8000&\\\\t(0,500,\\\\c&H80FF00&}渐变颜色 
 
1.6 淡入淡出淡入{\\\\fad(400,80)} 
淡出{\\\\fad(80,400)} 
80是淡化效果的灰度,数值0-255 
400是淡化效果完成的时间 
 
2 移动移动结合上述的各种字体特效可以实现更绚丽的效果请看这个效果 
Dialogue: Marked=0,0:00:47.00,0:00:55.00,Default,,0000,0000,0000,,{\\\\move(0,0,60,120[,100,500])}{\\\\fad(400,80)}{\\\\fs18\\\\t(130,500,\\\\fry360)}插 
Dialogue: Marked=0,0:00:47.30,0:00:55.00,Default,,0000,0000,0000,,{\\\\move(0,0,60,160[,100,500])}{\\\\fad(400,80)}{\\\\fs18\\\\t(130,500,\\\\fry360)}入 
Dialogue: Marked=0,0:00:48.00,0:00:55.00,Default,,0000,0000,0000,,{\\\\move(0,57,60,200[,100,500])}{\\\\fad(400,80)}{\\\\fs18\\\\t(130,500,\\\\fry360)}效 
Dialogue: Marked=0,0:00:48.30,0:00:55.00,Default,,0000,0000,0000,,{\\\\move(0,57,60,240[,100,500])}{\\\\fad(400,80)}{\\\\fs18\\\\t(130,500,\\\\fry360)}果