AVI RIFF 文件参考手册

高效AVI解码器设计与实战应用 AVI(Audio Video Interleaved)格式是由微软于1992年推出的一种多媒体容器格式,旨在实现音频与视频数据的同步播放。其采用RIFF(Resource Interchange File Format)结构组织数据,具有良好的可扩展性和跨平台兼容性。在数字视频发展的早期阶段,AVI因其结构清晰、易于解析而被广泛采用。然而,随着技术进步,MP4、MKV等现代容器格式凭借更高的压缩效率和更强的功能支持逐渐取代了AVI的主流地位。 阅读详情

转自: http://blog.youkuaiyun.com/njuitjf/archive/2010/06/19/5680639.aspx

微软的  AVI  文件格式是一种用于捕获、编辑和回放  audio-video  序列的  RIFF  文件规范。总体上讲,AVI  文件包含多个针对不同数据的流。 大部分  AVI  序列使用  audio  和  video  流。 一个简单的  AVI 序列特例可以只包含  video  数据而不包含  audio  数据。

本部分并没有介绍  OpenDML  对于  AVI  文件格式的扩展。如果要对其深入研究, 请参考  OpenDML AVI M-JPEG  文件格式小组委员会出版的《 OpenDML AVI File Format Extensions  》。

 

FOURCCs

 

一个  FOURCC( four-character code ,4 字符码) 是一个包含4 个ASCII 码字符串的32 位的无符号整型数据。例如, 在  Little-Endian  系统中,  FOURCC 'abcd'  表示为  0x64636261 。FOURCC 中也可以包含空格,如  ' abc'  也是一个有效的FOURCC 。  AVI  文件使用  FOURCC 码标示流的类型、数据chunk 、index 元素, 和其他的信息。

 

RIFF  文件格式

 

AVI  文件格式是基于  RIFF ( resource interchange file format )  文档格式的。一个  RIFF  文件包含一个RIFF  头, 以及其后的多个  list  和  chunk 。

  • RIFF  头的格式:

    ‘RIFF’+ 文件大小+ 文件类型+ (数据)

    'RIFF' 就是FOURCC 码'RIFF' 。文件大小是一个表示文件中数据大小的4 字节值。文件类型是一个FOURCC 码,表示文件类型。文件大小,包含的是文件类型以及其后数据的大小,不包含FOURCC 码'RIFF' 和文件大小本身所占的空间。

  • 块(chunk )的格式:

    ckID+ckSize+ckData

    其中,  ckID 是一个说明该chunk 中所包含的数据的FOURCC 码。szSize  是表示  ckData  中数据大小的4 字节数值。ckData 是0 个或多个字节的数据。数据总是填充到就近的WORD 边界。ckSize 表示的是chunk 中有效数据的大小,它不包括填充部分的大小,以及ckID 和ckSize 所占的空间。

  • List  格式:

    'LSIT'+listSize+listType+listData

    'LIST' 就是FOURCC 码'LIST' 。listSize 是表示list 大小的4 字节数值。listType 是一个FOURCC 码。listData 中是以任意顺序排列的多个list 和chunk 。listSize 包含的是listType 和listData 的大小,而不包含FOURCC 码'LIST' 和文件大小本身所占的空间。

 

本文的余下内容,将用以下符号表示  RIFF chunk :

ckID ( ckData ) 。

其中chunk 大小的概念比较模糊。使用以上符号,一个list 可以表示为:

'LIST' ( listType ( listData ) ) 。

可选成员被放到了方括号中:[ 可选成员]

 

AVI RIFF Form

 

AVI  文件在  RIFF  头中用  FOURCC  码 'AVI ' 标示。所有的 AVI 文件都被强制要求包含两个 LIST  类型的 chunk ,分别定义了 stream 的格式和 stream 的数据。一个 AVI 文件还可能包含一个 index chunk ,其中包含了数据 chunk 在文件中的位置。包含以上部分的 AVI 文件的格式为:

