AVI ファイル フォーマットの DV データ
Microsoft はデジタル ビデオ (DV) データを AVI ファイルに保存するためのフォーマットを指定している。この仕様に従うことで、このフォーマットで作成された AVI ファイルは Microsoft® Windows® プラットフォーム用の Microsoft® DirectShow® デジタル ビデオ アーキテクチャの将来のバージョンに対して互換性を持つことが保証される。
ここでは、DV データを含む AVI ファイルのフォーマットについても説明する。インターリーブされた DV データ ストリームおよび DV コンプレッサ/デコンプレッサ ストリーム ハンドラ用の特定の FOURCC (4 文字コード) を定義し、DV データのストリーム フォーマット構造体を定義する。また、AVI ファイル フォーマットに DV データを格納するための 2 つの方法の仕様についても説明する。
このトピックは、読者が DV データ フォーマットについてある程度理解していることを前提として書かれている。このフォーマットについては、『Specification of Consumer-use Digital VCRs』(Blue Book とも呼ばれる) に定義されている。
DV AVI ファイルには次の 2 つのタイプがある。1 つの DV データ ストリームを含む AVI ファイル (type-1 と呼ばれるファイル) と、DV ビデオを 'vids' ストリームとして含み、DV オーディオを 'auds' ストリームとして含む AVI ファイル (type-2 と呼ばれるファイル) である。
1 つの DV データ ストリームを含む AVI ファイル (Type-1)
インターリーブされた 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 ストリーム フォーマット チャンクが続く。
実際の 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 ファイルの 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 ビデオ ストリームと DV オーディオ ストリームを含む AVI ファイル (Type-2)
インターリーブされた 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 ファイルの 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)
参照