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 バイト (BITMAPINFOHEADERDVINFO 構造体のサイズ) に変更し、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)

参照