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")) );
0件のコメント