EternalWindows
AVI / VFWとAVI

AVI(Audio Video Interleave)は、Microsoftによって規格されたファイルフォーマットであり、 音声と動画を格納することができます。 音声だけを格納した場合は、通常のWAVEファイルなどと変わりありませんが、 動画を共に格納することで音声付き動画になります。 AVIの最大の特徴は、それ自身がファイルフォーマットに過ぎず、 データの圧縮形式については定義していないという点です。 つまり、ファイル内のどこにデータを格納すべきかは定義しますが、 そのデータをどのように圧縮するかはAVIファイルの作成者が決定することができます。 これにより、AVIファイル内のデータは圧縮率の優れたコーデックを利用して圧縮することができ、 ファイルサイズを軽くすることができます。

AVIを再生するためには、様々な手順を踏まなければなりません。 AVIファイルから映像と音声を取得するのは当然として、 先に述べたようにこれらのデータは圧縮されている可能性があります。 つまり、解凍処理が必要となり、場合によってはコーデックが存在しないために、 解凍を実行できないこともあります。 こうしたデータの取得や解凍などを容易にする関数群はVFW(Video for Windows)と呼ばれ、 操作内容に応じて呼び出すべき関数が決定します。 次に、VFWの関数群を示します。

VFWの関数群 説明
AVIFile Functions AVIファイルからストリームを取得する関数や、 ストリームからフォーマットやデータを取得する関数を提供する。 また、ストリームを作成したり、圧縮したりする関数も提供する。 AVIFile関数は、原則AVIというプレフィックスを持つ。
VCM(Video Compression Manager) VCMはビデオコーデックを管理しており、 ビデオコーデックの機能を利用するための関数を提供する。 たとえば、圧縮されたデータを解凍したり、無圧縮のデータを圧縮したりすることができる。 また、ビデオコーデックの列挙や情報を取得する関数も提供し、 全てのVCM関数はICというプレフィックスを持つ。 ちなみに、ACM(ACM Compression Manager)はオーディオコーデックを管理し、 音声データの圧縮や解凍などサポートする。
DrawDib DIBを描画する関数を提供する。 この関数には、ビデオストリームから取得した圧縮フレームを指定することもでき、 その場合は関数内部で解凍処理が行われて描画される。 DrawDib関数は、DrawDibというプレフィックスを持つ。

AVIを再生するとは、AVIファイルに格納されている映像と音声を同時に再生することを意味しています。 映像を再生する流れとしては、まずAVIFile関数を使用して映像を取得し、 その後にDrawDib関数を使用して映像を描画することになります。 DrawDib関数を呼び出せば、アプリケーションがVCM関数を通じて解凍処理を行う必要はなくなります。 一方、音声の再生については、まずAVIFile関数を使用して音声を取得し、 その後にwaveOutの関数群を使用して再生することになります。 ただし、音声が圧縮されている場合は、ACMを通じて明示的に解凍する必要があります。 実際のところ、AVIを再生するだけであればMCIを利用した方が効率的ともいえますが、 任意の映像をファイルに保存するなどの作業を行うにはVFWの知識が必要です。


戻る