Microsoft DirectX 8.0 |
Microsoft はデジタル ビデオ (DV) データを AVI ファイルに保存するためのフォーマットを指定している。この仕様に従うことで、このフォーマットで作成された AVI ファイルは Microsoft® Windows® プラットフォーム用の Microsoft® DirectShow® デジタル ビデオ アーキテクチャの将来のバージョンに対して互換性を持つことが保証される。
このトピックでは、DV オーディオおよびビデオ データを含む AVI (Audio-Video Interleaved) ファイルのフォーマットを理解するための背景情報を提供する。また、他のプラットフォーム上で DV-AVI ファイルを使用するプログラマのための情報も提供する。AVI ファイルを読み書きするアプリケーションは、ファイル ソース (Async) フィルタと AVI スプリッタ フィルタ、および AVI Mux フィルタと ファイル ライタ フィルタ、そして DirectShow アーキテクチャで提供される関連インターフェイスを使用する。それにより、それらのサービスを実行するためのルーチンを開発しなくて済む。これらのフィルタは、AVI ファイルにアクセスするためのプログラミング上の要件を単純化する。
ここではさらに、DV データを含む AVI ファイルのフォーマットについても説明する。インターリーブされた DV データ ストリームおよび DV コンプレッサ/デコンプレッサ ストリーム ハンドラ用の特定の FOURCC (4 文字コード) を定義し、DV データのストリーム フォーマット構造体を定義する。また、AVI ファイル フォーマットに DV データを格納するための 2 つの方法の仕様についても説明する。
このトピックは、読者が DV データ フォーマットについてある程度理解していることを前提として書かれている。(このフォーマットについては、『Specification of Consumer-use Digital VCRs』に定義されている。この文書は Blue Book とも呼ばれる。)
このトピックは、以下のセクションを含んでいる。
RIFF (Resource Interchange File Format) ファイルの詳細については、Windows Software Development Kit (SDK) の 『Multimedia Programmer's Guide』と『Multimedia Programmer's Reference』を参照すること。
AVI ファイルの詳細については、Microsoft Video for Windows Development Kit バージョン 1.1 の『Programmer's Guide』第 6 章、および『OpenDML AVI File Format Extensions』(OpenDML AVI M-JPEG File Format Subcommittee 編、1996 年 2 月 28 日) のバージョン 1.02 を参照すること。
コンプレッサおよびデコンプレッサの詳細については、MSDN ライブラリにある Windows DDK Documentation の「Video Compression and Decompression Drivers」セクションを参照すること。
DV AVI ファイルには次の 2 つのタイプがある。
インターリーブされた DV データは、AVI RIFF ファイル内に 1 つのストリームとしてそのネイティブ フォーマットで格納できる。この方法には、DV に対して使用するデータ格納領域の量が最小限で済むという利点がある。主な欠点としては、このファイル フォーマットにはビデオ 'vids' ストリームもオーディオ 'auds' ストリームも含まれないため、Video for Windows に対する後方互換性を持たないことが挙げられる。インターリーブされた DV ストリームのサポートは、DirectShow の DV Muxer および DV スプリッタ フィルタによって提供される。
DV データを AVI RIFF ファイル内に 1 つのストリームとして格納するには、'strh' ストリーム ヘッダー チャンクの fccType メンバに 'iavs' (interleaved audio and video stream) FOURCC (four-character code : 4 文字コード) を指定し、fccHandler メンバに 'dvsd'、'dvhd'、'dvsl' のいずれかの FOURCC を指定する。ビデオ ストリームの毎秒のフレーム数を dwRate および dwScale メンバに指定し、'movi' チャンク内のビデオ ブロックの総数を dwLength メンバに指定する。
'dvsd' ストリーム ハンドラ FOURCC は、DV データが『Specification of Consumer-use Digital VCRs』の Part 2 に従っていることを指定する。ビデオのフォーマットは 525 ライン、29.97 Hz (525-60) か、または 625 ライン、25.00 Hz (625-50) である。
'dvhd' ストリーム ハンドラ FOURCC は、DV データが『Specification of Consumer-use Digital VCRs』の Part 3 に従っていることを指定する。ビデオのフォーマットは 1125 ライン、30.00 Hz (1125-60) か、または 1250 ライン、25.00 Hz (1250-50) である。
'dvsl' ストリーム ハンドラ FOURCC は、DV データが『Specification of Consumer-use Digital VCRs』の Part 6 に従っていることを指定する。ビデオのフォーマットは高圧縮 SD (SDL) である。
注 : このトピックの以降の部分では、'dvsd' ストリームの定義を提供する。
ストリーム ヘッダー チャンクの後には、DVINFO ストリーム フォーマット チャンクが続く。DVINFO ストリーム フォーマットに対しては、以下のデータ構造体が定義される。
typedef struct tag_DVINFO { DWORD dwDVAAuxSrc; DWORD dwDVAAuxCtl; DWORD dwDVAAuxSrc1; DWORD dwDVAAuxCtl1; DWORD dwDVVAuxSrc; DWORD dwDVVAuxCtl; DWORD dwDVReserved[2]; } DVINFO, *PDVINFO;
実際の DV データは 'movi' チャンク内の '##dc' チャンクとして格納される (## はストリーム識別子)。各チャンクには、1 フレームのデータが含まれる。これは 525-60 システムの場合は 10 個の DV DIF シーケンス、625-50 システムの場合は 12 個の DV DIF シーケンスである。DV SD ('dvsd') DIF シーケンス フォーマットについては、『Specification of Consumer-use Digital VCRs』の Part 2 で定義されている。
次の図に、1 つの DV データ ストリームを含む AVI ファイルを DirectShow フィルタ グラフを使用して再生する例を示す (DV スプリッタおよび DV ビデオ デコーダ フィルタは、特に DV データを扱うために DirectShow に用意されている)。下の表で、メディア タイプを定義する。
メディア | メジャー タイプ | サブタイプ | フォーマット構造体 |
---|---|---|---|
A | MEDIATYPE_Stream | MEDIASUBTYPE_AVI | なし |
B | MEDIATYPE_iavs | MEDIASUBTYPE_dvsd、MEDIASUBTYPE_dvhd、または MEDIASUBTYPE_dvsl | DVINFO |
C | MEDIATYPE_VIDEO | MEDIASUBTYPE_dvsd、MEDIASUBTYPE_dvhd、または MEDIASUBTYPE_dvsl | DVINFO |
D | MEDIATYPE_AUDIO | NULL | WAVEFORMATEX |
E | MEDIATYPE_VIDEO | 標準ビデオ タイプ | VIDEOINFO |
次の図に、1 つの DV データ ストリームを含む AVI ファイルを DirectShow フィルタ グラフを使用して作成する例を示す (DV ビデオ エンコーダ および DV Muxer フィルタは、特に DV データを扱うために DirectShow に用意されている)。メディア タイプは上の表に定義されている。アップストリーム フィルタは、ここには示されていないが、適切なメディア タイプ D および E を生成する任意の組み合わせを使用できる。
次の図に、1 つの DV データ ストリームを含む AVI ファイルを DirectShow フィルタ グラフを使用して作成する例を示す。ここでは、ハードウェア デバイス ドライバを通して DV デバイス (1394 ベースの DV カムコーダなど) と通信するソース フィルタを DV データ入力として使用している (このソース フィルタは、特に DV データを扱うために DirectShow に用意されている)。メディア タイプは上の表に定義されている。
次の図に、1 つの DV データ ストリームを含む AVI ファイルを DirectShow フィルタ グラフを使用して出力する例を示す。ここでは、ハードウェア デバイス ドライバを通して DV デバイス (1394 ベースの DV カムコーダなど) と通信するシンク フィルタを DV データ出力として使用している (このシンク フィルタは、特に DV データを扱うために DirectShow に用意されている)。メディア タイプは上の表に定義されている。
次の例は、完全なヘッダー チャンクによって拡張された、1 つの DV データ ストリームを含む AVI ファイルの AIFF RIFF フォーマットを示す。
00000000 RIFF (0FAE35D4) 'AVI ' 0000000C LIST (00000106) 'hdrl' 00000018 avih (00000038) dwMicroSecPerFrame : 33367 dwMaxBytesPerSec : 3728000 dwPaddingGranularity : 0 dwFlags :0x810 HASINDEX | TRUSTCKTYPE dwTotalFrames : 2192 dwInitialFrames : 0 dwStreams : 1 dwSuggestedBufferSize : 120000 dwWidth : 720 dwHeight : 480 dwReserved :0x0 00000058 LIST (0000006C) 'strl' 00000064 strh (00000038) fccType : 'iavs' fccHandler :'dvsd' dwFlags :0x0 wPriority : 0 wLanguage :0x0 undefined dwInitialFrames : 0 dwScale :100 (29.970 Frames/Sec) dwRate : 2997 dwStart : 0 dwLength : 2192 dwSuggestedBufferSize : 120000 dwQuality : 0 dwSampleSize : 0 rcFrame : 0,0,720,480 000000A4 strf (00000020) dwDVAAuxSrc :0x........ dwDVAAuxCtl :0x........ dwDVAAuxSrc1 :0x........ dwDVAAuxCtl1 :0x........ dwDVVAuxSrc :0x........ dwDVVAuxCtl :0x........ dwDVReserved[2] : 0,0 000000CC LIST (0FADAC00) 'movi' 0FADACD4 idx1 (00008900)
インターリーブされた DV データは、AVI RIFF ファイル内で 1 つのビデオ ストリームと 1 つから 4 つまでのオーディオ ストリームに分割することができる。このファイル フォーマットには標準ビデオ 'vids' ストリームと少なくとも 1 つの標準オーディオ 'auds' ストリームが含まれるため、Video for Windows に対して後方互換性を持つという利点がある。主な欠点は、このファイル フォーマットではオーディオ データをオーディオ ストリームとして冗長に格納しなければならないことである。"ビデオ" ストリームは、実際にはネイティブのインターリーブされた DV データ ストリームである。ただし、ハンドラ タイプ 'dvsd' の標準 'vids' ストリームとして、DV ビデオ デコーダが使用される。また、このフォーマットでは、"キャプチャされた" ファイルを AVI ファイルとして書き込む前に、DV スプリッタ フィルタを使用してファイルを分割する必要がある。
DV データは、1 つのビデオ ストリームと、別にいくつかのオーディオ ストリームとして AVI RIFF ファイルに格納できる。ビデオ ストリームは標準ビデオ ストリーム ヘッダー (fccType メンバ値が 'vids') によって指定される。fccHandler メンバは 'dvsd'、'dvhd'、または 'dvsl' として指定される。ビデオ ストリームの毎秒のフレーム数を dwRate および dwScale メンバに指定し、'movi' チャンク内のビデオ ブロックの総数を dwLength メンバに指定する。
このように DV ビデオを 'vids' ストリームとして含み DV オーディオを 'auds' ストリーム フォーマットの DV として含む AVI ファイルでは、ビデオ ストリーム フォーマット チャンクは標準の BITMAPINFOHEADER 構造体である。ストリーム フォーマット チャンクは、オプションで DVINFO 構造体を含むように拡張できる。その場合は、ストリーム フォーマット チャンクのサイズを 40 バイト (BITMAPINFOHEADER 構造体のサイズ) から 72 バイト (BITMAPINFOHEADER+DVINFO 構造体のサイズ) に変更し、BITMAPINFOHEADER データ構造体の直後に DVINFO データ構造体を記述する。
オーディオ ストリームは標準オーディオ ストリーム ヘッダー (fccType メンバ値が 'auds') によって指定される。fccHandler メンバは、オーディオ ストリームでは使用しない。
DV ビデオ データは、前の「1 つの DV データ ストリームを含む AVI ファイル」で説明したとおり、'##dc' チャンクとして格納される。オーディオ データは、'##wb' チャンクとして 'movi' チャンクに格納される。
次の図に、DV ビデオを 'vids' ストリームとして含み DV オーディオを 'auds' ストリームとして含む AVI ファイルを DirectShow フィルタ グラフを使用して再生する例を示す (DV ビデオ デコーダ フィルタは、特に DV データを扱うために DirectShow に用意されている)。メディア タイプは、DV メディア タイプの表に定義されている。
次の図に、DV ビデオを 'vids' ストリームとして含み DV オーディオを 'auds' ストリームとして含む AVI ファイルを DirectShow フィルタ グラフを使用して作成する例を示す (DV ビデオ デコーダは、特に DV データを扱うために DirectShow に用意されている)。メディア タイプは、DV メディア タイプの表に定義されている。アップストリーム フィルタは、ここには示されていないが、適切なメディア タイプ D および E を生成する任意の組み合わせを使用できる。
次の図に、DV ビデオを 'vids' ストリームとして含み DV オーディオを 'auds' ストリームとして含む AVI ファイルを DirectShow フィルタ グラフを使用して作成する例を示す。ここでは、ハードウェア デバイス ドライバを通して DV デバイス (1394 ベースの DV カムコーダなど) と通信するソース フィルタを DV データ入力として使用している (このソース フィルタと DV スプリッタ フィルタは、特に DV データを扱うために DirectShow に用意されている)。メディア タイプは、DV メディア タイプの表に定義されている。
次の図に、DV ビデオを 'vids' ストリームとして含み DV オーディオを 'auds' ストリームとして含む AVI ファイルを DirectShow フィルタ グラフを使用して出力する例を示す。ここでは、ハードウェア デバイス ドライバを通して DV デバイス (1394 ベースの DV カムコーダなど) と通信するシンク フィルタを DV データ出力として使用している (このシンク フィルタと DV Muxer フィルタは、特に DV データを扱うために DirectShow に用意されている)。メディア タイプは、DV メディア タイプの表に定義されている。
次の例は、完全なヘッダー チャンクによって拡張された、DV ビデオを 'vids' ストリームとして含み DV オーディオを 'auds' ストリームとして含む AVI ファイルの AIFF RIFF フォーマットを示す ('vids' ストリームの 'strf' サブチャンクにおいて、BITMAPINFO の後にオプションで DVINFO データが記述されている)。
00000000 RIFF (103E2920) 'AVI ' 0000000C LIST (00000146) 'hdrl' 00000018 avih (00000038) dwMicroSecPerFrame : 33367 dwMaxBytesPerSec : 3728000 dwPaddingGranularity : 0 dwFlags :0x810 HASINDEX | TRUSTCKTYPE dwTotalFrames : 2192 dwInitialFrames : 0 dwStreams : 2 dwSuggestedBufferSize : 120000 dwWidth : 720 dwHeight : 480 dwReserved :0x0 00000058 LIST (00000094) 'strl' 00000064 strh (00000038) fccType :'vids' fccHandler :'dvsd' dwFlags :0x0 wPriority : 0 wLanguage :0x0 undefined dwInitialFrames : 0 dwScale :100 (29.970 Frames/Sec) dwRate : 2997 dwStart : 0 dwLength : 2192 dwSuggestedBufferSize : 120000 dwQuality : 0 dwSampleSize : 0 rcFrame : 0,0,720,480 000000A4 strf (00000048) biSize : 40 biWidth : 720 biHeight : 480 biPlanes : 1 biBitCount : 24 biCompression : 0x64737664 'dvsd' biSizeImage : 120000 biXPelsPerMeter : 0 biYPelsPerMeter : 0 biClrUsed : 0 biClrImportant : 0 dwDVAAuxSrc :0x........ dwDVAAuxCtl :0x........ dwDVAAuxSrc1 :0x........ dwDVAAuxCtl1 :0x........ dwDVVAuxSrc :0x........ dwDVVAuxCtl :0x........ dwDVReserved[2] : 0,0 000000F4 LIST (0000005E) 'strl' 00000100 strh (00000038) fccType :'auds' fccHandler : ' ' dwFlags :0x0 wPriority : 0 wLanguage :0x0 undefined dwInitialFrames : 0 dwScale : 1 (32000.000 Samples/Sec) dwRate : 32000 dwStart : 0 dwLength : 2340474 dwSuggestedBufferSize : 4272 dwQuality : 0 dwSampleSize : 4 rcFrame : 0,0,0,0 00000140 strf (00000012) wFormatTag : 1 PCM nChannels : 2 nSamplesPerSec : 32000 nAvgBytesPerSec : 128000 nBlockAlign : 4 wBitsPerSample : 16 cbSize : 0 00000814 LIST (103D0EF4) 'movi' 103D1710 idx1 (00011210)
Microsoft AVI ファイル フォーマットは、オーディオ/ビデオ シーケンスのキャプチャ、編集、再生を行うアプリケーションで使用される RIFF ファイル仕様である。一般に、AVI ファイルには異なる種類のデータのストリームが複数含まれる。ほとんどの AVI シーケンスは、オーディオ ストリームとビデオ ストリームの両方を使用する。単純な AVI シーケンスでは、ビデオ データのみを使用し、オーディオ ストリームは必要としない。
元々の AVI ファイル仕様に対して OpenDML AVI File Format Extensions で加えられた変更については、このセクションでは取り上げない。詳細については、『OpenDML AVI File Format Extensions』(OpenDML AVI M-JPEG File Format Subcommittee 編、1996 年 2 月 28 日) のバージョン 1.02 を参照すること。
このセクションには、以下の内容が含まれる。
AVI ファイルは、AVI RIFF フォーマットを使用する。AVI RIFF フォーマットは、FOURCC (4 文字コード) 'AVI ' によって識別される。すべての AVI ファイルには、2 つの必須の LIST チャンクが含まれる。これらのチャンクは、ストリームとストリーム データのフォーマットを定義する。AVI ファイルには、インデックス チャンクが含まれる場合もある。このオプションのチャンクは、ファイル内でのデータ チャンクの位置を指定する。これらの要素を含んだ AVI ファイルは、次のようなフォーマットを持つ。
RIFF ('AVI ' LIST ('hdrl' . . . ) LIST ('movi' . . . ) ['idx1'<AVI Index>] )
LIST チャンクとインデックス チャンクは、RIFF 'AVI ' チャンクのサブチャンクである。'AVI ' チャンクは、ファイルが AVI RIFF ファイルであることを示す。LIST 'hdrl' チャンクはデータのフォーマットを定義し、これは最初の必須 LIST チャンクである。LIST 'movi' チャンクは AVI シーケンスのデータを含み、これは 2 番目の必須チャンクである。'idx1' チャンクはインデックス チャンクである。AVI ファイルには、この 3 つのコンポーネントを適切な順序で含む必要がある。
LIST 'hdrl' および LIST 'movi' チャンクは、そのデータに対してサブチャンクを使用する。次の例に、LIST 'hdrl' および LIST 'movi' チャンクを完成させるのに必要なチャンクを追加した AVI RIFF フォーマットを示す。
RIFF ('AVI ' LIST ('hdrl' 'avih'(<Main AVI Header>) LIST ('strl' 'strh'(<Stream header>) 'strf'(<Stream format>) 'strd'(<additional header data>) 'strn'(<Stream name>) ... ) . . . ) LIST ('movi' {SubChunk | LIST ('rec ' SubChunk1 SubChunk2 . . . ) . . . } . . . ) ['idx1'<AVI Index>] )
以降のセクションでは、LIST 'hdrl' および LIST 'movi' チャンクに含まれるチャンクについて説明する。'idx1' チャンクについては、このドキュメントでは説明しない。AVI ファイルの 'idx1' チャンクおよびインデックスの詳細については、『OpenDML AVI File Format Extensions』(OpenDML AVI M-JPEG File Format Subcommittee 編、1996 年 2 月 28 日) のバージョン 1.02 を参照すること。
ファイルはメイン ヘッダーで始まる。AVI ファイルの場合、このヘッダーは 'avih' という FOURCC (4 文字コード) で示される。ヘッダーには、ファイル内のストリーム数、AVI シーケンスの幅と高さなど、AVI ファイル全体に関するグローバル情報が含まれる。AVI メイン ヘッダー構造体は、次のように定義される。
typedef struct { DWORD dwMicroSecPerFrame; DWORD dwMaxBytesPerSec; DWORD dwReserved1; DWORD dwFlags; DWORD dwTotalFrames; DWORD dwInitialFrames; DWORD dwStreams; DWORD dwSuggestedBufferSize; DWORD dwWidth; DWORD dwHeight; DWORD dwReserved[4]; } MainAVIHeader;
AVIF_HASINDEX | AVI ファイルの終わりにインデックスを含む 'idx1' チャンクがあることを示す。良好なパフォーマンスのためには、すべての AVI ファイルがインデックスを含む必要がある。 |
AVIF_MUSTUSEINDEX | データのプレゼンテーションの順序を決定するために、ファイル内のチャンクの物理的な順序ではなく、インデックスを使用することを示す。たとえば、これを使ってフレームのリストを作成して編集することができる。 |
AVIF_ISINTERLEAVED | AVI ファイルがインターリーブされていることを示す。 |
AVIF_WASCAPTUREFILE | AVI ファイルが、リアルタイム ビデオのキャプチャ用に特別に割り当てられたファイルであることを示す。アプリケーションは、このフラグが設定されたファイルをオーバーライドする前に、ユーザーに警告を発する必要がある。これは、ユーザーがこのファイルをデフラグメントしている可能性が高いからである。 |
AVIF_COPYRIGHTED | AVI ファイルに著作権のあるデータおよびソフトウェアが含まれていることを示す。このフラグが使用されている場合、ソフトウェアはデータの複製を許可すべきではない。 |
メイン ヘッダーの次には、1 つ以上の 'strl' チャンクが続く ('strl' チャンクは各データ ストリームごとに必要である)。これらのチャンクには、ファイル内のストリームに関する情報が含まれる。各 'strl' チャンクには、ストリーム ヘッダー チャンクとストリーム フォーマット チャンクが必ず含まれる。ストリーム ヘッダー チャンクは、FOURCC (4 文字コード) 'strh' で示され、ストリーム フォーマット チャンクは、FOURCC 'strf' で示される。ストリーム ヘッダー チャンクとストリーム フォーマット チャンクに加えて、'strl' チャンクにはストリーム ヘッダー データ チャンクとストリーム名チャンクが含まれる場合がある。ストリーム ヘッダー データ チャンクは FOURCC 'strd' で示される。ストリーム名チャンクは FOURCC 'strn' で示される。
ストリーム ヘッダー構造体には、ファイル内の単一のストリームに対するヘッダー情報が含まれる。
typedef struct { FOURCC fccType; FOURCC fccHandler; DWORD dwFlags; DWORD dwPriority; DWORD dwInitialFrames; DWORD dwScale; DWORD dwRate; DWORD dwStart; DWORD dwLength; DWORD dwSuggestedBufferSize; DWORD dwQuality; DWORD dwSampleSize; RECT rcFrame; } AVIStreamHeader;
ストリーム ヘッダーは、FOURCC を使用して、ストリームに含まれるデータのタイプ (オーディオ、ビデオなど) を指定する。
'vids' | ストリームにビデオ データが含まれることを示す。ストリーム フォーマット チャンクには、パレット情報を含むことが可能な BITMAPINFO 構造体が含まれる。 |
'auds' | ストリームにオーディオ データが含まれることを示す。ストリーム フォーマット チャンクには、WAVEFORMATEX または PCMWAVEFORMAT 構造体が含まれる。 |
'txts' | ストリームにテキスト データが含まれることを示す。 |
AVISF_DISABLED | このストリームをデフォルトで有効にしないことを示す。 |
AVISF_VIDEO_PALCHANGES | このビデオ ストリームにパレットの変更が含まれることを示す。このフラグは、再生ソフトウェアに対して、パレットをアニメーションする必要があることを警告する。 |
最後の 8 つのメンバは、ストリームの再生特性を記述する。これらの要素には、再生レート (dwScale と dwRate)、シーケンスの開始タイム (dwStart)、シーケンスの長さ (dwLength)、再生バッファのサイズ (dwSuggestedBuffer)、データ 品質の指標 (dwQuality)、およびサンプル サイズ (dwSampleSize) が含まれる。
ストリーム ヘッダー構造体のメンバのいくつかは、メイン ヘッダー構造体にも含まれる。メイン ヘッダーのデータはファイル全体に適用され、ストリーム ヘッダーのデータはストリームにだけ適用される。
ストリーム ヘッダー ('strh') チャンクの次には、ストリーム フォーマット ('strf') チャンクが続く。ストリーム フォーマット チャンクは、ストリーム内のデータのフォーマットを記述する。ビデオ ストリームの場合、このチャンク内の情報は BITMAPINFO 構造体 (該当する場合はパレット情報を含む) である。オーディオ ストリームの場合、このチャンク内の情報は WAVEFORMATEX または PCMWAVEFORMAT 構造体である (WAVEFORMATEX 構造体は WAVEFORMAT 構造体の拡張版である)。この構造体および他のストリーム タイプの詳細については、『New Multimedia Data Types and Data Techniques Standards Update』を参照すること。
'strl' チャンクには、ストリーム ヘッダー データ ('strd') チャンクが追加される場合がある。このチャンクを使用する場合は、ストリーム フォーマット チャンクの後に記述する。このチャンクのフォーマットと内容は、インストール可能な圧縮または復元ドライバによって定義される。通常、これらのドライバはこの情報を使用して設定を行う。RIFF ファイルを読み書きするアプリケーションは、この情報をデコードする必要はない。アプリケーションはドライバとの間でこのデータをメモリ ブロックとして転送する。
オプションの 'strn' ストリーム名チャンクは、ストリームについて説明するゼロ終端文字列を提供する。(AVI ファイル関数でこのチャンクを使用することにより、アプリケーションはアクセスしたいストリームを名前で識別することができる。)
AVI プレーヤーは、'strl' チャンクの順序に基づいて、LIST 'hdrl' チャンク内のストリーム ヘッダーを LIST 'movi' チャンク内のストリーム データと関連付ける。最初の 'strl' チャンクはストリーム 0 に対応し、2 番目の 'strl' チャンクはストリーム 1 に対応し、以下同様に続く。
たとえば、最初の 'strl' チャンクが wave オーディオ データを記述する場合、その wave オーディオ データはストリーム 0 に含まれる。同様に、2 番目の 'strl' チャンクがビデオ データを記述する場合、そのビデオ データはストリーム 1 に含まれる。
ヘッダー情報の次に続くのは、ストリーム内の実際のデータ (画像やサウンドそれ自体) のチャンクを含む LIST 'movi' チャンクである。データ チャンクは、LIST 'movi' チャンク内に直接記述する場合と、'rec' チャンクにグループ化する場合がある。'rec' へのグループ化は、グループ化されたチャンクがディスクから一度に読み出されることを意味する。これは、CD-ROM から再生するために特別にインターリーブされたファイルの場合にだけ使用される。
すべての RIFF チャンクと同様に、データ チャンクにはチャンク タイプを識別する FOURCC (4 文字コード) が含まれる。FOURCC は、1 文字から 4 文字の ASCII 英数字のシーケンスで表される 32 ビット量である (右側は空白文字が埋められる)。各チャンクを識別する FOURCC は、ストリーム番号と、チャンク内にカプセル化された情報のタイプを定義する 2 文字のコードとで構成される。たとえば、波形チャンクは 2 文字コード 'wb' で示される。波形チャンクが 2 番目の LIST 'hdrl' ストリーム記述に対応している場合、FOURCC は '01wb' となる。
注 : 2 文字コードはストリームを記述するのに便利な方法だが、他のアプリケーションがそれを認識するとは限らない。ストリームを作成したり情報を他のアプリケーションに転送する場合には、FOURCC を使用すること。
フォーマット情報はすべてヘッダーに含まれるため、これらのデータ チャンク内のオーディオ データにフォーマットに関する情報を含めてはならない。オーディオ データ チャンクのフォーマットを次に示す (## はストリーム識別子)。
WAVE Bytes '##wb' BYTE abBytes[];
音声データは、圧縮 DIB または非圧縮 DIB である。非圧縮 DIB の場合、関連する BITMAPINFO 構造体の biCompression メンバに BI_RGB が指定されている。圧縮 DIB の場合は、biCompression メンバに BI_RGB 以外の値が指定されている。圧縮フォーマットの詳細については、『Microsoft Windows Programmer's Reference』で BITMAPINFOHEADER データ構造体の説明を参照すること。
非圧縮 DIB のデータ チャンクには RGB ビデオ データが含まれる。これらのチャンクは、2 文字コード 'db' (db は DIB bits の略) で識別される。圧縮 DIB のデータ チャンクは、2 文字コード 'dc' (dc は DIB compressed の略) で識別される。どちらのデータ チャンクも、DIB に関するヘッダー情報は含んでいない。非圧縮 DIB のデータ チャンクのフォーマットを次に示す。
DIB Bits '##db' BYTE abBits[];
圧縮 DIB のデータ チャンクのフォーマットを次に示す。
Compressed DIB Bits '##dc' BYTE abBits[];
ビデオ データ チャンクは、AVI シーケンス内でパレットを更新するための新しいパレット エントリを定義することもできる。パレット情報の指定の詳細については、『Video for Windows Programmer's Guide』を参照すること。
テキスト ストリームには任意の 2 文字コードを使用できる。
BITMAPINFOHEADER 構造体には、AVI RIFF ファイルのビデオ ストリームに関する情報が含まれる。この構造体には以下のメンバが含まれる。
typedef struct tagBITMAPINFOHEADER { DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER;
biBitCount メンバの値が 8 より大きい値に設定された場合、ビデオ ドライバはビットマップがトゥルー カラーであるとみなすことができ、カラー テーブルを使用しない。
biBitCount メンバの値が 8 以下の値に設定された場合、ビデオ ドライバはビットマップが BITMAPINFO データ構造体に定義されたパレットまたはカラー テーブルを使用しているとみなすことができる。このデータ構造体は、以下のメンバを持つ。
typedef struct tagBITMAPINFO { BITMAPINFOHEADER bmiHeader; RGBQUAD bmiColors[1]; } BITMAPINFO;
BITMAPINFO の bmiheader メンバは、BITMAPINFOHEADER 構造体を指定する。BITMAPINFO の bmiColors メンバは、ビットマップ内の色を定義する RGBQUAD データ型の配列を指定する。
WAVEFORMATEX 構造体には、AVI RIFF ファイルのオーディオ データ ストリームに関する情報が含まれる。この構造体には以下のメンバが含まれる。
typedef struct waveformat_extended_tag { WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; } WAVEFORMATEX;
現在 DirectShow は、以下の AVI 2.0 ファイル フォーマット拡張をサポートしている。
『OpenDML AVI File Format Extensions』(OpenDML AVI M-JPEG File Format Subcommittee 編、1996 年 2 月 28 日) のバージョン 1.02 に記載された仕様を参照すること。