引用元:http://hibari.2ch.net/test/read.cgi/avi/1305735757/

343 :名無しさん@編集中:2011/07/28(木) 18:40:24.01 ID:flShUfz7
loopOut("cycle")を2つのキーで可能にする 
エクスプレッション作ったんだけど需要ある? 
フッテージやコンポのループ設定が捗ると思う。 

ループ回数の取得がマージン入れないとずれるので、 
近似値求めて補正してるので、極希にループの最終フレームがずれるかも。 
使い物にならんほど頻発するようなら破棄してくれ。 

ずれる場合は時間伸縮などで、 
何かの拍子にキーがフレームとフレームの間に入ったときに多い。 
正しい位置にキーがあればずれないと思う。 




344 :名無しさん@編集中:2011/07/28(木) 18:42:03.18 ID:flShUfz7
//2つのキーでloopInOut("cycle") 
if(numKeys!=0){ 
coe = + 1/256; 
//最終キー含まずループ 
//keyTime = key(numKeys).time - key(1).time; 
//最終キー含めてループ 
keyTime = key(numKeys).time + thisComp.frameDuration - key(1).time; 
loopNum = (time - key(1).time) / (keyTime); 
margin = Math.floor(loopNum) + 1 - loopNum; 
if(margin<=coe&&margin>0){ 
loopNum = Math.round(loopNum); 
}else{ 
loopNum = Math.floor(loopNum); 

sTime = time - (keyTime * loopNum); 
if(sTime<0&&sTime>=-1/thisComp.frameDuration){ 
sTime = key(numKeys).time - thisComp.frameDuration; 

valueAtTime(sTime); 
}else{ 
value; 






345 :名無しさん@編集中:2011/07/28(木) 18:49:26.50 ID:yNK8ybks
>>343 
loopOut("cycle")は元々2つのキーで可能だろ? 


 
 

346 :名無しさん@編集中:2011/07/28(木) 19:07:49.03 ID:flShUfz7
>>345 
loopOut()のキー2つでの挙動は[01231230123]ってなるのよ。 
これは[012301230123]か[012012012]にする。 







348 :名無しさん@編集中:2011/07/28(木) 21:43:27.77 ID:vHACQBf0
おー、ちょっと使ってみる 
外部でループ素材作って、それをAEでループさせると 
なんかループ辺りで変な空フレームがあったりしてて謎だったんだよなぁ 





353 :名無しさん@編集中:2011/07/29(金) 16:55:05.96 ID:NDGSOwDv
たしかに、たまにループさせると、1ループ目が狂ってて 
「ああ、そうだった。。」ってなるよね。 





357 :名無しさん@編集中:2011/07/31(日) 15:24:03.19 ID:4mq4UIB6
ちょっとカスタムして、 
アニメーションプリセットにしちゃえば速い。 

上のエクスプレッションに、 
if(numKeys==1){ 
framesToTime(timeToFrames((time-startTime)) % timeToFrames(source.duration)) 

の条件を追加して、タイムリマップに適用、 
キーを1つにしてアニメーションプリセットの保存をしておけば、 
単純なループはプリセットの適用でできる。 





361 :349:2011/07/31(日) 23:17:47.27 ID:bGoeFiP5
>>357 
おおサンクス 
ちょっと試してみる。ありがと! 

とはいえ>>344のエクスプレッションの記述をパッとは理解できないw 
ただコピペすれば使用可能なんだろうけど、くやしいw 
がんばって解読するねー 





370 :344:2011/08/03(水) 10:31:50.45 ID:sErBuaHI
何度も申し訳ないが、キーループの最終版ができた。 
いろいろ試したけど、どうやってもキーがフレームの間に入ったときの、 
ずれの発生は抑えられないみたいだ。 

関数化して数値の指定で動作変更できるようにした。 
keyLoop(0);//最終キー含まずループ 
keyLoop(1);//最終キー含めてループ 

後は各自でアニメーションプリセットにしてくれれば、 
いちいちフッテージ設定でループ回数変更したり、 
コンポのタイムリマップキーを打ち直す必要がなくなると思う。 





371 :344:2011/08/03(水) 10:32:58.83 ID:sErBuaHI
keyLoop(0); 
//時間伸縮はキーの位置がフレームの間に入るので使用禁止 
//キーがフレームの間に入るとずれるので注意 
//ソースのFPSがコンポと違うとずれるので注意 
function keyLoop(n){ 
if(numKeys==1){//単純ループ キーはアニメーションプリセットのため 
var setTime = framesToTime(timeToFrames((time-startTime)) % timeToFrames(source.duration)); 
return setTime; 
}else if(numKeys!=0){//2つのキーでloopInOut("cycle") 
var fKeyFrame = timeToFrames(key(1).time); 
var lKeyFrame = timeToFrames(key(numKeys).time); 
if(n==0){//最終キー含まずループ 
var keyTotalFrame = lKeyFrame - fKeyFrame; 
}else{//最終キー含めてループ 
var keyTotalFrame = lKeyFrame + 1 - fKeyFrame; 

var nowFrame = timeToFrames(time); 
var loopNum = Math.floor((nowFrame - fKeyFrame) / keyTotalFrame); 
var setFrame = nowFrame - (keyTotalFrame * loopNum); 
var setTime = valueAtTime(framesToTime(setFrame)); 
return setTime; 
}else{//キー0 
var setTime = value; 
return setTime;