TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua

标题: 【Aegisub教程】retime函数解析与实例分析 [打印本页]

作者: jijidata    时间: 2013-6-5 00:30:17     标题: 【Aegisub教程】retime函数解析与实例分析

本帖最后由 jijidata 于 2013-6-5 00:31 编辑


这个例子生成的成品特效
http://pan.baidu.com/share/link?shareid=444932&uk=3809011527

http://www.tudou.com/programs/view/8k9qovESJmU/

例子

Comment:0,0:00:00.00,0:00:00.00,op-jp,,0000,0000,0000,templatesyl noblank,!retime("start2syl",-200+syl.i*30,0)!{\an5\fs1\pos($center,$middle)\t(0,250,\fs34)}

Comment:0,0:00:00.00,0:00:00.00,op-jp,,0000,0000,0000,templatenoblank,!retime("syl",0,0)!{\an5\pos($center,$middle)\t(0,!$dur*0.2!,\rnd20)\t(!$dur*0.2!,!$dur*0.4!,\rnd0)\t(!$dur*0.4!,!$dur*0.6!,\rnd10)\t(!$dur*0.6!,!$dur*0.8!,\rnd20)\t(!$dur*0.8!,0,\rnd1)}

Comment:0,0:00:00.00,0:00:11.64,op-jp,,0000,0000,0000,templatesyl noblank,!retime("syl2end",0,200+syl.i*30)!{\an5\pos($center,$middle)\t(!line.duration-200!,!line.duration!,\fscx200\fscy200\bord0\blur20\alpha&HFF&)}

Comment:0,0:00:07.01,0:00:07.98,op-jp,,0000,0000,0000,templatechar,!retime("line",math.random(-300,500),math.random(1000,1500))!{\moves4(!$scenter+math.random(-50,50)!,!$smiddle+math.random(-50,50)!,!$scenter+math.random(-60,60)!,!$smiddle+math.random(-60,60)!,!$scenter+math.random(-60,60)!,!$smiddle+math.random(-60,60)!,!$scenter+math.random(-50,50)!,!$smiddle+math.random(-50,50)!)\an5\fsc!math.random(5,20)!\blur6\fad(300,500)\p1}m21 16 b 17 16 17 23 21 23 b 25 23 26 16 21 16 m 24 19 l 43 20 l 24 20 m 18 19 l0 20 l 18 20 m 20 16 l 21 0 l 22 16 m 20 23 l 21 40 l 22 23

Comment:0,0:00:00.00,0:00:00.00,op-jp,,0000,0000,0000,templatesyl noblank notext loop5,!retime("line",line.duration,math.random(4000,8000))!{\moves4($center,$middle,!$center+math.random(-70,100)!,!$middle+math.random(-80,-50)!,!$center+math.random(-80,50)!,!$middle+math.random(-40,80)!,!$center+math.random(-70,50)!,!$middle+math.random(-60,60)!)\\an5\fsc!math.random(5,20)!\blur6\fad(0,!math.random(100,700)!)\p1}m21 16 b 17 16 17 23 21 23 b 25 23 26 16 21 16 m 24 19 l 43 20 l 24 20 m 18 19 l0 20 l 18 20 m 20 16 l 21 0 l 22 16 m 20 23 l 21 40 l 22 23

Comment:0,0:01:30.56,0:01:37.33,op-jp,NTP,0000,0000,0000,karaoke,{\k17}目{\k17}の{\k42}前{\k131}に{\k50} 映{\k64}る{\k58} 問{\k21}え{\k15}に{\k23}い{\k65}つ{\k30}も{\k46}曖{\k39}昧{\k69}で

Comment:0,0:01:37.50,0:01:45.06,op-jp,NTP,0000,0000,0000,karaoke,{\k18}そ{\k21}の{\k36}言{\k24}葉{\k84}で{\k42} 何{\k31}か{\k104}が{\k24} か{\k33}わ{\k20}る{\k34}な{\k24}ん{\k26}て{\k48} 思{\k23}い{\k21}も{\k27}し{\k37}な{\k34}く{\k53}て

