运动补偿

运动补偿是一种描述相邻帧（相邻在这里表示在编码关系上相邻，在播放顺序上两帧未必相邻）差别的方法，具体来说是描述前面一帧（相邻在这里表示在编码关系上的前面，在播放顺序上未必在当前帧前面）的每个小块怎样移动到当前帧中的某个位置去。这种方法经常被视频压缩/视频编解码器用来减少视频序列中的时域冗余。它也可以用来进行去交织（deinterlacing）以及运动插值（motion interpolation）的操作。
一个视频序列包含一定数量的图片--通常称为帧（frame）。相邻的图片通常很相似，也就是说，包含了很多冗余。使用运动补偿的目的是通过消除这种冗余，来提高压缩比。
最早的运动补偿的设计只是简单的从当前帧中减去参考帧，从而得到通常含有较少能量（或者称为信息）的"残差"，从而可以用较低的码率进行编码。解码器可以通过简单的加法完全恢复编码帧。
一个稍微复杂一点的设计是估计一下整帧场景的移动和场景中物体的移动，并将这些运动通过一定的参数编码到码流中去。这样预测帧上的像素值就是由参考帧上具有一定位移的相应像素值而生成的。这样的方法比简单的相减可以获得能量更小的残差，从而获得更好的压缩比--当然，用来描述运动的参数不能在码流中占据太大的部分，否则就会抵消复杂的运动估计带来的好处。
通常，图像帧是一组一组进行处理的。每组的第一帧（通常是第一帧）在编码的时候不使用运动估计的办法，这种帧称为帧内编码帧（Intra frame）或者I帧。该组中的其它帧使用帧间编码帧（Inter frame），通常是P帧。这种编码方式通常被称为IPPPP，表示编码的时候第一帧是I帧，其它帧是P帧。
在进行预测的时候，不仅仅可以从过去的帧来预测当前帧，还可以使用未来的帧来预测当前帧。当然在编码的时候，未来的帧必须比当前帧更早的编码，也就是说，编码的顺序和播放的顺序是不同的。通常这样的当前帧是使用过去和未来的I帧或者P帧同时进行预测，被称为双向预测帧，即B帧。这种编码方式的编码顺序的一个例子为IBBPBBPBBPBB。

分块运动补偿

在分块运动补偿（BMC for block motion compensation）中，每帧被分为若干像素块（在大多数视频编码标准，如MPEG中，是分为16x16的像素块）。从参考帧的某个位置的等大小的块对当前块进行预测，预测的过程中只有平移，平移的大小被称为运动矢量。
对分块运动补偿来说，运动矢量是模型的必要参数，必须一起编码加入码流中。由于运动矢量之间并不是独立的（例如属于同一个运动物体的相邻两块通常运动的相关性很大），通常使用差分编码来降低码率。这意味着在相邻的运动矢量编码之前对它们作差，只对差分的部分进行编码。使用熵编码对运动矢量的成分进行编码可以进一步消除运动矢量的统计冗余（通常运动矢量的差分集中于0矢量附近）。
运动矢量的值可以是非整数的，此时的运动补偿被称为亚像素精度的运动补偿。这是通过对参考帧像素值进行亚像素级插值，而后进行运动补偿做到的。最简单的亚像素精度运动补偿使用半像素精度，也有使用1/4像素和1/8像素精度的运动补偿算法。更高的亚像素精度可以提高运动补偿的精确度，但是大量的插值操作大大增加了计算复杂度。
分块运动补偿的一个大缺点在于在块之间引入的非连续性，通常称为块效应。当块效应严重时，解码图像看起来会有像马赛克一样的效果，严重影响视觉质量。另外一个缺点是，当高频分量较大时，会引起振铃效应。关于高频分量，请参见对运动补偿后的残差进行变换的方法：变换编码。

可变分块运动补偿

可变分块运动补偿（VBSMC，全称 Variable Block Size Motion Compensation）是BMC的变种，编码器可以动态选择分块大小。进行视频编码时，使用大的分块可以减少表征运动向量所需的比特数，使用小的分块则可以在编码时产生更少的预测余量信息。较老的设计，象H.261和MPEG-1视频编码，典型的使用了固定分块，而较新的设计，像H.263、MPEG-4 Part 2、H.264/MPEG-4 AVC和VC-1则赋予了编码器动态选择何种分块来表征运动图像的能力。

重叠分块运动补偿

重叠分块运动补偿（OBMC for Overlapped block motion compensation）是一种更好的解决方案，它不但能增加预测精度，而且能够避免块失真。 因此，每个像素第属于4个分块。基于此方案，每个像素的4个预测值求和后得到一个加权平均数。
为此目的，分块被关联到一个窗口函数，该窗口函数具有任何地方的4个重叠窗口的总和为1的特质。