用in/outPoint表达式使素材淡入淡出效果

作者: JavasBoy 分类: After Effects 发布时间: 2009-04-23 17:03 ė113,120 views 610条评论

利用表达式制作一个淡入淡出效果,这是一个较常用且简单的效果,但每次都要设置透明度的四个关键帧动画,还要输入数值。如果多个镜头都要使用淡入淡出就会很麻烦,利用Sequence Layers功能也可以,但还是要点几下鼠标,所以不如做一个Presets方便。

首先,为了方便我们不使用关键帧来设置动画,因为这样做的话,每次还要调整关键帧3和4的位置,要知道关键帧记录的是时间轴的位置,而每次使用的素材长度是不同的。所以,我们使用表达式,让程序去找素材的出点。

下面第一步,我们利用一个linear(t, tMin, tMax, value1, value2)函数把时间轴上素材的出点转化为透明度变量。

为透明度添加表达式如下:

linear(time,outPoint-1,outPoint, 100, 0);//其中“linear”表示线性变化,“time”是时间,“outPoint”是素材的出点,该表达式表示素材的透明度在素材出点前一秒到素材出点从100变化到0,这样就实现了素材的淡出效果。

同样道理,使用:
linear(time,inPoint,inPoint+1, 0, 100);//这一个表达式可以使素材实现淡入效果。

我们同时淡入淡出的话,就用一个"if.....else....."判断语句将以上两个表达式连起来,
为素材透明度添加表达式如下:

if(time<1)
linear(time,inPoint,inPoint+1, 0, 100);
else
linear(time,outPoint-1,outPoint, 100, 0);

这样就实现了素材的淡入淡出效果。

我现在觉得还是自己手动设置透明度的四个关键帧动画快,因为还不熟练打表达式。

经过RayCrown的指出上面的语句有漏洞,当把入点移到1秒以后 time>1所以不执行if里的,而执行的是else里的。如图:
AE表达式

RayCrown写的规范,标准的语句为:
s=linear(time,inPoint,outPoint, value,value);
a=linear(time,inPoint,inPoint+1, -100, 0);
b=linear(time,outPoint-1,outPoint, 0, -100);
a+b+s

这时候不管你怎么调整出入点、出点动画始终一致

大家快试试吧!

AffterEffects的时间处理方式:出自《AffterEffects CS3 完全剖析》第74页

AffterEffects是以绝对(而不是相对)期限测量时间的,它使用秒(而不是帧,帧的时序和数量将根据每秒的帧数而改变)。如果用总帧数,或每秒帧数测量时间,帧速率改变就会产生问题。相反,从根本上来说,AffterEffects对于帧速率的设置非常灵活。

因此,我们可以随意改变任何全盛图像的帧速率,关键帧仍然在保持它们在实际时间中的位置。动画的时序将不会改变,只是每秒显示它的帧数发生改变。

注意:如果用总帧数,或每秒帧数测量时间,帧速率改变就会导致关键帧偏移。相反,AffterEffects一贯地用秒测量时间,如果需要,它允许关键帧落在帧间,以保持总体时序一致。

本文出自 刘荣星的博客,转载时请注明出处及相应链接。

本文永久链接: https://www.liurongxing.com/with-expression-material-fade.html

10条评论

  1. RayCrown 2009年4月23日 20:03 回复

    这个不用加 if else语句

    直接定义然后 做加法就可以了。。
    a=linear(time,inPoint,inPoint+1, 0, 100);

    b=linear(time,outPoint-1,outPoint, 100, 0);

    a+b

    1. jalena 2010年8月24日 17:48

      如果不用if判断后续帧那这个表达式就作废了.

      if(time>1)是以秒为单位?

    2. JavasBoy 2010年8月27日 13:39

      AE里是以秒为单位。
      请查看文章中新加的时间说明。

  2. RayCrown 2009年4月23日 20:07 回复

    haha
    误人子弟了。。加法在这里不行

  3. RayCrown 2009年4月23日 20:10 回复

    s=linear(time,inPoint,outPoint, value,value);

    a=linear(time,inPoint,inPoint+1, -100, 0);

    b=linear(time,outPoint-1,outPoint, 0, -100);

    a+b+s

    这是最标准的做法啦
    因为time>1 有的时候 CTI的数值超过1就else 像上面这样就对了。。。怎么调整出入点
    动画始终一致

    1. incoho 2010年1月2日 00:24

      @RayCrown,

      为什么加上s就可以用了呢…? s明明什么都没改啊… 还有请教大师cti是什么意思….

  4. lengyu 2009年4月23日 20:51 回复

    太高深了,看不懂……

  5. JavasBoy 2009年4月23日 21:36 回复

    @RayCrown R大讲的是,我现在去AE里好好试试记到本子里去。

  6. 西崽猪猪 2009年4月27日 15:24 回复

    AE曾经想学 结果放弃了……因为用不到~
    我只是往影片里加加字幕 ASS语言就够了

  7. JavasBoy 2009年4月27日 15:26 回复

    @西崽猪猪 AE更多的是合成等效,我现在正努力学习中~

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Ɣ回顶部