RIFF ('AVI '



LIST ('hdrl' ... )
LIST ('movi' ... )
['idx1' (<AVI Index>) ]
)
' hdrl ' list 定义了数据的格式,是第一个必须的 LIST chunk 。 'movi' list 包含了 AVI 序列中的数据,是第二个必须的 LIST chunk 。 'idx1'list 包含了 index 数据。这三部分在 AVI 文件中的顺序是特定的。
注意: OpenDML 扩展中定义了另外一种 index ,用 FOURCC 码 'indx' 进行标示。
'hdrl' list 和 'movi' list 用 subchunk 来表示它们的数据。 下面的例子列出了 AVI RIFF 文件的结构, 其中的 list 需要包含相应的 chunk 。
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>) ]
)
AVI Main Header
'hdrl' list 的开头部分是一个包含主 AVI header 的 'avih' chunk 。主 header 中包含了 AVI 文件的一些全局信息,如:文件中包含多少个流, AVI 序列的宽高等等。主 header chunk 的内容可以用结构体 AVIMAINHEADER 表示。
AVI Stread Headers
主 header 后面跟的是一个或多个 'strl' list 。每一个数据流都需要有一个 'strl' list 。每一个 'strl' list 都必须包含文件中一种流的信息,并且必须包含该流的 header chunk('strh') 和 format chunk('strf') 。另外,一个 'strl' list 还可能包含一个流的头数据 chunk ( 'strd' )和一个流的名称 chunk('strh') 。
流的 header chunk ('strh') 可以用结构体 AVISTREAMHEADER 表示。
流的 format chunk('strf') 一定要跟在 header chunk 的后面。 Format chunk 描述了流中数据的格式。 Format chunk 中包含什么数据,依赖于流的类型。对于 video 流,其中的数据是一个 BITMAPINFO 结构体,如果指定的话其中将包含一个调色板。对于 audio 流,其中的数据是一个 WAVEFORMATEX 结构体。
如果包含流的 header data chunk('strd') ,它将紧随在流的 format chunk('strf') 之后。其格式已经包含的内容由 codec driver 来定义。通常情况下, drivers 使用其中的数据作为配置信息。读或者写 AVI 文件的应用程序不需要解释这些信息,只需要作为一个内存块,传给 driver ,或者从 driver 处获取。
可选的 'strn'chunk 包含一个描述流的,以空字符为结尾的文本字符串。
'hdrl'list 中流的头信息,按照其中 'strl'chunk 的顺序,与 'movi'list 中的流数据关联起来。其中,第一个 'strl'chunk 表示 stream 0 ,第二个表示 stream 1 ,以此类推。
Stream Data ( 'movi' list )
头信息的后面,是一个包含流的真实数据的 'movi'list ,这些数据包括视频帧、音频采样等。数据 chunk 可以直接作为成员,存在于 'movi'list 中,也可以组成一个 'rec 'list ,整体作为一个成员,存在于 'movi'list 中。一个 'rec 'list 中包含的所有的 chunk ,应该一次从磁盘中读入到内存,这样是为了那些从磁盘交错播放的文件。
一个数据 chunk 的 FOURCC 码,前两个字节的数字信息,用来说明该 chunk 属于哪个流;后两个字节的字符信息,说明该 chunk 中数据的类型。

Two-character code

Description

db

Uncompressed video frame

dc

Compressed video frame

pc

Palette change

wb

Audio data

例如,如果


stream 0 


包含的是


audio


, 该流的


data chunk


将含有


FOURCC


码


'00wb'


;


stream 1


包含的是


video


,该流的


data chunk 


将包含


FOURCC


码


'01db'


或者


'01dc'


。


Video 


的


data chunk


还可以在


AVI


序列中定义一个新的调色板条目。没一个 改变调色板(


palette-change


)的


chunk( 'xxpc' )


包含一个


AVIPALCHANGE


的结构体。如果一个流包含有调色板变更,该流的


AVISTREAMHEADER


结构体


( strh )


中的成员


deFlags


会被设置


AVISF_VIDEO_PALCHANGES 


标志。



文本流可以使用其他任意两个字符的编码。
AVI Index Entries
可选的 index chunk('idx1') 可以跟在 'movi'list 的后面。 index 包含了一个数据 chunk 和它们在文件中位置的列表 (list) 。它包含一个 AVIOLDINDEX 结构体,其中有针对每个数据 chunk 的条目,也包括 'rec 'chunk 。如果文件包含了 index , AVIMAINHEADER 结构体 ( 'avih' ) 中的成员 dwFlags 需要被设置 AVIF_HASINDEX 标志。
Other Data Chunks
如果需要,可以在数据中插入 'JUNK'chunk 。应用程序应该忽略 'JUNK'chunk 所包含的内容。
=============================== 相关结构体 ========================================
----------------AVIMAINHEADER 结构体 ------------------------

AVIMAINHEADER 结构体中定义了 AVI 文件的全局信息。

