AviUtl のシーンチェンジを一括設定するスクリプトを作ってみました。
この動画のスクリプトはWindows11で作成してます。

MS-DOSバッチなのでadd_scene_change.batという名前で保存してください。

@if(0)==(0) ECHO OFF
:カレントDIRをこのバッチが置かれたDIRに変更
cd /d %~dp0
%SystemRoot%\SysWOW64\cscript.exe //nologo //E:JScript "%~f0" %*
GOTO :EOF
@end

//  パラメーター
// 入力exoファイル(拡張子は小文字でexo)
exofilename="test.exo"

//画像があるレイヤー
layer1=2

//シーンチェンジをつけるレイヤー
layer2=4


var objShell = WScript.CreateObject("WScript.shell");
var fso      = WScript.CreateObject("Scripting.FileSystemObject");


var ifile = fso.OpenTextFile( fso.BuildPath(objShell.CurrentDirectory,exofilename) );
var ofile = fso.OpenTextFile( fso.BuildPath(objShell.CurrentDirectory,exofilename.replace(".exo","_update.exo")),2,true );
var str = ifile.ReadAll();

//  入力ファイルを閉じる
ifile.Close();
//  出力ファイルの書き出し
ofile.Write(str);

//シーンチェンジを挿入するフレーム位置を格納する配列
var cc_point = [];
//[文字列]で始まり次の[が来るまでの文字列を取得
//var res1 = str.match(/^\[.*\][^\[]*/mg);
var res1 = str.match(/^\[.*(?:\n(?!\[).*)*\n*/gm);
for (i = 0; i < res1.length; i++)
{
	//オブジェクトを改行コードで分割
	res2 = res1[i].split("\n")
	var obj = {};
	for (j = 0; j < res2.length; j++) {
		if (res2[j].length>2) {
			//オブジェクトの情報を連想配列にする
			res3 = res2[j].split("=")
			if (res3.length==2) {
				obj[res3[0]]=res3[1]
			}
			if (res3.length==1) {
				res4 = res2[j].match(/\[(.*)\]/)
				if (res4.length > 0) {
					//[数字]の数字を取ってくる
					x_idx=Number(res4[1])
				}
			}
		}
	}
	if (obj["layer"] == layer1 ) {

		x_len=obj["end"] - obj["start"]

		//3秒以上ならシーンチェンジを追加する
		if (obj["start"]>1 && x_len > 3*60) {
			WScript.Echo( res1[i] );
			cc_point.push(obj["start"]+0)
		}
	}
}


for (i = 0; i < cc_point.length; i++) {
	x_idx = parseInt(x_idx) + 1
	/*	
	付け加えるシーンチェンジのサンプル

	[106]
	start=1005
	end=1064
	layer=2
	[106.0]
	_name=シーンチェンジ
	調整=0.00
	track1=0.00
	反転=0
	check0=0
	type=0
	filter=0
	name=
	param=*
	*/	

	x_start=parseInt(cc_point[i])
	
	ofile.Writeline("["+x_idx+"]");
	ofile.Writeline("start="+x_start);
	ofile.Writeline("end="+(x_start+60));
	ofile.Writeline("layer=" + layer2);

	ofile.Writeline("["+x_idx+".0]");
	ofile.Writeline("_name=シーンチェンジ");
	ofile.Writeline("調整=0.00");
	ofile.Writeline("track1=0.00");
	ofile.Writeline("反転=0");
	ofile.Writeline("check0=0");
	ofile.Writeline("type=0");
	ofile.Writeline("filter=0");
	ofile.Writeline("name=");
	ofile.Writeline("param=*");
	
}

ofile.Close()
WScript.Echo( "Saved ", fso.BuildPath(objShell.CurrentDirectory,exofilename.replace(".exo","_update.exo")) );

カテゴリー: wsh-jscript

0件のコメント

コメントを残す

アバタープレースホルダー

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください