メッセージ

2006年12月29日の記事

2006/12/29(金)Aviutlを自動化する

2006/12/29 21:49 PC(全般)
AviutlはCUIで使うことを前提にしていないので、全自動化が面倒くさい。例えばエンコード設定をファイルごとに変えずに、全ディレクトリのMPEG2をAVIに変換したいときなんかに。もちろんバッチ処理をかければいいのだが、1ファイルごとに何手順か操作する必要はあるのだった。

今ままではjobsファイルを書くRubyスクリプトを作ってVirtualDubMod(本家と違ってMPEG2が読める)に投げてやらせていたのだが、jobsファイルのちゃんとした仕様が分かってなかった所為かどうも変なaviを作ってしまうことがあった。そしてインターレース解除がやっぱり変だ。ボケボケだし。どうにかしたい。

調べているときにuwscなるソフトを発見。マウス、キーボードの操作や、メニュー操作、ボタンクリックもスクリプトで書けるようだ。これはいい。

ということで、uwscで下のようなスクリプトを書いた。これをRuby+Apolloで作った簡易GUIでループ部分をファイルごとに書いて回すことにする。上手いこと失敗した状態をトラップできるようになればもうちょっと固くなりそう。少し楽になったかな。

※まるものMPEG-2 VIDEO VFAPI Plug-Inを最新のに更新したら、旧VFAPIで発生していた壊れ気味のMPEG2に当たるとエンコードが大破綻する問題が大きく解消されていた。PC-MV5DX/PCIで録画中に負荷かけたりすると、そういうファイルが出来るんだよね。で、フレームがぐちゃぐちゃ、音が全く合ってないファイルが出来ちゃったりしてたんだけど。足を向けて眠れません。あとは是非AC-3対応に(ry
ReadFile = "F:\みんなのうた_02281654.MPG"
OutPutFile = "F:\test.avi"
ID = Exec("c:\online\aviutl\aviutl.exe")

//バッチのクリア
ClkItem(ID, "ファイル\バッチ出力")
ClkItem(GetID("バッチ出力"), "すべて削除")
if GetID("OK") then ClkItem(GetID("AviUtl"), "OK")

ClkItem(GetID("バッチ出力"), "閉じる")

////////ここからループ
//読み込み
ClkItem(ID, "ファイル\開く (Ctrl+O)")
SendStr(GetID("ファイルを開く"), ReadFile, 1, TRUE)
ClkItem(GetID("ファイルを開く"), "開く")

while ClkItem(ID, "ファイル\AVI出力 (Ctrl+S)") <> TRUE
	Sleep(1)
wend

SendStr(GetID("名前を付けて保存"), OutPutFile, 1, TRUE)
ClkItem(GetID("名前を付けて保存"), "バッチ登録")

//同名のファイルが存在したら強制上書き
if GetID("はい") then ClkItem(GetID("名前を付けて保存"), "はい")
////////ここまでループ

ClkItem(ID, "ファイル\バッチ出力")
ClkItem(GetID("バッチ出力"), "開始")

Sleep(1)

while GetID("バッチ出力") <> -1
	Sleep(1)
wend

Sleep(1)

ClkItem(ID, "終了")
OK キャンセル 確認 その他