今までは6.3.9-Q16を使っていて5分掛かっていたが、手順をちょっと変えてとどめに6.3.9-Q8を使うように変更したところ15秒になった。調子に乗って最新版の6.8.3-1-Q8にしたところ60秒と遅くなった。*1その後更に手を入れて40秒に。
 ただし、同一処理後に吐き出すPNGが6.3.9では無駄にフルカラーなのに対して、6.8.3-1では正しく2値なのでここは最新版の方を使う事とする。バグとかも減ってるだろうし。遅いのはおそらく内部の8bitデータをそのまま吐かずに1bitにパックしてるから。
 挙動を見たところ、どうも画像のロードやアロケートを、APIで呼び出した時にその場では行わず、実際に使う時になってから確保するっぽい。全体処理が遅い割にはロードやアロケートAPIからの戻りが異常に速いし、読み込んだ画像の情報をトレースに出すのをやめただけで処理が先に進むのが速くなったし。あと遅延ロードのような事もしているのか、左記の情報出力でのブロックを止めると全体の処理時間が10秒も縮まった。1枚読んでは情報出力、もう1枚読んでは情報出力、その後実際の合成処理とシリアルに動いてた所が一部同時実行されたのではなかろうか。
 それにしてもバージョン変えると挙動が変わるのは困りもの。コマンドラインのオプションも統一感無いし何でこんなへんてこなImageMagickがメジャーなんだろうと思ったりもするけど、マクロ機能付きのGUIツールは色々あれど、コマンドライン主体の画像処理ソフトって他に無いからかな。特にLinux

*1:6.3.9-Q8にあるJMagic8bit版で、最新版のImageMagic8bit版のDLLが利用できた。