Chinaunix首页 | 论坛 | 博客
  • 博客访问: 485618
  • 博文数量: 135
  • 博客积分: 3010
  • 博客等级: 中校
  • 技术积分: 905
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-24 19:31
文章分类

全部博文(135)

文章存档

2010年(135)

我的朋友

分类: LINUX

2010-01-31 21:54:13

B 帧在 MPEG-4 中有四种参考模式,如果是同时参考前后的画面压缩,则记录的是 和 (前画面 pixel 值 + 后画面 pixel 值)/2 的差值,也就是 和 「前后画面的平均」的差值。所以记录的差值个数和 P 帧一样,只有一个,没有增加。

而因为 B 帧位于前后画面的中间,以「前后画面的平均」,也就是「前后画面的中间值」来作为预测数值(预测 B 帧的 pixel 数值为多少?如果有误差,再记录差值),这样这个预测数值会比单独使用前一个画面来预测,更接近目前真正的 B 帧的数值,可想而知,如此所需要记录的差值就会很小甚至可以根本不用记录,所以便可以省下很多的 bits,提高压缩率。

例如 亮度变化 -> I B P  7 8 9

 如果 B 只参考前一个画面压缩,则需记录差值 1。如果以 (I + P)/2 压缩,则差值为 0,不需记录差值。(虽然要记录两个矢量,不过矢量也可以再做进一步预测压缩,总的来说,还是会比单独参考前一个画面压缩来得小很多)如果画面不是这样变化怎么办?通常来讲画面都会是这样变化,如果不是这样变化我们就不使用 B 帧就算变化不是如此规则,换个方式想,B 帧可以参考的画面还是比 P 帧多,再怎么找,也还是 B 帧可以找到误差更小的方块来使用的机率大(因为可以选择、参考的对象较多),所以 B 帧还是比 P 帧的压缩率来得高。(而且高很多,差距非常大)

除了压缩率以外,B 帧对画质的影响.....是有的,因为 B 帧这种参考前后画面的特性,等于有内插(interpolation)的效果,所以可以减少噪讯。

MPEG-4 中的 B 帧,也是非常具有威力的,除了以前的三种参考模式,还有 Direct Mode,连矢量的纪录都省了。虽然 MPEG-4 之中有 4MV 的功能,可以记录四个矢量,不过编码器在压缩的时候会判断,到底是使用 4MV 压出来的结果小,还是使用传统的方法压出来的结果小?

如果使用传统的方法压出来的结果小,便使用传统的方法记录,如果使用 4MV 压出来的结果小,才使用 4MV 来记录。

(ps. 4MV 不会用在 backward 预测)

您可以观察 VirtualDub 压缩时画面上显示的蓝线,您会发现蓝线和蓝线之间通常会有很短的蓝线插在中间,造成空隙,而且差距很大,这个就是夹在 P 之间的 B 在发挥压缩威力如果是用 DivX 5 更明显,因为 DivX 5 只能够使用 IBPBPBPB... 这种一个 B 接一个 P 的形式,所以画面上的蓝线就是「一长一短、一长一短」这样排列。


阅读(1205) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~