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, "終了")

2006/12/20(水)FULLWIDTH TILDE問題

どこかで聞いたことはあったけど始めて遭遇。

WindowsのShift-JIS <-> UTF-8の変換表が本来の規格と異なるため、アプリ側の変換表で文字化けたりする問題。
VirtualDubのjobsにまとめてファイルを投げるRubyスクリプトを以前書いた。VirtualDubはUTF-8でファイル名を扱うのだが、このとき"~"を含むファイル名に対して、RubyのkconvでSJIS->UTF-8変換をしていたら"~"はWAVE DASHと解釈され\xe3809cに。しかしこれをVirtualDubからWindowsに投げると、"~"(FULLWIDTH TILDE)に戻せない。ということで「ファイルが見つかりません」となり問題が発生。

しかしコードの違いだけならまだしも割り当てられている文字そのものが違うとはまた面倒くさい……

ということで、Windows上の"~"の扱いである\xefbd9e(FULLWIDTH TILDE)に変換しないといけない。とりあえずRubyにはNKFがあるので、

NKF.nkf('-w --cp932', "~")

で変換すれば良し。なお、nkfのオプション指定はパースが厳しいようで、short optionは先に、先後に余計な空白を挟まないようにしないと上手く解釈されなかった(多分)。

今後、Windowsのファイル名をUnicodeで扱う際には念を入れてチェック。他に気をつける場面はなにがあるだろう。ファイル内部の表記はずれるのかな。Winアプリで"~"と表示されているとして、アプリ側がどのコードで保存し、表示でいじってるかとかはファイルの中を見ないと分からない?? 怖いなあ。

2006/08/08(火)AfterEffectsとかPhotoShopとかを自動で

あまり時間がないので雑メモだけ。

FI/FOがあるだけの簡単なテロップを自動制御で大量生産するのが今回の目的。最終的にはPhotoShopをOLEオートメーションでドライブしてpsdを大量に吐かせた後、AfterEffectsはjavascriptの自動制御でフッテージ差し替え->レンダリングを繰り返すことで実現できたようだ。

まずはPhotoShop側から。

PhotoShop/Illustrator/InDesignなんかはOLEオートメーションがしっかり実装されていて、OLEが使える言語からなら色々操作が可能だ。今回はいつも通りRubyでバリバリ.psdを吐かせてみた。

基本スタートはいつものこちら。

http://jp.rubyist.net/magazine/?0003-Win32OLE
ただ、結局の所僕の腕では複雑なアプリケーションのクラス構造やら、引数の見当をつけるのはほとんど不可能に近い。オブジェクトインスペクタならぬ、オブジェクトブラウザで覗いてみたところで、"Option"という引数名に文字列が来てたらもうそこでパンクしてしまう。全ては対象アプリケーションのリファレンスの充実度次第。

photoshopはインストールフォルダのどこを探してもリファレンスらしきものが出てこない。そこで、

http://codezine.jp/a/article.aspx?aid=406
にあるように、英語版AdobeサイトのDownloadページから、

Photoshop 7.0 Scripting plug-in v.1.0.2a

を取ってくる。これに付いてるリファレンスがきっちりしていて使える。これがなかったら何も出来なかった。

AfterEffectsの方は、少なくとも所持している6.0ではOLEオートメーションは効かないようにみえる。スクリプトそのものは動くので、vbsかjsで書くことになる。ちゃんと理解してないのかもしれないが、AfterEffectsのscript部分はレンダリングの制御のみを目標に考えられているようだ。どうもコンポの中身を弄れるようには見えない。だからレンダーオートメーション? 中身はExpressionで弄れるのだろうか?

ともかく、今度は付属のドキュメントが歯抜け過ぎで肝心なことが書いていない。結局以下のサイトに頼った。

http://hpcgi2.nifty.com/Nekomata/nekojyarashi/wiki.cgi?ObjectList01
これ読まなかったらレンダーキューへのつっこみ方もよく分からなかった。感謝。

http://www.openspc2.org/reibun/AfterEffects6.5/
おまけ。でもこっちはドキュメントに書いてある範囲をそんなに出てないから、あんまり役に立たないかなあ。

2006/07/09(日)Excelのショートカット追加

2006/07/09 21:21 PC(全般)
Excelが使いづらいのは、ショートカットが登録できない所為だ!

と延々文句を言っていたら、起動時に自動でマクロを読み込むことで対応できるということを知った。

http://park11.wakwak.com/~miko/Excel_Note/14-01_macro.htm#14-01-11
の方法で、personal.xlsを作って、

http://www.excel7.com/personal/personal2.htm
のスクリプトを登録。

特に「セルの結合」が便利。

