HEVC配置文件及参数介绍

配置文件

对于配置文件的认识这是很重要的,因为文件里面规定了编码的各种参数。在HEVC中包含两种配置文件:编码方式的配置文件和测试序列的配置文件。

在配置文件名中,同类型,以"main"结尾与“main10”结尾的主要区别在于指定编码器的内部操作位深度(Internal Bit Depth),如encoder_intra_main 与encoder_intra_main10。

它表示编码器在处理图像数据时使用的位深度。 在这个例子中,参数的值如果是10,意味着编码器在内部操作时使用10位深度的图像数据。这可以用于支持高位深的视频编码,例如10位色深。通过增加位深度,可以提供更丰富的颜色细节动态范围,从而获得更高质量的图像编码结果。

不同类型的,主要区别在于编码结构,intra表示:每一帧都是按照帧内方式时行编码

lowdelay和lowdelay_p 表示: 只有第一帧按照帧内编码方式进行编码,随后的各帧都作为一般的P帧或B帧进行编码,

randomaccess表示:分批B帧构成,周期性地插入一些随机访问帧。测试者可以根据自己的需要选择适当的编码方式配置文件,如进行帧内快速算法的研究一般选择“intra”的配置文件。

ctc_subsample表示:支持对亮度和色度分量进行子采样。用于控制编码器仅对视频序列的每第几帧进行编码,从而降低编码的计算复杂度和运行时延。

比通用编码多一个参数TemporalSubsampleRatio,假设参数的值是8,表示编码器只对每八帧中的一帧进行编码,跳过了其余七帧。这样做的目的是在运行时减少对时间连续性的依赖,从而降低了编码的计算要求,并提高了编码器的吞吐量。这种时间子采样的技术常常被用于实时视频编码和传输应用,其中要求快速编码和低延迟。通过跳过冗余的帧,可以减少编码和传输的数据量,提高整体的编码效率。需要注意的是,这个参数的具体值可以根据具体的应用需求进行调整。较大的子采样比率将导致更多的帧被跳过,从而进一步降低计算复杂度,但可能会牺牲一定的视频质量和时间连续性。

不同配置文件功能

encoder_intra_high_throughput_rext.cfg:针对高吞吐量的帧内编码而设计的配置文件。它可能包含了一些增强的编码功能,旨在提供更高的编码速度和效率。

 

encoder_intra_main.cfg: 主要配置文件,支持常规的帧内编码功能,适用于一般的视频编码需求。

 

 

encoder_intra_main_ctc_subsample.cfg: 这个配置文件可能在encoder_intra_main.cfg的基础上进行了某些修改,以支持对亮度和色度分量进行子采样。

 

 

encoder_intra_main_rext.cfg: 这个配置文件可能是对encoder_intra_main.cfg的扩展版本,包含了一些增强的编码功能,例如更高的精度支持和新的编码工具。

 

 

encoder_intra_main10.cfg: 支持10位色深的主要配置文件。相比于标准的8位色深,10位色深能够提供更高的图像质量和细节表达能力。

encoder_intra_main10_ctc_subsample.cfg: 这个配置文件在encoder_intra_main10.cfg的基础上进行了某些修改,以支持对亮度和色度分量进行子采样。

 

 

encoder_lowdelay_main.cfg: 针对低延迟的应用场景进行了优化的配置文件。低延迟是对编码和解码过程中的延迟要求较低,适用于实时通信等需要快速响应的应用。

 

 

encoder_lowdelay_main_rext.cfg: 在encoder_lowdelay_main.cfg的基础上进行了扩展,包含了一些增强的编码功能。

 

 

encoder_lowdelay_main10.cfg: 支持10位色深的低延迟配置文件。

 

 

encoder_lowdelay_P_main.cfg: 主要用于低延迟帧间编码的配置文件,支持P帧的编码。

encoder_lowdelay_P_main10.cfg: 主要用于低延迟帧间编码的配置文件,支持P帧的编码,同时支持10位色深。

 

 

encoder_randomaccess_main.cfg: 用于随机访问的主要配置文件,适用于需要随机访问和快速定位的应用场景。随机选取作为I帧编码。

 

 

encoder_randomaccess_main_rext.cfg: 在encoder_randomaccess_main.cfg的基础上进行了扩展,增加了一些编码功能。

 

encoder_randomaccess_main10.cfg: 支持10位色深的随机访问配置文件。

文件中的参数介绍

#======== File I/O ========          输入输出文件

BitstreamFile : str.bin

编码后获得的码流,即用来传输的文件,默认存储地址为调试时的绝对路径,可以更改名称及存储路径

