キャプチャ

MPEG2でキャプチャーしたファイルをいかに簡単にCMカット&XviD圧縮するかを考えるPart 2.

1日取り組んで,サムネイル動画像を作る所まで達成.

VirtualDubModのスクリプト機能を使ってサムネイル画像を作成.縮小はN=5に設定.つまり,720x480を144x96に縮小.さらに,XviDで66Kbpsでエンコード.ただし,音声は無し.結果30分の録画から15MB程度の動画像が出来ます.かかる時間は2倍ぐらい.

入力画像のファイル名は,日本語に対応しています.すなわち,VirtualDub.Open()で簡単に開けます.しかし,保存するときには日本語に対応していません.ただし,Unicode
(UTF-8)には対応しています.そこで,変更されることのないフォルダ名だけはUnicodeに変換し\x00形式で記述,ファイル名はテンポラリファイル名を利用することなる.引数は/s"scriptname" /xとなります.エンコードが終わるとVirtualDubModは自動的に終了します.

VBScriptについて述べる.スクリプトが起動すると,VirtualDubModがすでに起動していないか調べる.起動していたら終了する.本来ならば,プロセスID等を取得して確認するのがスマートだが,WSHではサポートされていない.そこで,"VirtualDubMod バージョン番号"でウィンドウをアクティブにしようとする.ここで,VirtualDubModは最小化されているときとそれ以外の時でウィンドウタイトルが異なる.しかし,文頭か文末は先の文字列に一致するので問題ないと考えられる.これで,アクティブにできれば戻り値が0なので,スクリプトは終了.それ以外ならVirtualDubModは存在しないと判断してスクリプトを継続する.この方法の問題点は,他の作業をしているときに突然フォーカスを奪われる可能性があること.ただ,普段作業はしないのでとりあえずはこれでしのぐ.

次に,キャプチャされたファイル置き場(raw_path)のm2pファイルを列挙します.各ファイルごとに,サムネイル動画がファイル置き場(thumb_path)に存在するかどうか確認します.ファイルが存在していれば無視,存在していなければサムネイル動画を作ります.
最初に,入力ファイルパスを生成する.そして,縮小&エンコード設定のかかれたVirtualDubModのスクリプトファイル(拡張子vcf)をテンプレートとして,その行頭にファイルを開くコマンドを追加,末尾に保存場所を追加する.保存場所のパス表記は上記の通り.日本語ファイル名で録画しているので,いくつも工夫が必要.次に,スクリプトを保存し,VirtualDubModに引数をつけて実行.WScript.Execメソッドを使うとオブジェクトが返ってくる.このオブジェクトでVirtualDubModが終了するまでステータスを1分ごとに監視する.全然イベントドリブンじゃないけど,致し方ない.Sleepメソッドはまともに実装されているらしく,CPU使用率はほとんど0の模様.VirtualDubModが終了したら,いったんスクリプトは終了させる.

長くなったので,いったん終了.