,

,

,,



retime:用于拆分时间,重要不可缺的一个函数


格式:retime(mode,调整时间a,调整时间b)

该函数通常在一个template或code中使用一次或多次。它可以以不同的方式来调整输出的每个词的开始结束时间,在做特效时经常用到。

mode参数用来决定如何改变每个词的开始结束时间,它必须是下面的一个。因为它是一个字符串,所以须用半角引号将模式的名称括起来。

调整时间a和调整时间b参数可以在选用相应的mode中对开始结束时间进行调整,通常是一个以毫秒为单位的数,当然也可以用一些算式。如果数值大于0,是向后延迟,小于0则是提前。


下面开始详解
abs 或 set – 两个参数功能相同。a和b会从时间轴开始的时间(0:00:00.00)来确定这一词的开始结束时间,与行的开始结束时间无关。(很少用)
preline–提前行的开始时间 这个参数是为了在行开始前,让一些词先开始。结束时间固定为行的开始时间,所以b固定为0,可以省略。
line– 使用每一行的开始结束时间。a和b在行的开始结束时间基础上可以改变词的开始和结束时间。
start2syl– 是每个词的开始时间为行的开始时间,结束时间为每个词K的开始时间。
presyl– 与preline类似,只是结束时间换成了词K的开始时间。
syl –指的是K开始时间点到K结束时间点的一段时间。a和b在词K的开始结束时间基础上可以改变词的开始和结束时间。
postsyl –每个词开始时间为k的结束时间,结束时间为k的结束时间加上调整时间b。a和b可调整时间。
syl2end– 每个词的开始时间为词K的结束时间,结束时间为行的结束时间,类似于start2syl。
postline–每一行开始时间为该行的结束时间,结束时间为该行开始时间加上调整时间b。a和b可调整时间。



例子分析
第一段代码
templatesylnoblank,!retime("start2syl",-200+syl.i*30,0)!{\an5\fs1\pos($center,$middle)\t(0,250,\fs34)}
template syl noblank:
启用template自动化,修饰语为syl,对于空格无效。意思是启动自动化模板,对卡拉ok的每个音节进行自动化(这个根据k来决定),对于歌词中的空格无效
!retime("start2syl",-200+syl.i*30,0)!:启用retime函数,函数名为start2syl(函数意思看上面retime解释),开始时间调整为-200+syl.i*30,结束时间不变,即为每个词的k的开始时间。
关于-200+syl.i*30的解释:-200为负的200毫秒,syl.i是个计数器函数,表示行中拆分字符的个数,简单来说,用k来分的字符有多少个,就有多少个i
例如
第一句第一个词【目】,则开始时间为-200+1*30=-170,就是说提前170毫秒,那么开始时间就是0:01:30.56减去170毫秒(17厘秒)=0:01:30.(56-17)=0:01:30.39,结束时间为第一个k的开始时间0:01:30.56
第一句第二个词【の】,则开始时间为-200+2*30=-140,就是说提前140毫秒,那么开始时间就是0:01:30.56减去140毫秒(14厘秒)=0:01:30.(56-14)=0:01:30.42,结束时间为第二个k的开始时间【0:01:30.(56+17)】=0:01:30.73
...
以此类推
对于所有的运算要用!运算式!半角感叹号括起来,这样Aegisub才知道你要进行数学运算,不扩的话按字符处理
这样做的远因是为了提前每个词的显示时间用于制作入场特效,以及制造出时间差,并且为第一个字提供特效时间
接着分析ass代码,看看带来了什么入场特效
{\an5\fs1\pos($center,$middle)\t(0,250,\fs34)}
我来逐一解释
\an5,设定定位点,特效定位点用\an5,普通字幕的大家都知道用\an2
\fs1,设置字体大小为1
\pos($center,$middle),获取每个字符的默认位置
\t(0,250,\fs34)动态特效,在每个字符开始~250毫秒之内字体大小动态变为34
总结一下,初始字体大小设置为1,然后变大为34,现在能想象出是什么入场特效了吧?
入场特效就是字幕一个接一个有无到有显现出来

