cyber205の日記: デジカメの動画ファイルフォーマット(MOV)について調べてみた
ちょっと訳あって、自分のデジカメの記録できるファイルフォーマットを調査してみた。
いつも使っているのはJPEG、これは普通にデコードできるし使っている。
さらに動画(音声付き)も撮れるカメラなんだけど、動画のほうは微妙に厄介らしい。
一応、QuickTime形式の拡張子[.MOV]として記録されるのでQuickTimeがインストールされていれば
見えるみたいなんだけど、このフォーマットはQuickTimeの中でも特にデジカメによく使われる形式らしい。
MotionJPEGっていう形式なのね。昔のビデオキャプチャボードでも処理が軽いので多用されたとか。
処理能力の低いデジカメでもJPEGへの圧縮は本業だから、この処理が遅いというのは考えられないわけで。
専用チップを載っけて性能を稼いでいる可能性もあり、本来なら高速処理できるはずなわけだ。
で、それをつなげてパラパラ漫画みたいにくっつけたのがこの形式…ということになっている。
だから、mplayerなんかを使うと、バラのJPEGファイルに切り離すことも可能らしい。
# リンク元は「Perl、ImageMagick、MPlayer を使ってモザイク・ムービーを作成する」って記事なんだけど、
# 「凝ったビデオ・エフェクトを作成するのに高性能のハードウェアは必要ありません」とか
# IBMみたいなビジネスでお堅いイメージのある企業がこういう情報を公開してるのにはちょっと驚き。
QuickTimeのフォーマットはAppleが公開しているqtff.pdfに記載されているのでダウンロードしてきた。
データ形式に合わせてそれぞれブロックが存在していて、それぞれatomと呼ばれており、
何をコンテンツに入れているのかを示すシグネチャが決まっているらしいね。
実際にどうなっているか知りたいので、サンプルデータを先頭から何バイトかダンプしてみる。
UNIX系OSならだいたいインストールされているであろうhexdumpを使ってみよう。
hexdump -C hogefuga.mov | less という感じ。
20 0c 84 00 6d 64 61 74 | ...mdat
07 e8 72 00 6d 64 61 74 |..r.mdat
ふぅむ。mdatってのが共通してるな。mdatを検索してみると、ドキュメントのP28に記述あり。
Movie DATa atomの略かな。先行する4バイトがAtom sizeでシグネチャ"mdat"[6D,64,61,74]らしい。
68000で始まり、PowerPCに至るまでBig Endianだった(はずの)Macだから、その頃開発され使われていた
QuickTimeのフォーマットも当然ながらビッグエンディアンだろう。そうやって計算してみると、
537691136Bytesと、132674048Bytesになるのだが、確かにちょっと数が小さいものの、全体のファイルの
大きさに近いようだ。どうも256バイト単位でAtom Sizeは指定されてるっぽいね。
P.S
AVIに関してはMicrosoftのデベロッパ向け情報だとか、このへんの解説がある。
MOVと同様、こちらも拡張子はAVIであっても、内部のコーデックは様々なものが選択できるため、
それなりの解析ツールがないといじるのは難しい。
デジカメの動画ファイルフォーマット(MOV)について調べてみた More ログイン