ReconFile : rec.yuv

重建文件,即获得的编码视频文件,同样可以改变名称及存储路径

#======== Profile definition =======            配置文件定义

Profile:HEVC定义了多个配置文件,每个配置文件都有不同的功能和限制。选择适当的配置文件可以根据您的具体需求来决定编码器的行为。例如,main 配置文件是HEVC的基本配置,而 main-RExt 配置文件是扩展配置,提供了更多的编码功能。选择不同的配置文件可以影响编码器的能力,例如支持更高的色深、更复杂的预测模式等。

Tier:HEVC定义了几个级别,用于描述编码器对于特定配置文件的支持程度。每个级别都有一组规定的限制和要求。选择适当的级别可以确保编码器在特定的硬件或平台上能够正常运行。例如,main 级别是最基本的级别,而 high 级别则是更高级别的要求,可能需要更高的计算能力和存储资源。

#======== Unit definition ===========        单元定义

MaxCUWidth 和 MaxCUHeight:这两个参数分别定义了编码单元(Coding Unit,CU)的最大宽度和最大高度,以像素为单位。编码单元是HEVC中最小的编码单元,用于将视频帧划分为更小的块进行编码。这些参数指定了编码单元的最大尺寸,例如64x64像素。

MaxPartitionDepth:这个参数定义了编码单元的最大深度。编码单元可以被递归地分割成更小的块,达到不同的深度级别。这个参数允许的最大深度为4,表示编码单元可以被分割成最多4层深度。

QuadtreeTULog2MaxSize 和 QuadtreeTULog2MinSize:这两个参数定义了基于四叉树结构的变换单元(Transform Unit,TU)的最大和最小变换尺寸的对数值。四叉树结构用于对编码单元进行分割,而变换单元是在编码单元内进行变换和量化的最小单元。这些参数指定了允许的最大和最小变换尺寸的对数值,例如最大尺寸为5,最小尺寸为2。

QuadtreeTUMaxDepthInter 和 QuadtreeTUMaxDepthIntra:这两个参数定义了在帧间预测和帧内预测中的变换单元的最大深度。帧间预测是通过参考帧进行预测,帧内预测是在当前帧内进行预测。这些参数指定了允许的最大深度,例如最大深度为3。

#======== Coding Structure =========          编码结构

IntraPeriod:这个参数定义了关键帧(I-Frame)的周期。关键帧是一种特殊的帧,包含完整的图像信息,用于参考其他帧的解码。该参数指定关键帧出现的周期,-1表示仅有第一帧为关键帧。

DecodingRefreshType:这个参数定义了解码刷新类型。解码刷新是指在解码过程中进行重置的帧类型,用于恢复解码器的状态。该参数可以选择不同的解码刷新类型,包括无刷新、随机访问刷新(CRA)、图像内解码刷新(IDR)和恢复点SEI(Recovery Point SEI)。

GOPSize:这个参数定义了GOP(Group of Pictures)的大小,即GOP中帧的数量。GOP是一组连续的帧,包括关键帧、前向预测帧(P帧)和双向预测帧(B帧)。该参数指定了GOP的大小,其中B帧的数量为GOPSize-1。

ReWriteParamSetsFlag:这个参数定义了是否在每个IRAP(Instantaneous Decoder Refresh Access Point)帧中重写参数集。IRAP帧是一类特殊的帧,用于恢复解码器的状态,包括关键帧和随机访问刷新帧。该参数控制是否在每个IRAP帧中重新写入参数集。

IntraQPOffset 和 LambdaFromQpEnable:这些参数用于控制量化参数和λ参数的计算和调整。通过设置不同的值,可以根据量化参数的偏移和λ参数的计算模型来调整编码器的量化和变换过程。

TemporalSubsampleRatio:这个参数用于指定编码过程中的时间子采样比率(Temporal Subsample Ratio)。它用于控制编码器仅对视频序列的每第几帧进行编码,从而降低编码的计算复杂度和运行时延。 这样做的目的是在运行时减少对时间连续性的依赖,从而降低了编码的计算要求,并提高了编码器的吞吐量。

#=========== Motion Search ==========        运动搜索

FastSearch:该参数用于选择运动搜索的模式。当设置为0时,采用全搜索(Full search)模式,即对每个可能的运动矢量位置都进行完整的搜索。当设置为1时,采用快速TZ搜索(TZ search)模式,该模式通过空间和时间的局部性进行搜索,以加快搜索速度。

SearchRange:该参数定义了运动搜索的范围,即搜索的像素距离。当设置为0时,搜索范围是整个帧(Full frame)。较大的搜索范围可以提高运动搜索的准确性,但也会增加计算复杂度。

