2011-06-02
ソーステキストの文字列連結と小数点
AfterEffects, AE Expression, 備忘録
random(50,999).toFixed(3)+"\r"+random(50,999).toFixed(3)
2010-12-12
ParticleをLoopさせるやつ
パーティクルをループさせる手順がめんどくさくなってきたのでスクリプトで自動化してみた。
スクリプトと一緒にサンプルプロジェクト(CS3)も用意したので適当に使ってみてください。
手順としては
1.途中で終わるパーティクルを作る
2.新規コンポ or プリコンポしてパーティクルコンポを2つ並べて、パーティクルの終わりとはじめが重なるようにする
3.ParticleLooper.jsxの実行
(ParticleLooper_Sample.aepのParticle Loop Beforeコンポ選んでスクリプト実行するとParticle Loop Afterコンポになります。)
※スクリプト実行時にレイヤー未選択でいいのですが、上記レイヤー以外にレイヤー作るとおかしくなります。
http://dl.dropbox.com/u/425107/AE/ParticleLooper.zip
いつもながら、スクリプトとか得意でないので変なところとかあるかもしれないので自己責任で。
追記(2010.12.13)
レイヤーの重複部分がレイヤーの長さの半分以下だとおかしくなる…
誰か改良して。
2010-12-04
ワンクリックでアクティブプロパティにエクスプレッションを適用
AE Script, AfterEffects, AE Expression
rd_ScriptLauncher.jsxにエクスプレッション適用のスクリプト書いて突っ込んでおいて、適当なレイヤーorエフェクトのプロパティを選んでダブルクリック。
スクリプトの内容は↓みたいな感じ。
var Exp = "wiggle(1,15)"; var undoStr = "Set Expression"; var activeLayer = app.project.activeItem.selectedLayers[0]; app.beginUndoGroup(undoStr); var arr=activeLayer.selectedProperties; for (var i=0; i<arr.length; i++) if (arr[i]) arr[i].expression=Exp; app.endUndoGroup();
自分で使うようなので動けばいいやってことで、レイヤー未選択時にアラート出たりとかはしてないです。
最初↓みたいにしてたんだけど@rlldiさんにアイデアいただいて前者の方に落ち着いた感じ。
var Exp = "(Math.sin(time)+1)*50"; var myLayer = app.project.activeItem.selectedLayers[0]; if( myLayer.selectedProperties[1] ){ myLayer.selectedProperties[1].expression = Exp; }else if( myLayer.selectedProperties[0] ){ myLayer.selectedProperties[0].expression = Exp; }else{ alert("アラート"); }
よく使うものを用意しておくと便利かも。
value+[time*100,0]
wiggle(1,15)
Math.round(random(0,1))*10
(Math.sin(time)+1)*50
2010-11-10
2010-11-04
フェードイン/アウト
AE Script, AfterEffects, AE Expression
普段手書きorコピペでエクスプレッション記入してたんだけど使いまわしやすいようにスクリプトにしてみました。
適用したいレイヤーを選んでスクリプトを実行すると新規ヌルレイヤーにコントロール用のスライダーが作成され、選択していたレイヤーの不透明度に関連付けされます。
スライダーの値はフレームレート。
不透明度にvalue使ってるので、不透明度に普通に数値入力してやれば0->50->50->0みたいに100%まで上がりきらないように出来ます。
fadeI/O with Slider(fps)
http://dl.dropbox.com/u/425107/AE/fade_IO_with_Slider%28fps%29.jsx
fi = linear(time,inPoint,inPoint+thisComp.layer('Fade Control').effect('Fade In Time')('スライダー'),0,value); fo = linear(time,outPoint-thisComp.layer('Fade Control').effect('Fade Out Time')('スライダー'),outPoint,value,0); ftime = thisComp.layer('Fade Control').effect('Fade In Time')('スライダー')+thisComp.layer('Fade Control').effect('Fade Out Time')('スライダー'); if((ftime*thisComp.frameDuration)>(outPoint-inPoint)){ Over_Layer_Duration }else{ if((fi/thisComp.frameDuration)<value){ fi/thisComp.frameDuration }else{ fo/thisComp.frameDuration } }
で、問題がフェードイン/アウトのタイムがかぶった時の処理をどうしようかってことで、フェードイン途中でフェードアウトに移行するべきか迷ったんだけど、確実にフェードインさせないといけなかったりするのでエラー出るようにしました。
エクスプレッションでアラート出せるのかどうかわからないので、とりあえず変な変数ぽいの(Over_Layer_Duration)入れてエラーがわかるようにしてみたんだけど、もとに戻すのにいちいち≠ボタン押さないといけないのが面倒…
誰かいい解決方法教えて。
改良したい人とかいたら適当にどうぞ。
2010.11.11
貼りつけてたものが修正前verだったので修正。。。