第二段代码
Comment:0,0:00:00.00,0:00:00.00,op-jp,,0000,0000,0000,templatenoblank,!retime("syl",0,0)!{\an5\pos($center,$middle)\t(0,!$dur*0.2!,\rnd20)\t(!$dur*0.2!,!$dur*0.4!,\rnd0)\t(!$dur*0.4!,!$dur*0.6!,\rnd10)\t(!$dur*0.6!,!$dur*0.8!,\rnd20)\t(!$dur*0.8!,0,\rnd1)}
template noblank
:启用template自动化 修饰语为noblank,即特效对于空格无效,特别的:template = template syl 噗~~
!retime("syl",0,0)!:启用retime函数,函数名为syl,0,0代表不增加并且不减少开始以及结束时间
接着分析ass代码:{\an5\pos($center,$middle)\t(0,!$dur*0.2!,\rnd20)\t(!$dur*0.2!,!$dur*0.4!,\rnd0)\t(!$dur*0.4!,!$dur*0.6!,\rnd10)\t(!$dur*0.6!,!$dur*0.8!,\rnd20)\t(!$dur*0.8!,0,\rnd1)}
{\an5\pos($center,$middle)}:设置定位点,获取每个字的中间默认位置
{\t(0,!$dur*0.2!,\rnd20)}:$dur为k的持续时间,,!$dur*0.2!为0.2个持续时间,就是对时间进行拆分了5分之1分,{\rnd20}边界象素变形,数字越大变形越大,可自己看看效果
{\t(!$dur*0.2!,!$dur*0.4!,\rnd0)},在5分之1~5分之2的时间里取消边界像素变形
{\t(!$dur*0.4!,!$dur*0.6!,\rnd10)}.........类推吧
.....
类推

能想象到效果嘛?这个特效称之为”表现特效“就是唱到那个歌词时所凸显的特效,特效效果就是字的不规则变形

第三段代码:
Comment: 0,0:00:00.00,0:00:11.64,op-jp,,0000,0000,0000,templatesylnoblank,!retime("syl2end",0,200+syl.i*30)!{\an5\pos($center,$middle)\t(!line.duration-200!,!line.duration!,\fscx200\fscy200\bord0\blur20\alpha&HFF&)}