BipredSearchRange:该参数定义了双向预测(B帧)的运动搜索范围。B帧是通过参考前后两个帧进行预测的帧类型,该参数控制了B帧的运动搜索的范围,用于细化双向预测的运动矢量。

HadamardME:该参数决定是否在分数精度的运动估计中使用Hadamard变换的度量。Hadamard变换用于衡量预测残差的误差,从而选择最优的运动矢量。启用Hadamard变换可以提高编码效率,但会增加计算复杂度。

FEN 和 FDM:这些参数是用于快速编码决策的选项。FEN代表快速编码决策(Fast Encoder Decision),它通过减少编码决策过程中的计算量来提高编码速度。FDM代表快速合并RD代价(Fast Decision for Merge RD Cost),它通过近似计算合并模式的率失真代价来加速编码过程。

#======== Quantization ==========      量化参数

QP:量化参数,控制视频编码中的量化过程。取值范围为0到51,值越小表示更高的质量和比特率。

MaxDeltaQP:基于CU的多QP优化,用于在编码过程中对不同大小的编码单元采用不同的QP值。

MaxCuDQPDepth:子LCU级别的最小CuDQP的最大深度。用于控制在编码过程中对于较小的编码单元是否允许采用不同的QP值。

DeltaQpRD:基于片段的多QP优化,用于在编码过程中对不同片段采用不同的QP值以获得更好的码率失真性能。

RDOQ:基于速率失真优化的量化过程,用于优化量化系数的编码,以提高编码质量。

RDOQTS:用于变换跳过模式下的速率失真优化量化。

TransformSkip:变换跳过模式的开关,用于跳过变换过程,直接对残差进行编码。

TransformSkipFast:变换跳过模式的快速开关,用于在变换跳过模式下进行快速编码。

SliceChromaQPOffsetPeriodicity:用于定义色度分量Cb和Cr的QP偏移的周期性。设置为0表示禁用周期性。

SliceCbQpOffsetIntraOrPeriodic:用于I帧或周期性间隔片段中色度分量Cb的QP偏移。替代GOP表中的偏移量。

SliceCrQpOffsetIntraOrPeriodic:用于I帧或周期性间隔片段中色度分量Cr的QP偏移。替代GOP表中的偏移量。

#=========== Deblock Filter =========   去块滤波

LoopFilterOffsetInPPS:循环滤波器参数的控制方式。当设置为0时,参数可以在Slice头中进行动态调整,param = base_param + GOP_offset_param;当设置为1时,参数固定在PPS中,param = base_param。

LoopFilterDisable:是否禁用循环滤波器。设置为0时表示启用循环滤波器,设置为1时表示禁用循环滤波器。

LoopFilterBetaOffset_div2:循环滤波器的beta偏移量除以2。取值范围为-6到6,用于调整循环滤波器的强度。

LoopFilterTcOffset_div2:循环滤波器的tc偏移量除以2。取值范围为-6到6,用于调整循环滤波器的边界平滑程度。

DeblockingFilterMetric:用于衡量图像块失真程度的度量值。根据该度量值自动配置循环滤波器的参数,并应用于每个片段。要使用此功能,LoopFilterOffsetInPPS和LoopFilterDisable必须设置为0。

#=========== Misc. ============      比特深度

InternalBitDepth:编码器在内部处理时使用的位深度。在HEVC中,位深度指的是每个像素的颜色精度,表示每个颜色通道可以表示的离散级别数量。 在这个特定的参数中,"InternalBitDepth"被设置为8,表示编码器在内部处理时使用8位的位深度。这意味着每个像素的颜色通道可以表示256个离散级别。通常情况下,输入视频的位深度与内部处理的位深度应保持一致,以避免信息损失。但在某些情况下,可以降低位深度以减少编码的复杂性和存储需求,尤其是对于较低质量要求的视频应用。

#=========== Coding Tools ======      编码工具

SAO (Sample Adaptive Offset): 这个参数控制是否使用样本自适应偏移。SAO用于减少图像中的伪影和伪轮廓,通过对每个样本应用不同的偏移来调整像素值。

AMP (Asymmetric Motion Partitions): 这个参数控制是否使用非对称运动分区。AMP允许将编码块分为更小的非对称块,以适应不同类型的运动。

TransformSkip: 这个参数控制是否使用变换跳过技术。变换跳过允许将一些编码块直接跳过变换过程,从而减少计算复杂度。

TransformSkipFast: 这个参数控制是否使用快速变换跳过技术。快速变换跳过使用一些近似方法来更快地判断哪些编码块可以跳过变换过程。

