終了

長尺の動画にロトベジェが反映出来ない。

Community Beginner ,
May 18, 2022 May 18, 2022

リンクをクリップボードにコピー

コピー完了

長尺の動画(10分以上)に対して、ロトベジェがかかったマスクを作成するプログラムを作成しています。
スクリプト(After Effects.jsx)は正常に動いていると思われるのですが、長尺の動画(10分以上)にロトベジェがかかっていないマスクが表示されてしまいます。

 

添付画像(image.jpg)は、ロトベジェのオプションがついた二つのマスク(Target 1, Target 2)を表示させた時の画像になります。
Target1のマスクにはロトベジェが反映されたマスクが表示されますが、Target2のマスクにはロトベジェが反映されていないように見えます。

 

発生原因や対処方法等ををご存知の方がいらっしゃいましたら、ご教示の程よろしくお願いいたします。

 

var data = [{"target_id":1,"sequence":[
					{"frame":1,"contours":[[301,200],[267,231],[260,279],[281,324],[321,351],[347,319],[351,271],[338,224]]},
					{"frame":2,"contours":[[302,201],[267,234],[261,281],[283,326],[323,351],[348,319],[351,272],[339,226]]},
					{"frame":3,"contours":[[305,200],[270,233],[263,281],[284,325],[323,351],[350,320],[354,273],[341,226]]},
					{"frame":4,"contours":[[306,200],[271,233],[264,280],[284,323],[323,350],[350,320],[354,273],[342,226]]},
					{"frame":5,"contours":[[308,200],[274,232],[268,279],[288,323],[327,350],[353,318],[358,271],[345,224]]},
				]},	
				{"target_id":2,"sequence":[
					{"frame":14015,"contours":[[275,179],[234,216],[226,275],[253,328],[299,359],[331,322],[335,263],[322,204]]},
					{"frame":14016,"contours":[[275,179],[234,216],[226,275],[253,328],[299,359],[331,322],[335,263],[322,204]]},
					{"frame":14017,"contours":[[276,179],[235,216],[227,274],[254,328],[298,359],[331,322],[336,264],[323,206]]},
					{"frame":14018,"contours":[[276,180],[235,218],[228,276],[257,328],[301,359],[332,321],[336,263],[323,205]]},
					{"frame":14019,"contours":[[277,180],[236,218],[229,275],[257,328],[301,358],[331,321],[336,263],[323,206]]},
				]},
			]
var layerName = "sample";
var start_frame = 9015;
var compItem = app.project.item(1);
var layer = compItem.layers.byName(layerName);
var frameDuration = compItem.frameDuration;
for (var i=0; i < data.length; i++) {
	var result = data[i];
	layer.Masks.addProperty("Mask");
	var newMask = layer.Masks(layer.mask.numProperties);
	newMask.name = "Target: " + result.target_id;
	for (var j = 0; j < result.sequence.length; j++) {
		var frame_data = result.sequence[j];
		var frame = frame_data.frame + start_frame;
		var ae_shape=[];
		var intangents = [];
		var outtangents = [];
		for(var f=0; f< frame_data.contours.length; f++){
			var x=frame_data.contours[f][0];
			var y=frame_data.contours[f][1];
			ae_shape.push([x,y]);
			intangents.push([1,0]);
			outtangents.push([-1,0]);
		}
		var myshape = newMask.property(1).valueAtTime(frame * frameDuration, true);
		myshape.vertices=ae_shape;
		myshape.inTangents = intangents; 
		myshape.outTangents = outtangents;
		myshape.closed = true;
		keyIndex1 = newMask.property(1).addKey(frame * frameDuration);
		newMask.property(1).setValueAtTime(frame * frameDuration, myshape);
		newMask.rotoBezier = true;
	}
}

 

【再現する手順】
手順1: 下記のコマンド等で10分程度の動画ファイルを作成してご確認ください。
※添付できるファイルサイズに上限があり、事象が発生する動画をそのまま添付することができないためベースとなる動画を添付しています。

	FOR /l %%i in (1,1,72) DO (ECHO file sample_movie.mp4 >> "Files.txt")
	ffmpeg -f concat -safe 0 -i "Files.txt" -c copy Out.mp4

 

手順2:After EffectsにOut.mp4の動画を読み込み、レイヤー名が"sample"の調整レイヤーを作成してください。

 

手順3:After Effects.jsx.txtから.txtの拡張子を取り除いてください。

 

手順4:After Effectsのファイル > スクリプトからAfter Effects.jsxを読み込ませてください。

 

【環境情報】
OS:Windows10
メモリー:8GB~29GB
After Effectバージョン:22.0.0 , 22.0.1 , 22.3.0.0

キーワード
エラーまたは問題 , スクリプティング , パフォーマンス

表示

120

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
no replies

何か追加しますか?

会話に参加する