AVI ファイル形式の DV データ
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
Microsoft は、AVI ファイル内のデジタル ビデオ (DV) データの保存形式を指定しました。 この仕様に準拠すると、この形式で作成された AVI ファイルは、Windowsplatform 用の DirectShow デジタル ビデオ アーキテクチャの将来のバージョンと互換性が確保されます。
この記事では、DV データを含む AVI ファイルの形式について説明します。 インターリーブ DV データ ストリームおよび DV 圧縮/圧縮解除ストリーム ハンドラー用の特定の FOURCC (4 文字コード) が定義されています。 DV データのストリーム形式構造が定義されています。 DV データを AVI ファイル形式で格納する 2 つの方法の仕様が指定されています。
リーダーは DV データ形式に精通していることを前提としています。 (この形式は、 コンシューマー向けデジタル VCR の仕様 (ブルー ブックとも呼ばれます) で定義されています)。
DV AVIファイルには、タイプ1ファイルと呼ばれる1つのDVデータストリームを含むAVIファイルの 2種類 があります。と AVI ファイルは、DV ビデオを "vids" ストリームとして含み、DV オーディオを "auds" ストリームとして含み、 type-2 ファイルと呼ばれます。
1 つの DV データ ストリームを含む AVI ファイル (Type-1)
インターリーブ DV データは、AVI RIFF ファイル内の 1 つのストリームとしてネイティブ形式で格納できます。 これには、DV に最小量のデータ ストレージを使用する利点があります。 主な欠点は、ビデオ 'vids' またはオーディオ "auds" ストリームが含まれていないため、このファイル形式は Video for Windows と下位互換性がないことです。 DirectShow で提供される DV Muxer フィルターと DV スプリッター フィルターを介したインターリーブ DV ストリームのサポートが提供されます。
DV データは、 FCCType メンバーの 'iavs' (インターリーブオーディオおよびビデオ ストリーム) FOURCC (4 文字コード) と、'strh' ストリーム ヘッダー チャンクの fccHandler メンバーの 'dvsd'、'dvhd'、または 'dvsl' FOURCC のいずれかを指定することで、AVI RIFF ファイル内の 1 つのストリームに格納できます。 ビデオ ストリームの 1 秒あたりのフレーム数は 、dwRate メンバーと dwScale メンバーで指定し、 dwLength メンバーの 'movi' チャンク内のビデオ ブロックの合計数を指定する必要があります。
"dvsd" ストリーム ハンドラー FOURCC は、DV データが コンシューマー向けデジタル VCR の仕様のパート 2 で定義されているように指定します。 ビデオは、29.97 Hz (525-60) の場合は 525 行、25.00 Hz (625-50) では 625 行の形式です。
"dvhd" ストリーム ハンドラー FOURCC は、DV データが コンシューマー向けデジタル VCR の仕様のパート 3 で定義されているように指定します。 ビデオは、30.00 Hz (1125-60) の場合は 1125 行、25.00 Hz (1250-50) では 1250 行の形式です。
"dvsl" ストリーム ハンドラー FOURCC は、DV データが コンシューマー向けデジタル VCR の仕様のパート 6 で定義されているように指定します。 ビデオは、高圧縮 SD (SDL) の形式です。
注意
この記事の残りの部分では、"dvsd" ストリームの定義を示します。
ストリーム ヘッダー チャンクの後には 、DVINFO ストリーム形式のチャンクが続く必要があります。
実際の DV データは、'##dc' チャンクとして 'movi' チャンクに格納されます (形式の ## はストリーム識別子を表します)。 各チャンクには、それぞれ 525-60 または 625-50 システムの 10 または 12 DV DIF シーケンスの 1 フレームのデータが含まれます。 DV SD ('dvsd') DIF シーケンス形式は、 コンシューマー向けデジタル VCR の仕様のパート 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ファイル(タイプ2)
インターリーブ DV データは、AVI RIFF ファイル内のビデオ ストリームと 1 から 4 つのオーディオ ストリームに分割できます。 これは、Windows 用 Video と下位互換性がある利点があります。これは、標準のビデオ "vids" ストリームと少なくとも 1 つの標準オーディオ "auds" ストリームが含まれているためです。主な欠点は、このファイル形式ではオーディオ データをオーディオ ストリームとして冗長に格納する必要があることです。 "ビデオ" ストリームは、実際にはネイティブインターリーブ DV データ ストリームです。 ただし、ハンドラーの種類が "dvsd" の標準の "vids" ストリームとして、 DV ビデオ デコーダー が使用されます。 この形式では、 DV スプリッター フィルターを使用して、AVI ファイルとして書き込む前に、"キャプチャされた" ファイルを分割する必要もあります。
DV データは、AVI RIFF ファイルに個別の数のオーディオ ストリームを含むビデオ ストリームとして格納できます。 ビデオ ストリームは、標準のビデオ ストリーム ヘッダーで指定されます ( fccType メンバー値は 'vids' です)。 fccHandler メンバーは、'dvsd'、'dvhd'、または 'dvsl' として指定されます。 ビデオ ストリームの 1 秒あたりのフレーム数は 、dwRate メンバーと dwScale メンバーで指定し、 dwLength メンバーの 'movi' チャンク内のビデオ ブロックの合計数を指定する必要があります。
DV ビデオを "vids" ストリームとして、DV オーディオを "auds" ストリーム形式の DV 形式として含むこの AVI ファイルでは、ビデオ ストリーム形式チャンクは標準 の BITMAPINFOHEADER 構造です。 ストリーム形式チャンクは、ストリーム形式チャンク サイズを 40 バイト (BITMAPINFOHEADER 構造体のサイズ) から 72 バイト (BITMAPINFOHEADER と DVINFO 構造体のサイズ) に増やし、DVINFO データ構造を持つ BITMAPINFOHEADER データ構造の直後に拡張することで、必要に応じて DVINFO チャンクを含むように拡張できます。
オーディオ ストリームは、標準のオーディオ ストリーム ヘッダーで指定されます ( fccType メンバー値は 'auds' です)。 fccHandler メンバーは、オーディオ ストリームには使用されません。
DV ビデオ データは、1 つの DV データを含む AVI ファイルの前述の説明で定義されているように、'##dc' チャンクとして格納され、オーディオ データは '##wb' チャンクとして 'movi' チャンクに格納されます。
注意
コンシューマー向けデジタル VCR の仕様は、一部の言語や国では使用できない場合があります。
次の例は、"vids" ストリームとして DV ビデオを含む AVI ファイルの AIFF RIFF フォームと、完成したヘッダー チャンクで展開された "auds" ストリームとしての DV オーディオ ('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)
関連トピック