SAOLcuBoundary: 这个参数控制是否在非去块滤波过程中使用非去块边界的像素。非去块边界指的是没有经过去块滤波的像素,SAOLcuBoundary决定是否使用这些像素进行偏移计算。

#============ Slices ==========     切片

SliceMode: 这个参数控制切片的模式。有以下几种选择: 0: 禁用所有切片选项。 1: 强制每个切片中具有最大数量的LCU(最大编码单元)。 2: 强制每个切片中具有最大字节数。 3: 强制每个切片中具有最大瓦片数。

SliceArgument: 这个参数是针对SliceMode的参数值。根据SliceMode的不同含义如下: 当SliceMode为1时,表示每个切片中最大的SliceGranularity大小的块数。 当SliceMode为2时,表示每个切片中的最大字节数。 当SliceMode为3时,表示每个切片中的最大瓦片数。

LFCrossSliceBoundaryFlag: 这个参数控制是否在切片边界上进行环路滤波(包括自适应环路滤波和去块滤波)。具体选项如下: 0: 不在切片边界上进行环路滤波。 1: 在切片边界上进行环路滤波。

#============ PCM ===========      一种无损的编码模式,用于在视频编码中表示无压缩的原始样本

PCMEnabledFlag:指定是否启用PCM模式。当值为0时,表示不使用PCM模式;当值为1时,表示启用PCM模式。

PCMLog2MaxSize:PCM块的最大尺寸,以2为底的对数值。它指定了PCM编码中的最大块大小,通常用于表示非常复杂的图像区域。

PCMLog2MinSize:PCM块的最小尺寸,以2为底的对数值。它指定了PCM编码中的最小块大小,通常用于表示相对简单的图像区域。

PCMInputBitDepthFlag:指定PCM样本的输入位深度。当值为0时,表示PCM样本的位深度与内部位深度相同;当值为1时,表示PCM样本的位深度与输入位深度相同。

PCMFilterDisableFlag:指定是否在I_PCM样本上启用循环滤波。当值为0时,表示对I_PCM样本启用循环滤波;当值为1时,表示禁用对I_PCM样本的循环滤波。

#============ Tiles ============     瓦片,将图像分割成多个矩形区域,每个区域称为一个瓦片,提供并行处理的机会,不同的瓦片可以在多个处理单元上同时进行编码或解码

TileUniformSpacing:表示是否采用均匀间距的方式定义瓦片边界。当值为0时,瓦片的列边界由TileColumnWidth数组指定,行边界由TileRowHeight数组指定。当值为1时,瓦片的列和行边界均匀分布。

NumTileColumnsMinus1:表示图像中瓦片的列数减1。例如,当值为0时,表示只有1列瓦片。

TileColumnWidthArray:是一个数组,包含按顺序指定的每个瓦片列的宽度,单位为CTU(Coding Tree Unit,编码树单元)。例如,2 3表示第一列瓦片宽度为2个CTU,第二列瓦片宽度为3个CTU。

NumTileRowsMinus1:表示图像中瓦片的行数减1。例如,当值为0时,表示只有1行瓦片。

TileRowHeightArray:是一个数组,包含按顺序指定的每个瓦片行的高度,单位为CTU。例如,2表示第一行瓦片高度为2个CTU。

LFCrossTileBoundaryFlag:表示是否在瓦片边界应用环路滤波(包括ALF和DB)。当值为0时,表示不跨越瓦片边界应用环路滤波;当值为1时,表示跨越瓦片边界应用环路滤波。

#============ WaveFront ==========      波前并行技术,同时处理多个最小编码单元(LCU)

WaveFrontSynchro(波前同步):这个参数指定了波前并行中的同步策略。当设置为0时,表示没有波前同步,即波前子流(WaveFront Substreams)的数量必须为1。当设置为大于0的值时,表示波前同步与右上方的LCU之间的距离,以LCU的数量为单位。这意味着每个LCU的编码都与其右上方的LCU的编码结果有关,需要进行同步操作。

#=========== Quantization Matrix =======       量化矩阵,将变换系数进行量化

 

ScalingList(缩放列表):该参数用于选择量化矩阵的使用方式。取值如下:

 

  • 0:表示不使用缩放列表,即不对变换系数进行额外的缩放。
  • 1:表示使用默认的缩放列表,即使用预定义的量化矩阵。
  • 2:表示从文件中读取缩放列表,即使用自定义的量化矩阵。需要提供ScalingListFile参数指定缩放列表文件的名称。