Excelの起動は遅くなったけど仕方ない。

2006/06/01(木)gigabit LAN

2006/06/01 04:48 PC(全般)
玄人のGBE-PCIを2枚買ってあってなんとか作業マシンとバックアップマシンを高速接続できたらいいと思っていた。

しかし、以前はMTUを色々いじったりしたのだが全く速度が出ず(88Mbpsくらい?)結局諦めてしまっていたのだった。

今回改めて再チャレンジ。構成は2台だけなので直結設定。最近はNIC直結ですらクロス・ストレートを考えなくて良いので楽だね。

さて結論から言ってしまえば

(1)ドライバをアップデートして(1.29 -> 1.44)

(2)ドライバプロパティでJUMBOFRAMEだけONにし、

(3)MTUの設定を飛ばしたら

速度がアップした! ドライバかあ……
今のところWindows間のファイル転送で827MBが36秒で転送できるようになったので、193Mbps相当出ている計算になる。gigabitはどうしても200~300Mbpsに壁があり(というかデバイスやバスの転送域を超える)あんまり躍起になって詰めるのもバカバカしい。これなら精神的には十分(100Mbpsの3倍程度)なので今回はここで終了。MTUは設定値次第で遅くなるということも実体験したし、最適設定は難しそうだ。

そうそうVIAにはgigacheckなるケーブル品質を測定できるソフトがある。これはなかなか面白いかも知れない。

あとはハブの消費電力とNICの消費電力を考慮して、gigaHUBを導入するかどうか。鯖がどうせ100Mbpsで必要十分なので当面gigaデバイスが増えない気がするんだよな……

ヤフオクでCG-SW08GTV2が安値で出ててジュルジュル。あー相場より3k安い。迷う。

2006/05/23(火)スキャナ

2006/05/23 01:17 PC(全般)
久々にスキャナについて調べた。

こちらが知りたいのはなんといってもスキャン速度なのだが、最近のは複合機かフィルムスキャンかどちらかにシフトしてしまっていて、EPSONのカタログなんかプレビュー時間さえ書いてない。

おそらく今一番早いのは、canoscan 8400FV。

プレビューで2秒、多分全般今使ってるGT-8700よりも2倍強速そうだ。

まあ20kもするので、調べただけで終了。

あとA3で、Mustek ScanExpress A3ってのが30k弱で買えるらしい。まあ安いなりにトラップがあって、カラーで解像度を上げるととんでもない時間がかかって、使い物にならないらしいけどね……

http://www.canon-sales.co.jp/canoscan/lineup/8400fv/spec.html

http://www.j-deal.com/wts/goods_html/D0430.html

2006/05/18(木)HPのプリンタのドライバがインストールできない

2006/05/18 19:28 PC(全般)
親が新しいマシンを購入したので、インストール作業を代わりにやっていたら発生した。

要はここの問題と同じようだが、

http://h10025.www1.hp.com/ewfrf/wc/document?lc=ja&cc=jp&dest_page=product&tool=product&dlc=ja&product=71896&docname=c00080687

調べてみたらフォルダ名のフルパスに日本語が含まれているとダメで、アカウントそのものとは無関係のようだ。
分かってるなら直せばいいのに…… ブツブツ

2006/05/08(月)subversionが上手く動かなかったのは?

2006/05/08 15:01 PC(Linux)
subversionが上手く動かなかった問題。

最初原因が切り分けできてなくて、綺麗に迷路にはまった。分かってしまえば至極単純な話だったのだが。

まずsvn+sshでsvnサーバの外からTortoiseSVNで繋ごうとしたが、"Unable to write to standard output (stderr)"というダイアログが出て上手くいかない。原因を探るためにサーバにログインしてチェック。
%svn list --version
で、
svn: error: cannot set LC_ALL locale
svn: error: environment variable LANG is ja_JP.EUC
svn: error: please check that your locale name is correct
とエラーが出て上手く行かない。元々整備する気がなかったので環境設定はいい加減。LANGを設定すればいいようなのでtcshで、
%setenv LANG C
とすると、
%svn list --version
や、
%svn list file:///レポジトリ
は通るようになったが、
%svn list svn+ssh://レポジトリ(自分)
だと、やっぱりダメでzshでexportしても変わりなく訳が分からなくなったのだった。

このエラーなのだが、要はsvn+sshはsshで入ってもってくるんだということがすとんと抜けていたのだった。つまりsshで繋いだときに入った先の環境であって、繋ぐ前のシェル環境のことではない。ということは.cshrcとか.profileとかに書かないとダメ。

とりあえず、暫定で.cshrcの末尾に
setenv LANG C
を書き加えた。

あとはログイン先からもTortoiseSVNからも問題なし。