AVI 文件格式的 DV 数据

[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayerIMFMediaEngine媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

Microsoft 指定了在 AVI 文件中存储数字视频 (DV) 数据的格式。 符合此规范将确保以此格式创作的 AVI 文件与 Windowsplatform 的 DirectShow 数字视频体系结构的未来版本兼容。

本文介绍包含 DV 数据的 AVI 文件的格式。 定义交错 DV 数据流和 DV 压缩器/解压缩器流处理程序的特定 FOURC (四字符代码) 。 定义了 DV 数据的流格式结构。 指定了以 AVI 文件格式存储 DV 数据的两种方法的规范。

假定读者熟悉 DV 数据格式。 (此格式在 消费者使用的数字 VCR 规范(也称为蓝皮书)中定义)

有两种类型的 DV AVI 文件:包含一个 DV 数据流的 AVI 文件,称为 类型 1 文件;和包含 DV 视频作为“vids”流和 DV 音频作为“auds”流的 AVI 文件,称为 type-2 文件。

包含一个 DV 数据流的 AVI 文件 (类型 1)

交错 DV 数据可以以其本机格式作为单个流存储在 AVI RIFF 文件中。 这样做的优点是使用 DV 的最小数据存储量。 主要缺点是此文件格式与 Windows 视频不向后兼容,因为它不包含视频“vids”或音频“auds”流。 通过 DirectShow 提供的 DV 复用器和 DV拆分器 筛选器为交错 DV 流提供支持。

DV 数据可以存储在 AVI RIFF 文件中的单个流中,方法是指定“iavs” (交错音频和视频流) FOURCC (fccType 成员中的四个字符代码) ,以及“strh”流标头区块的 fccHandler 成员中的“dvsd”、“dvhd”或“dvsl”FOURC。 必须在 dwRatedwScale 成员中指定视频流的每秒帧数,以及 dwLength 成员中“movi”区块中的视频块总数。

“dvsd”流处理程序 FOURCC 指定 DV 数据是 使用者使用数字 VCR 规范的第 2 部分的定义。 视频的格式为 29.97 Hz 的 525 行 (525-60) 或 625 行(25.00 Hz (625-50) )。

“dvhd”流处理程序 FOURCC 指定 DV 数据与 使用者使用数字 VCR 规范第 3 部分的定义一样。 视频的格式为 1125 行,30.00 Hz (1125-60) 或 1250 Hz (1250-50) 。

“dvsl”流处理程序 FOURCC 指定 DV 数据与 使用者使用数字 VCR 规范第 6 部分的定义一样。 视频采用高压缩 SD (SDL) 格式。

备注

本文的其余部分提供了“dvsd”流的定义。

 

流标头区块必须后跟 DVINFO 流格式区块。

实际 DV 数据以“##dc”区块的形式存储在“movi”区块中, (格式的 ## 表示流标识符) 。 每个区块包含一个数据帧,分别包含 525-60 或 625-50 系统的 10 或 12 个 DV DIF 序列。 DV SD ('dvsd') DIF 序列格式在 消费者使用数字 VCR 规范的第 2 部分中定义。

以下示例显示了包含一个 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 视频的优点,因为它包含标准视频“vids”流和至少一个标准音频“aud”流。主要缺点是,此文件格式要求音频数据以冗余方式存储为音频流。 “视频”流实际上是本机交错 DV 数据流。 但是,作为处理程序类型为“dvsd”的标准“vids”流,使用 DV 视频解码器 。 此格式还需要使用 DV 拆分器 筛选器拆分“捕获”文件,然后再将其写入 AVI 文件。

DV 数据可以存储为视频流,在 AVI RIFF 文件中具有单独数量的音频流。 使用标准视频流标头指定视频流, (fccType 成员值为“vids”) 。 fccHandler 成员指定为“dvsd”、“dvhd”或“dvsl”。 必须在 dwRatedwScale 成员中指定视频流的每秒帧数,以及 dwLength 成员中“movi”区块中的视频块总数。

在此包含 DV 视频作为“vids”流和 DV 音频作为 DV 的“auds”流形式的 AVI 文件中,视频流格式区块是标准的 BITMAPINFOHEADER 结构。 可以选择性地扩展流格式区块以包括 DVINFO 区块,方法是将流格式区块大小从 40 字节 (BITMAPINFOHEADER 结构的大小) 增加到 72 字节, (BITMAPINFOHEADERDVINFO 结构) 紧跟在 BITMAPINFOHEADER数据结构 之后。

使用标准音频流标头指定音频流 () , (fccType 成员值为“auds”) 。 fccHandler 成员不用于音频流。

DV 视频数据存储为“##dc”区块,如前面对包含一个 DV 数据的 AVI 文件的说明所定义,音频数据存储为“movi”区块中的“##wb” 区块。

备注

某些语言和国家/地区可能不提供 消费者使用的数字 VCR 规范

 

下面的示例演示了包含 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)

AVI 文件格式