typedef struct _avimainheader {



FOURCC fcc;
DWORD cb;
DWORD dwMicroSecPerFrame;
DWORD dwMaxBytesPerSec;
DWORD dwPaddingGranularity;
DWORD dwFlags;
DWORD dwTotalFrames;
DWORD dwInitialFrames;
DWORD dwStreams;
DWORD dwSuggestedBufferSize;
DWORD dwWidth;
DWORD dwHeight;
DWORD dwReserved[4];
} AVIMAINHEADER;

fcc

FOURCC  码。此处必须为 'avih' 。

cb

结构体的大小,不包括开头 的8 字节。

dwMicroSecPerFrame

指定帧之间的微秒数。此值表明本文件的总时间。

dwMaxBytesPerSec

指定文件的近似最大数据速率。此值表明该系统每秒要处理的字节数,以表现一个AVI 序列,正如在main header  和  stream header chunks  中其他参数指所指定的字节数。

dwPaddingGranularity

规定以字节为单位的数据对齐。将数据以该值的整数倍进行对齐。

dwFlags

包含0 个或多个一下标志的按位组合:

Value

Description

AVIF_COPYRIGHTED

表明AVI 文件包含了版权数据和软件。如果设置了改标志,将不允许软件对该数据进行拷贝。

AVIF_HASINDEX

表明AVI 文件包含一个index 。

AVIF_ISINTERLEAVED

表明AVI 文件是交叉的。

AVIF_MUSTUSEINDEX

表明应用程序需要使用index ,而不是物理上的顺序,来定义数据的展现顺序。例如,该标志可以用于创建一个编辑用的帧列表。

AVIF_WASCAPTUREFILE

表明该文件是一个用于捕获实时视频的,而特别分配的AVI  文件。如果一个文件设置了该标志,在用户写该文件之前,应用程序应该发出警告,因为用户可能会对该文件进行碎片整理。

 

AVIF_COPYRIGHTED

0x00020000

AVIF_HASINDEX

0x00000010

AVIF_ISINTERLEAVED

0x00000100

AVIF_MUSTUSEINDEX

0x00000020

AVIF_WASCAPTUREFILE

0x00010000

TRUSTCKTYPE

0x00000800

 

dwTotalFrames

指定本文件中包含的帧数据的总数。也就是指定文件中总共包含多少帧。

dwInitialFrames

指定交错文件中的初始帧。非交错文件,该参数应该被设置为0 。如果你正在创建一个交错文件,在该参数中指定文件中,AVI 文件的初始帧之前,帧的数量,即文件中在初始帧前面还有多少帧。

为了让音频驱动有足够的音频去处理,交错文件中的音频数据必须与视频数据有一定的偏移。通常情况下,音频数据必须前移足够的帧,以使大约 0.75 秒的音频数据被预装。应该将音频数据中偏移的帧数设置到成员 dwInitialRecords (未找到该成员,怀疑应该是 dwInitialFrames )。音频流 header 的结构体 AVISTREAMHEADER 的 dwInitialFrames  成员,应该被设置为同样的值。

dwStreams

指定文件中包含的流的数量。例如,一个包含视频和音频数据的文件有两个流。

dwSuggestedBufferSize

指定读该文件用的建议的缓存大小。一般来说,该大小要足以包含文件中最大的数据块(chunk )。如果该成员被设置为0 ,或者太小,播放软件在播放时就需要重新分配内容,这将导致性能的下降。对于一个交叉文件,该缓存大小应该足以读取一整条记录(在movi list 中,有的数据以chunk 的形式存在,有的数据以record 即记录的形式存在,一个record  是多个chunk 的组合),而不是一个chunk 。

dwWidth

指定该AVI 文件的宽,以像素为单位。

dwHeight

指定该AVI 文件的高,以像素为单位。

dwReserved

保留,设置为0 。

Requirements

Header:   Aviriff.h.

----------------AVISTREAMHEADER


结构体


------------------------


AVISTREAMHEADER 结构体包含了 AVI 文件中一个流的相关信息。

Syntax

typedef struct _avistreamheader {


FOURCC fcc;
DWORD cb;
FOURCC fccType;
FOURCC fccHandler;
DWORD dwFlags;
WORD wPriority;
WORD wLanguage;
DWORD dwInitialFrames;
DWORD dwScale;
DWORD dwRate;
DWORD dwStart;
DWORD dwLength;
DWORD dwSuggestedBufferSize;
DWORD dwQuality;
DWORD dwSampleSize;
struct {
short int left;
short int top;
short int right;
short int bottom;
} rcFrame;
} AVISTREAMHEADER;

Members

fcc

指定一个FOURCC 码,此处必须为'strh' 。

cb

