2008年5月6日火曜日

動画の基礎知識

ちょっと実業務で動画を扱う必要が出てきたので、今まで再生しかした事が無かった動画の周辺事情と、ffmpegを使ったコンバートの方法を調べてみた。

コーデックってのは、圧縮するコーダーと、再生するデコーダーのセットの事だな。

よく見るAVIとかMOVってのは、あくまでコンテナファイルの拡張子の事で、中のビデオファイルと音声ファイルは、どんな形式が入っているのかは、開いてみるまでわからない。コーデックの確認用ソフトもある。コンテナフォーマットによって、モバイルに適しているとか、ストリーミングに適しているとかといった使い分けが出でくるのかな。

音声ファイルは、主に人の声を対象にしたものと、音楽を対象にしたものがあって、人の声だけを対象にした方が圧縮が効くみたい。ただ、あまり考えずにmp3だったり、最近だとAACやHE-AACあたりがいいのかな。

で実際に、変換かけるとしたら、3GPP/3GPP2からFlashビデオという流れが一番多いんじゃないかと思う。今のご時世で一番普及しているデジタルビデオは携帯だからね。細かい事は覚えなくても、ファイルフォーマットと、どのガジェットはどのフォーマットを吐くかさえ押さえておけばいいと思う。

で、実際にどうやって変換するのかというと、ffmpegが現実的かな。入力元のコンテナフォーマット、ビデオコーデック、音声コーデックや各種パラメーターは自動認識してくれて、指定したフォーマットで出力したり、リサイズや指定位置から指定時間だけ切り出したり、各種パラメーターの調整が出来たりする。コマンドラインから使うのが前提だけど、各種GUIフロントエンドも出そろってきている。

実際にauのケータイで撮った動画を、microSDからPCに取り込んだ2GPP2ファイルと、ケータイ内で3GPPに変換してメール添付してPCに取り込んだものを、ffmpegでflvに変換してみた。

それぞれ、

ffmpeg -i ~/MA0_0001.3GP -sameq MA0_0001.flv

ffmpeg -i ~/MA0_0002.3G2 -sameq MA0_0002.flv

みたいな感じだけど、簡単に変換できたよ。

あとは、Rubyなどのスクリプトから、このコマンドを呼んで、エラー処理とタイムアウト処理を書けば、サーバで扱う事も出来るかな。

flexと連動して、コメントを表のレイヤーで流せば、ニコニコ動画のようなものも作れるよね。