【AE表达式】时间重映射:k帧归零//结合图层标记valueAtTime(marker.time)

用弹性里面一段改了个用在时间重映射的东西,再滑块ctrl里面k帧就是时间从0开始


ctrl=effect("ctrl")(1);

//获取滑块控制,代号ctrl;

T=0;

//先设默认值为0,防止出错;

if (ctrl.numKeys >= 1){ 

//如果ctrl里面的关键帧数量大于等于1;

      n =ctrl.nearestKey(time).index; 

//n等于现在时间最近的关键帧的序号(就是第几个的意思)

      if((time<ctrl.key(1).time)){

//如果时间少于第一个帧的时间;

        T=0;

//归零;

      }else{

//否者; 

        if (ctrl.key(n).time > time){

//如果获取序号的帧的时间点大于现在的时间;

          n--;

//n减少1,把序号变成现在时间之前的最近的帧的序号;

        };

      T=(time-ctrl.key(n).time)*2;    

//时间等于现在的时间,剪去现在时间前面的最近的关键帧的时间,(喜欢加快就乘以多少,喜欢偏慢就加减多少)

      }

}else{T=0;}

//ctrl里面没关键帧的话,归零; 


2017年3月26日更:

try{


/*ctrl=effect("timeCtrl")(1);*/

ctrl=timeRemap;

k=2;

T=0;

if (ctrl.numKeys >= 1){ 

      n =ctrl.nearestKey(time).index; 

      if((time<ctrl.key(1).time)){

        T=0;

      }else{

        if (ctrl.key(n).time > time){

          n--;

        };

      T=(time-ctrl.key(n).time)*k;

      }

}else{value;}


}catch(err){value;}


----------------------------------------------------------------------------------

持续一段时间的marker

var ctrl,T,k,dura;ctrl=thisLayer.marker;T=0;k=effect("k")(1);dura=effect("MGdura")(1);if(ctrl.numKeys>=1){var n=ctrl.nearestKey(time).index;if((time<ctrl.key(1).time)){T=0}else{if(ctrl.key(n).time>time){n--}}var start=ctrl.key(n).time;var mid=ctrl.key(n).time+ctrl.key(n).duration/2;var end=ctrl.key(n).time+ctrl.key(n).duration;var keyDura=ctrl.key(n).duration;if(time>start&&time<end){if(keyDura<dura/k*2){var cT=Math.abs(time-mid);T=linear(cT,0,keyDura/2,dura,0)}else{var cT=Math.abs((end-time)-(time-start));T=linear(cT,keyDura-dura/k,keyDura,dura,0)}}else{T=0}}else{T=0}T;

上面这段用滑块T装着,另外建两个滑块,一个k,一个MGdura,分别是速度倍数以及动画长度;

然后在有关键帧的属性上加上表达式valueAtTime(T); 这里的T用小蚊香拉到上面的滑块T就可以了;


时间点上的marker

var ctrl=thisLayer.marker;var T=0;var k=effect("k")(1);if(ctrl.numKeys>=1){n=ctrl.nearestKey(time).index;if((time<ctrl.key(1).time)){T=0}else{if(ctrl.key(n).time>time){n--}T=(time-ctrl.key(n).time)*k}}else{T=0}T;

跟上面一样,但是不需要MGdura,这个是k帧归零的;


---------------------------------------------------

相似的还有利用图层标记文本换行,但是感觉直接想办法用lrc比较方便

str=value;enter=String.fromCharCode(13);strG=str.split(enter);var ctrl;ctrl=thisLayer.marker;if(ctrl.numKeys>=1){var n=ctrl.nearestKey(time).index;if((time<ctrl.key(1).time)){N=0}else{if(ctrl.key(n).time>time){n--}}var start=ctrl.key(n).time;var end=ctrl.key(n).time+ctrl.key(n).duration;var keyDura=ctrl.key(n).duration;if(time>start&&time<end){N=n}else{N=0}}else{N=0}if(N>0){result=strG[N-1]}else{result=""};

这段直接扔文本层源文本就可以,然后打图层标记,一段时间的图层标记

评论
热度 ( 1 )

© leizingjiu | Powered by LOFTER