指定结构体的大小,不包含开头的 8 字节,即 fcc 和 cb 所占的空间。

fccType

包含一个标识流中数据类型的FOURCC 码。针对视频和音频,标准的AVI 值定义如下:

FOURCC

Description

'auds'

Audio stream

'mids'

MIDI stream

'txts'

Text stream

'vids'

Video stream

 

fccHandler

该成员是可选的,包含了一个FOURCC 码,用于标识一个特定的数据处理程序。该数据处理程序是该流的首选数据处理程序。对于视频流和音频流来说,这是一个解码流时用的编解码器。

dwFlags

包含数据流的所有标志。这些标志的高位序字,具体到流中包含的数据类型(意思应该是,这些标志的高位,说明了流的类型)。标准标志定义如下:

AVISF_DISABLED

表明该流默认情况下不被启用。

AVISF_VIDEO_PALCHANGES

表明该流中包含调色板变换。该标志提示播放软件,它需要可变的调试板。

 

wPriority

指定一种流的优先级。例如,一个文件中包含了多个音频流,其中优先级最高的可能会是默认的流。

wLanguage

Language tag.

dwInitialFrames

指定在交叉文件中,音频流相对于视频流要向前偏移多少。通常情况下,是大约 0.75 秒。如果你正在创建交叉文件,在该成员中指定文件中, AVI 序列的初始帧之前,帧的数量。详细信息,请参考 AVIMAINHEADER 结构体中  dwInitialFrames   成员。

dwScale

与  dwRate   一起,决定该流所要使用的时间尺度。用 dwScale  去除 dwRate  ,得到一秒钟样本的数量。对于视频流,这就是帧率 ( fram rate ) 。对于音频流,这个频率相当于播放 nBlockAlign  个字节的音频需要的时间,对于 PCM 音频,它只是采样率。

dwRate

参考 dwScale .

dwStart

指定这个流开始的时间。其单位有主文件头中的 dwRate  和 dwScale  成员定义(即其单位是 dwRate/dwScale )。通常, dwStart 是 0 ,但是它也可以为不与文件同时启动的流定义一个时间延迟。

dwLength

指定这个流的长度。单位由流的头信息中的 dwRate  和 dwScale  来确定(即其单位是 dwRate/dwScale )。(对于视频流, dwLength 就是流包含的总帧数;对于音频流, dwLength 就是包含的 block 的数量, block 是音频解码器能处理的原子单位)。 dwLength/(dwRate/dwScale) ,即 dwLength * dwScale / dwRate ,可以得到流的总时长。

dwSuggestedBufferSize

指定读该流时需要的缓存的大小。通常情况下,这是一个与该流中最大的chunk 的大小相对应的值。使用准确的缓存大小,可以提高播放器的性能。如果你不知道准确的缓存大小,可以设置为0 。

dwQuality

指定一个流数据的质量指标。该指标是一个0 到10,000 的数值。对于压缩数据,这通常是一个作为质量参数值传给压缩软件的数值。如果该值为-1 ,驱动将使用默认的质量值。

dwSampleSize

指定 一个数据样本的大小。如果样本的大小可变,该成员将被设置为 0 。如果该值为非 0 ,该文件中的多个样本可以组成一个信号 chunk 。如果该值为 0 ,数据中的每个样本(例如,一个视频帧)必须放在一个单独的 chunk 中。对于视频流,该数值通常为 0 ,虽然当所有的视频帧都具有相同的大小时,它也可以为非 0 。对于音频流,该数值应该和结构体 WAVEFORMATEX 中的成员 nBlockAlign 一致。

rcFrame

指定一个在由 AVI 主头结构中的 dwWidth  成员和 dwHeight  成员决定的电影矩形中,文本流或视频流的目标矩形。 rcFrame  成员通常用于支持多个视频流。将该矩形设置为与电影矩形对应的坐标,以更新整个电影矩形。该成员的单位是像素。目标矩形的左上角与电影矩形的左上角关联。

Remarks

该结构体的部分成员在结构体AVIMAINHEADER 中也存在。AVIMAINHEADER 中的数据是针对整个文件的,AVISTREAMHEADER 中的数据是针对单个流的。

Requirements

Header:   Aviriff.h.

----------------BITMAPINFO


结构体


------------------------



BITMAPINFO 结构体定义了一个基于 windows 的 DIB( device-independent bitmap) 的尺寸和颜色信息。

Syntax

