# 参数之间的权衡

视频编码器通常具有可调参数，以实现编码器的最佳质量或最佳编码速度。有的参数允许编码器分析输入视频并收集输入视频特征的详细信息。基于编码器收集的信息，编码器做出某些决定：例如要执行的压缩量，或要使用的编码模式。通常，使用多通道来分析并执行后续的编码工作。因此，对于给定的算法，编码器能够有效地压缩视频并实现最佳的质量。但是，编码器的这种分析需要一定时间并且会降低编码速度。另外，分析工作还将增加编码设备的功耗。因此，在某些情况下，并不会试图通过调整某些参数以适应给定的视频特性，以便提高编码器性能或满足系统资源限制。相反，会使用这些参数的预定义的值来达到相同的目的，从而减少分析工作并且实现可能的最佳速度。

上一节中提到的影响视觉质量的大多数参数也会影响编码速度。对于给定的视频编码器，需要调整多个参数以便在编码质量和速度之间取得良好的权衡。对于此处列举的参数而言，虽然并不是所有的参数都是用户可调整的，但某些参数可能会根据编码器的具体实现而暴露给最终用户。

## Bit rate, frame rate, resolution

具有高码率，帧率和分辨率的视频通常需要更长的编码时间，但却可以提供更好的视觉质量。应该仔细设置这些参数以适应具体应用的要求。 例如，可以在仅具有特定参数的特定设备上满足实时编码和实时处理的要求。

## Motion estimation algorithm

文献中提出了大量的快速运动估计（*fast-motion estimation*）算法，所有这些算法都基于一个共同的目标：在提供合理的质量的同时提高运动估计的速度。由于运动估计是视频编码中最耗时的部分，因此仔细选择运动估计的算法非常重要。

## Motion search range

为获得最佳质量，应将运动搜索范围设置为一个较高的数值，以便捕获较大的运动。另一方面，搜索窗口越大，在要进行的计算量越大。因此，较大的搜索区域会直接影响编码速度，内存带宽，帧延迟和功耗。 另外，较大的运动矢量也需要更多的比特位来编码。如果源块和预测块之间的差别信号具有相当大的能量，则更应该采用块帧内编码模式而不是使用大的运动矢量。因此，需要根据每分贝质量增益（*decibel of quality gain*）所花费的比特数对搜索参数和编码效率进行权衡。

## Adaptive search

为了获得更好的质量，通常运动搜索算法可以适应视频的运动特性，并且可以有效地控制搜索过程以获得显著的编码速度。例如，为了加速运动搜索，算法可以避免搜索静止区域，使用可切换形状的搜索模式，利用运动矢量中的相关性。因此，通过这些算法可以增加编码速度，并且无需求助于次优搜索同时也不会牺牲视觉质量。

## Prediction types

P帧和B帧具备不同级别的计算复杂度，并且通过视觉质量损失的方式实现数据压缩。然而，它们也提供了视觉上令人愉悦的平滑运动外观。因此，帧的预测类型是权衡编码质量和编码速度的重要考虑因素。

## Number of reference frames

多个参考帧比单个参考帧提供更好的视觉质量，但是根据多个参考帧计算运动矢量却更耗时。在资源受限的环境中，也需要权衡考虑这些参数。

## Transform mode and partition size

可以使用8×8或4×4的块用于变换，并且可以利用不同的块大小预测运动。在某些平台上，处理四个4×4的块可能比处理一个8×8的块要慢。 但是，根据视频中可用的详细信息量，确定块尺寸的决策可能会影响视觉质量（因为4×4的块更能适应更精细的细节）。

## Skip conditions

如果满足特定条件，则可以跳过某个块。与简单的启发式算法相比，可以基于对量化变换系数特性的分析来做出更好的跳过决策，从而产生更好的质量。 但是这种复杂的算法需要大量的计算。对于资源受限的设备来说，需要进行一定的权衡以获得最佳的效果。

## Deblocking filter parameters

编码速度通常对去块滤波器（*deblocking filter*）的参数比较敏感。执行强去块（*strong deblocking*）会降低编码速度。但是根据内容和块效应的数量，去块滤波器可以提供更好的视觉质量。
