XviD是目前世界上最常用的视频编码解码器(codec),而且是第一个真正开放源代码的,通过GPL协议发布。在很多次的codec比较中,XviD的表现令人惊奇的好,总体来说是目前最优秀、最全能的codec之一。
XviD为一个PC视频编解码器,而编解码器是为[合作]的缩写明镜,因此描述了一个方案,以数字视频编码和解码的编码视频数据的目的是为了减少流量,这意味着,使其更小更快的通过计算机网络或计算机磁盘上的更多高效的存储传输。
xvid有两种编码方式:single pass和twopass
single pass模式编码简单,速度也快,但最终效果不如twopass。
twopass就是视频压制需要经过两次编码,分别为twopass-1st pass(简称1pass)和twopass-2nd pass(简称2pass)
1pass时,编码器会用最高质量编码采集可供第2次运算参考的画面信息,而在2 pass时。编码器会根据第一次压缩获得的信息和用户指定的文件大小,自动分配比特率,使需要高流量的运动画面分配到更多的空间,更高的比特率来保证画面质量。相对的,对于那些不包含太多运动信息的静态画面则用较低的比特率。追求画质的朋友当然会选择这种方式,但运算比single pass更费时。
接下来介绍一些基本概念:
Q值——量化值,它被用来描述1帧的质量,每帧都有一个Q值,取值范围在1-31之间。Q值越小,画质越好,比特率越大
I-frame——关键帧,常被缩写为IF。关键帧是构成一个帧组的第一帧。IF保留了一个场景的所有信息
P-frame——未来单项预测帧,缩写为PF,只储存与之前一个已解压画面的差值
B-frame——双向预测帧,缩写为BF,除了参考之前解压的画面以外,也会参考后一帧的画面信息
编码流程:
各变量的设置:创建xvid_enc_frame_t和xvid_enc_stats_t,分别用于传入参数和统计编码结果。
具体过程:
设置传入图像数据和图像色彩空间
设置传出的码流
设置vol的标志
设置帧的编码类型
设置量化因子
设置运动估计算法集合
设置vop的标志
编码器提供的函数