typedef struct tagBITMAPINFO { 

BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;
Members
bmiHeader
指定一个包含尺寸和颜色格式信息的位图信息头结构体。使用 BITMAPINFOHEADER 结构体。
bmiColors
包含下列之一:
  • 一个 RGBQUAD 结构体的数组。其成员构成颜色表。
  • 一个指定当前实现了的逻辑调色板中 的索引的 16 位无符号整型。
    使用 DIB 的函数允许使用 bmiColors  的这种用法。如果 bmiColors  包含了一个已实现的逻辑调色板的索引,它们必须调用如下的位图函数: CreateDIBPatternBrushPt 和  CreateDIBSection 。 CreateDIBSection  函数的参数 iUsage  必须被设置为 DIB_PAL_COLORS  。
    其中条目的个数依赖于 BITMAPINFOHEADER  结构体中的 biBitCount  和 biClrUsed 成员。
    bmiColors  表中的颜色按重要性进行排列。详细信息,请参考: Remarks 。
  • 如果 bmiHeader.biCompression  被设置为了 BI_RGB  ,你可以将 bmiColors  数组的大小设置为 0 。
Remarks

一个设备无关的位图包含两个不同的部分:一个描述位图尺寸和颜色的BITMAPINFO 结构体,和一个定义位图像素的字节数组。数组中的数据排列在一起,但是必须用0 将每个扫描行与LONG 类型边界对齐。

如果位图的高是正数,则该位图是一个自下而上的DIP ,并且它是以左下角起始的。

如果位图的高是负数,则该位图是一个自上而下的DIP ,并且它是以左上角起始的。

当一个位图紧跟在 BITMAPINFO  之后时,该位图将被打包。打包的位图通过一个指针进行引用。

对于打包位图,当使用 DIB_PAL_COLORS  模式时, BITMAPINFOHEADER  结构体的 ClrUsed  必须被设置为一个偶数,这样 DIB 位图数组将从 DWORD 边界上开始。

如果一个位图保存在文件中,或者将要传送给其他应用程序, bmiColors  成员不应该保护调色板索引。

位图的颜色表应保护明确的RGB 数值,除非这个应用程序独占使用和控制该位图。

Security Note    包括无效格式描述的普通级别的错误,可以在内容(哪儿?)中找到。例如,颜色表可以跟在 BITMAPINFOHEADER  结构体后面。

BITMAPINFO  结构体由一个 BITMAPINFOHEADER  结构体以及一个跟在其后面的 RGBQUAD  数值数组构成。数组的大小由 BITMAPINFOHEADER 结构体的成员 biClrUsed  决定。

在验证分配给 BITMAPINFO  结构体的 buffer 的大小之前,不要将一个颜色表拷贝到 BITMAPINFO  结构体。

Requirements

OS Versions:   Windows CE 1.0 and later.
Header:   Windows.h.

----------------BITMAPINFOHEADER


结构体


------------------------



(以下的解释来自: http://msdn.microsoft.com/en-us/library/dd183376(VS.85).aspx 。后面还会有一个对该结构体的说明,与此稍有不同。)
该结构体包含了一个 DIB(device-independent bitmap) 尺寸和颜色个数的信息。

Syntax


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;

Members

biSize
指定结构体的大小,以字节为单位。
该大小不包含 biClrUsed  成员中提到的颜色表或者屏蔽位的大小。
详细请参考 Remarks  。
biWidth
指定位图的宽,以像素为单位。
biHeight
指定位图的高,以像素为单位。
如果 biHeight  为 正值,则该位图是一个自下而上的 DIB ,并且它从左下角开始。
如果 biHeight  为 负值,则该位图是一个自上而下的 DIB ,并且它从左上角开始。
如果 biHeight  为 负值,表明了一个自上而下的 DIB ,此时, biCompression  必须被设置为 BI_RGB  或者  BI_BITFIELDS 。自上而下的 DIB 不能被压缩。
biPlanes
指定目标设备平面层( plane )的个数。
该值必须被设置为 1 。
biBitCount
指定一个像素所占的位数。
BITMAPINFOHEADER   结构体的 biBitCount  成员决定了一个像素占几个位,以及位图中包含的最大的颜色数。
该成员只能包含一个如下的值:

Value

Description

1

说明该位图是一个黑白的, bmiColors  成员包含两个条目。

在该位图中,每一位代表一个像素。

如果该位为 0 , 则该像素用 bmiColors  表中的第一个条目中的颜色进行显示。

如果该位为 1 , 则该像素用 bmiColors  表中的第二个条目中的颜色进行显示。

2

位图可以有4 种颜色值。

4

位图最大可以有 16 种颜色, bmiColors  成员包含 16 个条目。

位图中的每一个像素,由颜色表中的一个4 位的索引进行表示。

例如,如果位图中的第一个字节为  0x1F ,该字节表示两个像素。第一个像素包含表中的第二个条目的颜色,第二个像素包含表中第16 个条目的颜色。

8

位图最大可以有 256 种颜色, bmiColors  成员包含 256 个条目。在这种情况下,数组中的每一个字节标示一个像素。

16

位图最大可以有2^16  种颜色。

如果 BITMAPINFOHEADER  结构体的 biCompression  成员为 BI_RGB  ,则 bmiColors  成员 NULL  。

该位图中,每一个字代表一个像素。红色,绿色和蓝色的相对强度,由每个颜色组件的5 个位来表示。

对应蓝色的值,在最低的5 个位,其后是分别对应绿色和红色的各5 位。

最高的一位没有使用。 bmiColors  颜色表用于优化基于调色板设备的颜色,并且必须包含 BITMAPINFOHEADER  结构体的 biClrUsed  成员指定的条目的个数。

24

位图最大可以有 2^24  种颜色,并且 bmiColors  成员为 NULL 。

位图数组中的每三个字节,表示一个像素中蓝色,绿色和红色的相对强度。

bmiColors  颜色表用于优化基于调色板设备的颜色,并且必须包含 BITMAPINFOHEADER 结构体的 biClrUsed  成员指定的条目的个数。

32

位图最大可以有 2^32  种颜色。如果结构体 BITMAPINFOHEADER  的成员 biCompression 为 BI_RGB  ,则成员 bmiColors  为 NULL 。位图数组中的一个 DWORD  代表一个像素中蓝色,绿色和红色的相对强度。 DWORD  中的最高一个字节没有使用。 bmiColors  颜色表用于优化基于调色板设备的颜色,并且必须包含 BITMAPINFOHEADER  结构体的 biClrUsed 成员指定的条目的个数。

如果结构体 BITMAPINFOHEADER  的成员 biCompression  为  BI_BITFIELDS ,成员 bmiColors  包含三个 DWORD  颜色掩码,分别用于指定一个像素中的红色,绿色和蓝色。

位图数组中的一个 DWORD  代表一个像素。



biCompression
指定一个压缩的自下而上的位图(自上而下的 DIB 不能被压缩)的压缩类型。该成员可以包含一个如下的值:

Value

Description

BI_RGB

一个未压缩的格式。

BI_BITFIELDS

指定该位图没有被压缩,并且颜色表中包含三个 DWORD  颜色掩码,分别用于指定一个像素中的红色,绿色和蓝色。

该值对16-  和  32-bpp  位图有效。

该值对WinCE 2.0 及以后版本有效。

BI_ALPHABITFIELDS

指定该位图没有被压缩,并且颜色表中包含三个 DWORD  颜色掩码,分别用于指定一个像素中的红色,绿色,蓝色和 alpha 组件。

该值对16-  和  32-bpp  位图有效。

该值对WinCE 4.0 及以后版本有效。



你可以将上表中的任何一个值与 BI_SRCPREROTATE  进行或,以指定源 DIB 部分与目标部分有相同的转角。
biSizeImage
指定 image 的大小,以 size 为单位。
对于 BI_RGB  位图,该值可以设置为 0 。
biXPelsPerMeter
以每米中包含的像素的个数为单位,指定目标设备中对于位图的水平分辨率。
应用程序可以使用该值,从源组中选择一个最佳匹配当前设备特性的位图。
biYPelsPerMeter
以每米中包含的像素的个数为单位,指定目标设备中对于位图的垂直分辨率。
biClrUsed
指定颜色表中,位图真正使用的颜色索引的个数。
如果该值为 0 , 位图使用成员 biCompression  指定的压缩模式需要的,与成员 biBitCount  相应的最大的颜色数。
如果该值为非 0 , 并且成员 biBitCount  小于 16 , 成员 biClrUsed  指定图像引擎或者设备驱动真正使用的颜色数。
如果成员 biBitCount  大于 16 , 成员 biClrUsed  指定用于优化系统调色板性能的颜色表的大小。
如果成员 biBitCount  <span sty

OpenDML AVI File Format Extensions 立即下载

相关推荐

.avi文件的格式说明

我在实际编程中遇到需要在avi stream创建后修改帧速的需求,但已经查到这个任务无法通过vfw函数族实现,而必须手工解析avi文件。这里即是avi文件的结构简介。

AVI文件格式-文件总格式

 这一系列的文章都是从MSDN上拷贝出来的,先记到这里,后面会一步步把它翻译出来的。由于本人英语水平有限,翻译的可能不完全正确,请各位注意。 AVI RIFF 文件 参考This is preliminary documentation and subject to change. (The Microsoft AVI file format is a RIFF file

jszj的专栏 4117

用Arduino和8个舵机,从零搭建一台能走路的并联腿机器狗(附完整代码与3D模型)

本文详细介绍了如何用Arduino和8个舵机从零搭建一台能走路的并联腿机器狗,包括硬件准备、结构组装、电路系统搭建、运动算法实现和Arduino编程。通过完整的代码与3D模型,帮助创客深入理解机器人运动原理,实现稳健行走的8自由度机器狗。

weixin_30482383的博客 701

AVI音视频封装格式学习(二)——AVI RIFF文件参考

AVI RIFF文件参考 AVI RIFF File Reference 微软AVI文件格式是与捕获,编辑和播放音视频流的应用程序一起使用的RIFF文件规范。通常,AVI文件包含多个不同类型的数据流。大多数AVI文件同时使用音频和视频流。简单的AVI文件只包含视频数据,不包含音频数据。 本节不描述AVI的扩展格式(OpenDML AVI file format extensio...

Biao 5176

2019年数学建模美赛经验总结

北京时间2019年1月29号上午9时,数模美赛结束。美赛结束已经10多天了,我在这次竞赛中负责建模和编程,趁现在记忆还比较清晰,写下这篇博客记录第一次参加数学建模美赛的经历。 补更:2019年4月20日公布成绩,笔者最终获得了美赛一等奖 目录 1、基本情况 2、选题 3、分工合作 4、论文写作 5、建模 6、编程 7、入门资源 ...

Smallactive 7万+

Python自动化神器:OP插件64位版从安装到实战(附雷电模拟器截图技巧)

本文详细介绍了Python自动化神器OP插件64位版的安装与实战应用,包括环境搭建、窗口控制、鼠标键盘模拟等核心功能。特别针对雷电模拟器提供了最小化截图技术和OCR识别优化方案,帮助开发者高效实现Windows自动化任务。

weixin_29094539的博客 331

AVI文件格式

小知识:AVI文件格式----摘自《DirectShow实务精选》 作者:陆其明 AVI(Audio Video Interleaved的缩写)是一种RIFF(Resource Interchange File Format的缩写)文件格式,多用于音视频捕捉、编辑、回放等应用程序中。通常情况下,一个AVI文件可以包含多个不同类型的媒体流(典型的情况下有一个音频流和一个视频流),不过含有单...

我是传奇 671

IDEA中Maven工具栏与命令执行全攻略:高效开发必备技巧

IntelliJ IDEA 作为强大的 Java 开发工具,其 Maven 功能独具优势。Maven 工具栏位于工作区右侧,图标功能丰富,涵盖项目导入、源码处理、依赖操作等。执行 Maven 命令有多种途径,Run Anything 窗口可输入或选目标执行,上下文菜单能右键运行目标,还可创建运行配置,指定命令参数后运行,为开发者高效管理 Maven 项目、便捷执行命令提供有力支持。

2301_82300081的博客 2029

嵌入式软件调试技术 读书笔记

第一章 软件调试概述 第二章 边界扫描测试技术 (JTAG) 第三章 学习使用GDB调试器 第四章 GDB远程调试技术 第五章 网络应用程序调试 第六章 多进程与多线程调试 第七章 静态库与动态库的调试 第八章 MPEG-4视频播放器的设计与调试 第九章 基于GPS的移动定位终端 参考文献 边界扫描测试技术 TIPS: 1. TRST为什么是可选信号呢? 因为通过TMS也

博学而笃志 5314

AT32串口打印全攻略:从零搭建到printf重定向(GCC版)

本文详细介绍了在GCC编译环境下为AT32系列MCU实现串口打印与printf重定向的完整方案。针对从Keil MDK迁移到GCC工具链时常见的串口无输出问题,文章从环境搭建、USART配置入手,重点剖析了GCC下printf重定向的核心原理——通过重写_write()函数,并提供了经过验证的代码实现、常见问题排查及性能优化建议。

weixin_29163797的博客 264

MATLAB基础应用精讲-【数模应用】数字预失真(DPD)(附MATLAB代码实现)

近年来,随着无线通信技术的发展,高功率放大器 (PA) 在提高信号传输功率的同时,也带来了非线性失真问题。PA的非线性失真会造成信号频谱扩展、功率下降、邻道干扰等问题,严重影响系统性能。为了克服PA的非线性失真,数字预失真 (DPD) 技术应运而生。DPD技术通过在发射机中引入一个非线性模块,对信号进行预失真处理,从而补偿PA的非线性失真。

qq_36130719的博客 896

AVI中AVISTREAMINFO结构中的dwScale,dwRate到底有什么分别呀,应该怎么理解?

 msdn上说dwRate/dwScale才是播放速率。     视频中每秒播放的帧数可能不是整数,比如可能是29.97等,     注意到在AVISTREAMINFO结构中,所以属性都是整型变量表示的,所以小数只能     用两个整数相除得到,这样就需要用两个整数(dwRate和dwScale)来得到播放速率。     比如速率是29.97,那么可以用dwRate=2997,dwScale=10

a_1984的专栏 1573

Python爬虫实战:逆向解析天猫商品详情API,精准捕获规格、SKU与促销活动

及浏览器开发者工具),绕过前端渲染的复杂性,直接逆向分析并调用其内部数据接口,从而高效、稳定地抓取商品的关键信息,包括商品规格、多维度SKU信息以及复杂的促销活动。print(f"SKU ID: {sku.sku_id}, 价格: ¥{sku.price}, 库存: {sku.stock}, 规格: {sku.props}")当你访问一个商品链接时,浏览器首先会加载一个几乎为空的HTML骨架,然后通过执行大量的JavaScript代码,向后台服务器发起多个异步请求,最终将获取到的数据填充到页面中。

2201_76125261的博客 1129

avi格式媒体文件介绍

AVI英文全称为Audio Video Interleaved,即音频视频交错格式。是将语音和影像同步组合在一起的文件格式。它对视频文件采用了一种有损压缩方式,但压缩比较高,因此尽管画面质量不是太好,但其应用范围仍然非常广泛。AVI支持256色和RLE压缩。AVI信息主要应用在多媒体光盘上,用来保存电视、电影等各种影像信息。           avi含三部分:文件头、数据块和索引块。

铁匠Smith先生的专栏 2852

UG\NX二次开发 替换部件引用集UF_ASSEM_replace_refset

替换部件引用集UF_ASSEM_replace_refset,需要替换成“完整部件(Entire Part)”需要第三个参数传入空指针或者空字符串。

王牌飞行员_里海的博客 253

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

AVI音视频封装格式学习(一)——微软RIFF文件格式摘要

微软RIFF文件格式摘要:RIFF File Format Summary 名称解析: RIFF Resource Interchange File Format 资源交换文件格式 TIFF Tag Image File Format 用途: RIFF是微软Windows系统本机的设备控制接口和通用文件格式。它主要用来存储多媒体应用中的音...

Biao 3231

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

AVI文件格式详解

AVI是音频视频交错(Audio Video Interleaved)的英文缩写,它是Microsoft公司开发的一种符合RIFF文件规范的数字音频与视频文件格式,原先用于Microsoft Video Windows(简称VFW)环境,现在已被Windows95/98,OS/2等多数操作系统直接支持。AVI格式允许视频和音频交错在一起同步播放,支持256色和RLE压缩,但AVI文件并未限定压缩标

ykizz的博客 3万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

avi 文件格式解析

http://blog.sina.com.cn/s/blog_6ca8ed170100qlhw.html AVI:Audio/Video Interleaved(视音频交织),用于采集、编辑、播放的RIFF文件。由Microsoft公司1922年11月推出,用于对抗苹果Quicktime技术,AVI现在还在被广泛使用。 RIFF:Resource Interchange File Format

lxmnet123的专栏 9966

录制avi文件(一)——avi文件的结构

首先,我们回顾一下avi文件的文件结构。下图就是一个典型的avi文件的文件结构图。 以我们录制的一个avi文件为例,其RIFF Tree结构为: RIFF AVI        84,532,876              0   LIST hdrl              292             12     avih                    56

xulei_106的专栏 2852

AVI文件头格式浅析-计算音视频播放时长

因为需要计算一个AVI文件的播放时间所以看一下AVI文件头所包涵的信息   下面一个结构框图   "avih"子块: typedefstruct_avimainheader{   FOURCC fcc;//必须为‘avih’   DWORD cb;//本数据结构的大小,不包括最初的8个字节(fcc和cb两个域)structsize   DWORD dwMicroSecPerFr

vidsec的专栏 2623
上一篇: AVI文件格式-WAVEFORMATEX
jaylin2013
博客等级 码龄16年 12粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值