3/10/2011

[&] iGADGET making (QuickTime)

photo

久々のブログの iGADGET のお知らせでは、
ご期待とのお言葉を各所から頂き、ありがたく思っております。

iPad/iPhone 版の GADGET Past as Future [ iGADGET ] の開発では
様々な落とし穴にはまりました。数回にわけて、
その現象、事象と、回避策を書いていこうと思います。

まずは QuickTime 編。
iGADGET では、Director 時代に使われた QuickTime ムービーを
大部分の素材として用いています。
当時は MacOS 7.X の時代。QuickTime も 4.X 頃。
素材動画のタイムスタンプを見ると 199x 年とかで、
気絶しそうになりました。

まずは、もと素材の QuickTime (Cinepak圧縮) を
H.264 形式に変換します。
当時は Cinepak も優秀な CODECだったのですが、
H.264ですとさらに高画質で小さいファイルサイズで扱えます。
QuickTime Animation CODEC形式のものは iTunes では
変換できないので QuickTime 7 Pro で
H.264に変換します(後述)。
その他の動画ファイルはそのままでも再生できないことは無いのですが、
iPad/iPhoneのバッテリー消費の効率や最適化も考え、
全て H.264 QuickTimeで扱いました。

●動画変換すると、何らかのタイミングでまれに
 最後に1フレーム余計な画像が入る場合がある。
 なかなか気づかないけど、
 ループする動画などはタイミングがずれるので、
 最後のフレームがだぶっていないか確認。

● 0 duration movie が iPhone4 でのみ再生できない。
 0 duration movie とはごくまれに作られる、
 フレームとフレーム間のタイミング時間が0(ゼロ)のもの。
 動画内でシーンが切り替わったりする場合混在することがある。
 iPhone 3GS では再生できる動画なのだが、なぜか iPhone 4 だけ
 再生できず、アプリが落ちる。
 この 0 duration movie は iTunes 経由で動画を iPhone にコピー
 した場合、問題なく再生できため、発見しにくい。
 正常に再生できるかできないかは、iPhone にメール添付で
 動画を送りつけて、そこから再生できるかどうか試すしかない。
 そうして 0 duration movie を見つけたら、
 パラメータを変えて再エンコードし直す。
 これは Director 時代の動画を使い回しているから陥る問題。

● 1ピクセルの余計な黒線が発生。
 上の画像の窓枠下に、ごくわずかだけ黒い線が 1ピクセル分
 生じているのがわかるだろうか?
 元々の素材は MacOS 時代の 640x480 画面サイズに作られたものを
 そのまま用いているため、iPhone の画面サイズ
 480x320, 960x640にはぴったり適合しない。

 そこで、元の縮小したり、拡大したりして使うのだが、
 その際の割り算かけ算で1ピクセル以下のあまりが出てしまうと、
 そのあまりが余計な黒線となって現れる。
 これは上記の事象に合致すれば必ず現れるものでもないもよう。
 また面倒なことにこの事象は実機の画面でしか発生しない。
 さらに実機のスクリーンショットでも記録できない。

 3GSとiPhone4ごとに表示が異なるため、3GSでうまく調整しても、
 iPhone 4 では今度、横に余計な黒線が表示されたりする。
 たいていの場合 0.25 ピクセル単位で表示位置を調整すると
 直るのだが、
 最悪の場合は、480x320 の上でぴったり割り切れる数字に
 動画の縦横サイズを修正して使ったりした。

●ループ動画が正しくループ再生されない。
 これは iOS 4.0.X 環境にのみ生じる問題。
 発売当初にすぐ iPhone 4 を買ってから、
 一度も iOS をアップデートしていない人は iOS 4.0.X に相当する。
 NSString *osversion = [UIDevice currentDevice].systemVersion; 
 で取得できるので、動画再生のルーチンを切り替えることで対処可。
 ループ再生されない環境では、動画再生が最後まで到達したら、
 無理矢理フックをかけて、また最初から再生する機構を加える。

●サウンドトラックが2本以上ある動画は、1本目しか再生されない。
 QuickTime はメインのサウンドトラックの他に 2本目、3本目〜の
 サウンドトラックを保持することができ、通常は全部再生される。
 けれど iPad のみ、なぜか最初の1本目の音しか再生されない。

で、いろいろな落とし穴から這い上がってきたのだが、
結論は QuickTime 7 pro 最強!
MacOS X に標準で搭載されている QuickTime Player X は、
使いやすいのだが、細かい機能が省かれている。
QuickTime 7 Pro は MacOS X のインストール DVD に入っていて
オプションとして追加インストールすることができる。

QuickTime 7 pro では動画に対して様々な細かいパラメータを設定して
再度動画ファイルとして Export できるので重宝した。
さらに、動画をイメージシーケンス(連番静止画)とかにできたり、
逆にイメージシーケンスを動画にできたりするのも便利。
After Effects 等に慣れた人は、使い慣れたツールを
使う方が良いかもしれませんが、QT7p はシンプルで強力なツール。

結局のところ、iPad/iPhone 用の新しく動画ファイルを作る場合には、
上記のような落とし穴に落ちないかもしれないけど、
古い MacroMind Director の素材を iPad/iPhone で使うには
様々な苦労があったのでした。
こんなことする人はまれかもしれませんが、
何らかの参考になれば幸いです。

Bruce Leak氏らが描いた、
切手くらいの大きさの動画がパラパラ動いていた頃の QuickTime 1.0 の
思想と理想は、今も息づいているから。

evolution-apple-quicktime-logo