ScalingListFile(缩放列表文件):该参数用于指定自定义的缩放列表文件的名称。当ScalingList参数设置为2时,编码器将从该文件中读取自定义的量化矩阵。

#============ Lossless ===============       无损编码

TransquantBypassEnable:该参数对应编码器中的PPS(Picture Parameter Set)标志位,用于启用或禁用变换量化旁路(Transquant Bypass)模式。变换量化旁路模式是一种特殊的编码模式,它允许跳过变换和量化过程,直接对残差进行编码,从而实现无损压缩。取值如下: 0:表示禁用变换量化旁路模式。 1:表示启用变换量化旁路模式。

CUTransquantBypassFlagForce:该参数用于强制启用变换量化旁路模式,即使TransquantBypassEnable参数被禁用。当该参数设置为1时,编码器将强制使用变换量化旁路模式进行编码。

#============ Rate Control ============        码率控制

RateControl:该参数用于启用或禁用码率控制。码率控制是一种调整编码比特率的技术,旨在控制输出视频的比特率,以适应特定的目标比特率要求。取值如下: 0:表示禁用码率控制。 1:表示启用码率控制。

TargetBitrate:该参数用于设置目标比特率(Target Bitrate),即期望的输出视频比特率。它指定每秒传输的比特数,单位为bps(bits per second)。

KeepHierarchicalBit:该参数用于控制比特率在层次结构编码中的分配方式。层次结构编码中的比特率分配可以是均匀分配、固定比例分配或自适应比例分配。取值如下: 0:表示均匀比特率分配。 1:表示固定比例比特率分配。 2:表示自适应比例比特率分配。

LCULevelRateControl:该参数用于控制码率控制的级别。码率控制可以在图像(picture)级别或最小编码单元(LCU)级别进行。取值如下: 0:表示图像级别码率控制。 1:表示LCU级别码率控制。

RCLCUSeparateModel:该参数用于控制是否使用LCU级别独立的R-lambda模型。R-lambda模型用于根据当前LCU的复杂度和比特率要求来计算最优的量化参数。取值如下: 0:表示不使用LCU级别独立的R-lambda模型。 1:表示使用LCU级别独立的R-lambda模型。

InitialQP:该参数用于设置初始量化参数(QP)。量化参数控制编码过程中的压缩质量,较低的QP值表示更高的压缩质量,但可能会导致比特率增加。初始QP值可以影响编码的起始质量水平。

RCForceIntraQP:该参数用于强制将关键帧(I帧)的量化参数(QP)设置为初始QP值。关键帧通常在编码序列的开始或重要场景发生时出现,其压缩质量对整个序列的影响较大。启用此参数可以强制关键帧的质量与初始QP值相匹配。

#=========== RExt ============      Range Extensions,扩展HEVC的一组选项,提供了一些额外的功能和改进,以增强视频编码的效率和质量。

ExtendedPrecision: 增加内部精度以支持高位深度的视频编码。它允许在编码和解码过程中使用更高的精度,以提高编码质量。

TransformSkipLog2MaxSize: 指定变换跳过(Transform Skip)的最大尺寸。变换跳过是一种技术,允许跳过变换过程并直接对图像块进行编码,以提高编码速度和压缩效率。

ImplicitResidualDPCM: 启用隐式残差DPCM(Differential Pulse Code Modulation)用于帧内预测。这种方法可以根据像素之间的差异来编码残差,以减少编码位数。

ExplicitResidualDPCM: 启用显式残差DPCM用于帧间预测。与隐式残差DPCM类似,但应用于帧间预测模式。

ResidualRotation: 允许在熵编码之前将变换跳过和转移量绕180度旋转。这种旋转可以进一步提高变换跳过和转移量的编码效率。

SingleSignificanceMapContext: 对于变换跳过和转移量,选择单一的显著性图上下文变量来表示所有系数。这样可以减少编码所需的上下文变量数量。

IntraReferenceSmoothing: 启用帧内预测中的参考样本平滑。通过使用平均值来平滑帧内预测的参考样本,可以减少编码中的噪点和伪影。

GolombRiceParameterAdaptation: 允许从一个系数组到下一个系数组部分保留Golomb-Rice参数值。这种自适应性可以提高编码效率。

HighPrecisionPredictionWeighting: 在加权预测中使用高精度选项,以提高预测的准确性和编码质量。

CrossComponentPrediction: 启用跨分量预测,即使用不同颜色分量之间的相关性进行预测。这可以提高编码效率和图像质量。

 

posted @ 2023-06-26 22:48  划水就完事了  阅读(1052)  评论(0编辑  收藏  举报