第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 第三周 AVI MP4 WAV文件格式

第三周 AVI MP4 WAV文件格式

时间:2023-02-28 02:26:10

相关推荐

第三周 AVI MP4 WAV文件格式

一、AVI文件

打开一个AVI文件,其音频数据与视频数据是如何放置的?

一个视频帧大约占据多少字节?

一个音频数据块大约占据多少字节?

52 49 46 46 是RIFF的ASCII码值,说明这是一个RIFF文件

28 22 30 00 是用于表示文件大小的4个字节,此文件大小为0x00302228,文件大小为3154472字节,还要加上开头的8字节,所以这个文件大小实际为3154480字节。

41 56 49 20 是AVI的ASCII码值,说明这是一个AVI文件

4C 49 53 54 是LIST的ASCII码值

CA 22 00 00 表示LIST的大小,为8906字节,整个LIST的大小为8906+8=8914

68 64 72 6C 是hdrl的ASCII码值,说明这是一个头信息列表(header list)

61 76 69 68 是avih的ASCII码值,说明这是一个主avi头(main avi header)

38 00 00 00 表示chunk的大小的4个字节,此文件chunk大小为0x00000038即56字节,整个chunk的大小为56+8=64字节

A0 86 01 00 表示帧之间的微秒数,为0x000186A0,即100000微秒,即0.1秒

BC 22 03 00 表示文件的近似最大速率,为0x000322BC,即621274字节/秒

00 00 00 00 表示以多少字节对齐,此文件以0字节对齐

10 09 00 00是结构体AVIMAINHEADER中的dwFlags成员

C7 00 00 00 表示文件总共有多少帧,此文件共有0x000000C7帧,即199帧。由此项和帧之间的微秒数可以得出视频的时长=199x100000,为19900000微秒,19.9秒

00 00 00 00 表示交错帧中的初识帧,非交错文件则该值为零

02 00 00 00 表示文件中所包含的流的数量,此文件包含两个流,故值为2

00 00 10 00 表示读该文件时建议的缓存大小,为0x00100000,即1048576字节

EE 03 00 00 表示文件的宽,以像素为单位

24 02 00 00 表示文件的高,以像素为单位

00 00 00 00

00 00 00 00

00 00 00 00

00 00 00 00 十六个字节的保留位

4C 49 53 54 LIST

E0 10 00 00 LIST的大小

73 74 72 6C LIST的类型,说明这是一个流信息的LIST,strl的ASCII码值

73 74 72 68说明这是一个流的头信息chunk,srth的ASCII码值

38 00 00 00 chunk的大小

76 69 64 73 vids的ASCII码值,说明这是一个视频流

78 76 69 64标识解码该流时使用的编解码器

00 00 00 00整个数据流的标志

00 00 00 00是结构体AVISTREAMHEADER的wPriority成员和wLanguage成员

00 00 00 00表示交错帧中的初始帧,非交错文件,该值为0

01 00 00 00是结构体AVISTREAMHEADER的dwScale成员,与 dwRate 一起,决定该流所要使用的时间尺度。对于视频流来说,dwRate / dwScale = 帧率(fram rate )

0A 00 00 00是结构体AVISTREAMHEADER的dwRate成员,结合上一条信息可以算出此视频的帧率

00 00 00 00这个流的开始时间。此处为0,文件开始时,流即开始

C7 00 00 00表示流的长度,对于视频流其值就是视频的总帧数,即199

D7 7D 01 00表示读该流时,建议的缓存大小

FF FF FF FF 表示该流的质量指标

00 00 00 00表示一个数据样本的大小。如果样本大小可变,此值为0。视频流中,该值一般为0。此处为0

00 00 00 00是结构体AVISTREAMHEADER的rcFrame成员的left和top成员

EE 03 24 02是结构体AVISTREAMHEADER的rcFrame成员的right和bottom成员

