H.264或视频编码器一般如何计算两帧的残差图像?

时间:2011-07-06 01:04:19

标签: compression h.264 video-encoding

我一直在努力了解视频编码如何适用于现代编码器,特别是H264。 在文档中经常提到残差帧是根据当前p帧和最后一个i帧之间的差异创建的(假设在预测中未使用以下帧)。我知道使用YUV颜色空间(可能是YV12),并且一个图像从另一个图像“减去”然后形成残差。 我不明白的是这种减法究竟是如何运作的。我不认为这是差异的绝对值,因为这将是模棱两可的。获得这种差异的每像素公式是什么?

1 个答案:

答案 0 :(得分:6)

减法只是视频编码中的一小步;大多数现代视频编码背后的核心原则是motion estimation,其次是motion compensation。基本上,运动估计的过程生成向量,该向量示出连续帧中的宏块之间的偏移。但是,这些向量中总是存在一些错误。

所以会发生什么是编码器将输出两个矢量偏移,而“残差”就是剩下的。残差不仅仅是两帧之间的差异;它是考虑运动估计后的两个帧之间的差异。请参阅维基百科关于补偿的文章中的“运动补偿差异”图像,以清楚地说明这一点 - 请注意,运动补偿差异远小于“哑”残差。

Here's a decent PDF that goes over some of the basics

其他几点说明:

  • 是的,始终使用YUV,通常大多数编码器都使用YV12或其他一些色度二次采样格式
  • 减法必须分别在Y,U和V帧上进行(将它们视为三个独立的通道,所有这些通道都需要进行编码 - 然后很明显减法必须如何发生)。在Y,U和V平面上可能会或可能不会发生运动估计;有时编码器只在Y(亮度)值上进行,以牺牲质量为代价来节省一点CPU。