template syl noblank
,这个不解释了,上面说过了
!retime("syl2end",0,200+syl.i*30)!启用时间拆分的syl2end函数,省么意思retime的解释里有
200+syl.i*30时间的拆分计算,就是第一个词结束时间加上200+1*30=230毫秒,第二个加上200+2*30=260毫秒以此类推
下面解释ass代码
{\an5\pos($center,$middle)\t(!line.duration-200!,!line.duration!,\fscx200\fscy200\bord0\blur20\alpha&HFF&)}
\an5\pos($center,$middle),这个不解释了
t(!line.duration-200!,!line.duration!,line.duration为一行字的持续时间,但我们运用了syl拆分字符,所以一行就一个字,时间就是k的结束时间到这一行的结束时间,duration-200!,!line.duration!就造成了在结束时有,200毫秒的特效持续时间
\fscx200\fscy200\bord0\blur20\alpha&HFF&:同时在x,y轴扩大为原来字体的两倍,面积就增大了2*2=4倍。\bord0\blur20,边框厚度变为0,高斯模糊为20,这样造成的特效就是字体模糊雾化,blur值越大效果越强,\alpha&HFF&透明代码,造成淡出特效

好吧,能想象出什么效果了么,如果想象不出来,那么说明你的ass功底严重不足....噗~
就是每个字逐个快速放大消逝~这个称之为”
退场特效

第四段代码:
Comment:0,0:00:07.01,0:00:07.98,op-jp,,0000,0000,0000,template char,!retime("line",math.random(-300,500),math.random(1000,1500))!{\moves4(!$scenter+math.random(-50,50)!,!$smiddle+math.random(-50,50)!,!$scenter+math.random(-60,60)!,!$smiddle+math.random(-60,60)!,!$scenter+math.random(-60,60)!,!$smiddle+math.random(-60,60)!,!$scenter+math.random(-50,50)!,!$smiddle+math.random(-50,50)!)\an5\fsc!math.random(5,20)!\blur6\fad(300,500)\p1}m21 16 b 17 16 17 23 21 23 b 25 23 26 16 21 16 m 24 19 l 43 20 l 24 20 m 18 19 l0 20 l 18 20 m 20 16 l 21 0 l 22 16 m 20 23 l 21 40 l 22 23
template char
:启用template,修饰语是char(character的缩写),意思是对每个字执行特效而不是k拆分出的音节
!retime("line",math.random(-300,500),math.random(1000,1500))!,启用retime函数,函数类型为line(行),注意,此时的开始时间与结束时间均为歌词每一行的开始于结束时间
math.random(-300,500),math.random(1000,1500),随机调整每个行的开始时间与结束时间,math.random是产生随机数的函数,(-300,500)为随机数范围
下面解释ass代码
{\moves4(!$scenter+math.random(-50,50)!,!$smiddle+math.random(-50,50)!,!$scenter+math.random(-60,60)!,!$smiddle+math.random(-60,60)!,!$scenter+math.random(-60,60)!,!$smiddle+math.random(-60,60)!,!$scenter+math.random(-50,50)!,!$smiddle+math.random(-50,50)!)\an5\fsc!math.random(5,20)!\blur6\fad(300,500)\p1}m21 16 b 17 16 17 23 21 23 b 25 23 26 16 21 16 m 24 19 l 43 20 l 24 20 m 18 19 l0 20 l 18 20 m 20 16 l 21 0 l 22 16 m 20 23 l 21 40 l 22 23
\moves4(x1,y1,x2,y2,x3,y3,x4,y4,t1,t2)4次贝塞尔曲线,x1,y1,x2,y2,x3,y3,x4,y4为控制点坐标,t2,t2为控制时间,与move代码类似
四个p点即代表x1,y1,x2,y2,x3,y3,x4,y4为控制点坐标
!$smiddle+math.random(-50,50)!,获取默认中心坐标并且加上随机获得的随机数即为计算后x1坐标
!$smiddle+math.random(-60,60)!,获取默认中心坐标并且加上随机获得的随机数即为计算后y1坐标
以此类推获取最后一个定位坐标
没有写t1,t2时间,默认就是此行时间
{\fsc!math.random(5,20)!\blur6\fad(300,500)\p1}m 21 16 b 17 16 17 23 21 23 b 2523 26 16 21 16 m 24 19 l 43 20 l 24 20 m 18 19 l 0 20 l 18 20 m 20 16 l 21 0 l22 16 m 20 23 l 21 40 l 22 23:\fsc!math.random(5,20)!为随机全局缩放,百分比为5~20中的一个,blur6,\fad(300,500)就不要解释了吧,{\p1}m 21 16 b 17 16 17 23 21 23 b 25 23 26 16 21 16 m 24 19 l 43 20l 24 20 m 18 19 l 0 20 l 18 20 m 20 16 l 21 0 l 22 16 m 20 23 l 21 40 l 22 23,矢量绘图代码,图形是个十字交叉的星星(?反正看起来像)\fsc!math.random的目的是缩放此图形,因为为附加特效,不能够比子还大对吧~还有{\p1}代码,原始缩放等级不知道去看ass代码详解
这个附加特效效果就是每行有多少字产生多少个星星,按照4次贝塞尔曲线移动

第五段代码:
Comment:0,0:00:00.00,0:00:00.00,op-jp,,0000,0000,0000,template syl noblank notext loop5,!retime("line",line.duration,math.random(4000,8000))!{\moves4($center,$middle,!$center+math.random(-70,100)!,!$middle+math.random(-80,-50)!,!$center+math.random(-80,50)!,!$middle+math.random(-40,80)!,!$center+math.random(-70,50)!,!$middle+math.random(-60,60)!)\\an5\fsc!math.random(5,20)!\blur6\fad(0,!math.random(100,700)!)\p1}m21 16 b 17 16 17 23 21 23 b 25 23 26 16 21 16 m 24 19 l 43 20 l 24 20 m 18 19 l0 20 l 18 20 m 20 16 l 21 0 l 22 16 m 20 23 l 21 40 l 22 23
template syl noblank notext loop 5
:前面大家都懂,按音节产生每一行,有多少音节就有多少行,对文字,空格无效,与上面的代码正好相反, loop 5表示此代码循环执行5次,,后面的和第四段代码差不多,就是时间控制上有不同,为了让星星飞的更久一点~哈~
于是,所有的代码解释完毕,終わり~撒花~





作者: jijidata    时间: 2013-6-5 00:34:01

本帖最后由 jijidata 于 2013-6-5 00:34 编辑

怎么字那么小也不能调~~看来不是玩论坛的料
补上个pdf看着方便吧,~有错就提出来

附件: [收个一块钱] Aegisub 的 template 基本教程2.pdf (2013-6-5 00:33:46, 259.45 KB) / 下载次数 227
http://tcax.org/forum.php?mod=attachment&aid=MTM0N3w3NTc1MWU1MXwxNzM0NDg4MjExfDB8MA%3D%3D
作者: milkyjing    时间: 2013-6-5 21:34:07

欢迎填坑~~
作者: zsyf    时间: 2013-6-6 12:09:23

强烈期待后续ing!!
作者: 界限突破    时间: 2013-6-7 19:16:38


强烈期待后续ing!!+1
作者: lyoung    时间: 2013-7-29 18:15:23

强烈期待后续ing!!+1
作者: 柯南5151    时间: 2013-8-1 00:21:20

下不下来……┭┮﹏┭┮
作者: ccx    时间: 2013-12-3 21:48:06

支持!!
作者: minim63    时间: 2014-2-15 14:30:37

学习学习。
作者: WL丶明久    时间: 2014-3-23 18:53:29

期待后续
作者: 安九月秋    时间: 2014-5-16 10:55:22

继续学习~
作者: shinta59    时间: 2014-6-4 15:25:29

解释得很详细,留着慢慢看~~
作者: 萨默尔    时间: 2014-6-30 15:10:47

刚开始学,看看 还是加K值费劲
作者: 萨默尔    时间: 2014-6-30 15:11:07

刚开始学,看看 还是加K值费劲
作者: apody929    时间: 2014-12-11 14:32:42

谢谢楼主大大分享 收下学习了!
作者: eiuminfui    时间: 2016-1-27 22:59:11

强烈期待后续
作者: wuyiji    时间: 2016-6-7 10:59:00

好的,看下
作者: 764959797    时间: 2016-11-28 23:28:27

好东西 - - ,感谢感谢,很有帮助
作者: 小徐    时间: 2017-8-8 18:55:38

新手前来学习,还不错的帖子,因为看得懂,还长知识惹..
作者: bluecy3    时间: 2018-8-22 11:17:11

wow
超级清晰的
作者: bluecy3    时间: 2018-8-22 11:17:17

感谢楼主大方分享!!!
作者: 夜芯筁    时间: 2018-9-3 23:24:36

路过看一看
作者: 繁华似花    时间: 2019-4-18 11:51:41

非常感谢楼主的耐心解析
作者: yjucg    时间: 2023-3-18 10:49:53

楼主辛苦了!
作者: yjucg    时间: 2023-3-18 20:25:24

谢楼主!




欢迎光临 TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua (http://tcax.org/) Powered by Discuz! X2