73 74 72 66 strf的ASCII码值,说明这是一个流的格式信息chunk

28 00 00 00格式信息chunk的大小,不包括最初的8个字节

28 00 00 00是结构体BITMAPINFO的成员BITMAPINFOHEADER的biSize成员,表示结构体BITMAPINFOHEADER的大小。为0x00000028,即40字节。这说明本chunk中,BITMAPINFO只包含一个成员,即BITMAPINFOHEADER结构体

EE 03 00 00位图的宽,以像素为单位

24 02 00 00位图的高,以像素为单位

01 00 18 00表示一个像素所占的位数,其值为0x0018,即一个像素占24位

78 76 69 64 cvid的ASCII码值,表示压缩的类型

68 3C 19 00 表示image的大小

00 00 00 00水平分辨率

00 00 00 00垂直分辨率

00 00 00 00是结构体BITMAPINFOHEADER的biClrUsed成员,此处为0。表明此处使用与对于biCompression指定的压缩模式的biBitCount值所对应的最大值

00 00 00 00是结构体BITMAPINFOHEADER的biClrImportant成员,此处为0。表明所有的颜色都是重要的

实际的音视频数据由此开始(如上图)

AVI文件的音视频数据是交织放置的

此文件共199帧,视频长度为19.9秒,计算得出10帧/秒,根据其最大近似速率为621274字节/秒,可以算出此视频文件一个数据帧大约为62127字节

二、MP4文件

MP4文件的数据都装在box中,可以将box理解为数据对象块。box中可以包含另一个box,这种box称为container box。

File Type Box(ftyp)

一个MP4的文件只有一个ftyp类型的box,是MP4格式的标志,并包含有一些文件信息。如下图所示:

Movie Box(moov)

之后就是moov类型的container box,与ftyp一样,有且只有一个,存放媒体信息

(然而我没在自己打开的二进制文件中找到相应的关键字......我从网上找到一张解释MP4文件格式的图片,引用如下图,并附上网址)

(图片源自:MP4文件格式的解析,以及MP4文件的分割算法 - haibindev - 博客园)

三、WAV

WAV文件的声音数据保存在数据块中,块标识为data,块长度值为声音数据的长度。从数据块第9个字符开始是声音波形的采样数据,每个样本按采样时间先后顺序写入,样本字节数取决于采样位数。

52 49 46 46 46 是RIFFF的ASCII码值

20 09 00 是此WAV文件的数据大小

57 41 56 45 66 6D 74 20 是WAVEfmt的ASCII码值

10 00 00 00 这是一个DWORD,对应十进制数16,此值为16时表明最后没有附加信息。若此值大于16,多出几则文件多出几个字节的附加信息

01 00 这是一个WORD,对应编码格式

02 00 表示声道数,此值为2,说明此文件为双声道

80 BB 00 00 表示采样频率,0x0000BB80转换为十进制是48000,采样频率为48000Hz

00 EE 02 00 表示每秒的数据量,0x0002EE00转换为十进制是567000,即波形音频数据传输速率。此值=通道数x每秒样本数x单个样本的数据位数/8,播放器可用此值估计缓冲区的大小

04 00 表示块对齐的内容,即数据块的调整数。此值=通道数x单个样本数据位值/8,播放器需要一次处理多个此值大小的字节数据以便将其值用于缓冲区的调整

10 00 表示每个样本的数据位数,值为16,则采样大小为16bit

64 61 74 61 为data的ASCII码值,data标示头结束,开始数据区域(因为这段音频无声的部分相对较多,所以data之后有很长一段空白,有声部分的部分数据如下:)

参考资料:

​​​​​​二进制 AVI格式解析_CP5949527的博客-CSDN博客

mp4文件格式解析 - nigaopeng - 博客园

MP4文件格式的解析,以及MP4文件的分割算法 - haibindev - 博客园

wav文件格式分析与详解 - nigaopeng - 博客园

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。