x264 中的行级码率控制
执行
x264 中的行级速率控制是通过 VBV(视频缓冲验证器)系统实现的,以便在各个帧内而不是仅在帧级别提供更精确的比特率控制。
核心实现围绕x264_ratecontrol_mb()函数ratecontrol.c:1496展开,该函数在每个宏块行的末尾被调用,以根据实际消耗的位数...
    阅读更多
 
    
    
    指数哥伦布编码(Exponential-Golomb Coding,简称 Exp-Golomb)**在 H.264 中的具体应用。
指数哥伦布编码是一种无损熵编码方法,属于可变长度编码(VLC)的一种。它的核心设计思想是:为值越小、出现概率越高的非负整数分配越短的码字。这与视频编码中很多语法元素(如运动向量差、...
    阅读更多
 
    
    
    熵编码是一种无损压缩技术。它的核心任务是将编码器产生的所有语法元素,如预测模式、运动矢量差、量化后的变换系数等,用尽可能少的比特来表示。
其基本原理是信息熵理论:为出现概率高的符号分配更短的码字,为出现概率低的符号分配更长的码字。
H.264 主要提供了两种熵编码方案:
  CAVLC (Context-...
    阅读更多
 
    
    
    在编码过程中,为了压缩数据,会对块的变换系数进行量化。
由于每个块是独立处理的,量化误差在块与块之间会产生不连续性。当视频被解码重建后,这些不连续性就会在块的边界上形成明显的方块感,这就是块效应。
去块滤波的目的,就是在解码端对解码后的图像进行平滑处理,以减少或消除这种块效应,从而提高视频的主观和客观质量。
...
    阅读更多
 
    
    
    变换将残差块的能量集中到了少数低频系数上,但这些系数仍然是精度较高的数值,需要大量比特来表示。量化的核心作用有两个:
  信息减少: 这是压缩过程中最主要的信息损失源。它通过降低变换系数的精度来大幅减少需要编码的数据量。这是一个不可逆的过程,丢失的精度在解码端无法恢复。
  创造零值: 量化过程会将大量(特别...
    阅读更多
 
    
    
    变换将空间域的残差信号转换为频域系数。
在进行帧内或帧间预测后,会得到一个**残差块。这个块虽然数据范围比原始图像小,但仍然存在大量的空间相关性。
变换的目的有:
  去相关: 打破像素之间的空间依赖性,使得每个值都尽可能独立。
  能量集中: 将信号的大部分能量集中到少数几个低频系数上。
变换之后,...
    阅读更多
 
    
    
    Skip 模式 和 Direct 模式的核心思想都是利用时域或空域上运动矢量的相关性,通过 继承 或 推算 的方式来获得当前宏块的运动信息,从而省去编码运动矢量和参考帧索引本身,甚至连残差数据(Residual)都不用编码,因此能达到极高的压缩率。
它们通常被用于画面中运动很小或者运动规律很强的区域,例如静止的...
    阅读更多
 
    
    
    帧间预测利用时间上的相似性。视频序列中,相邻的帧通常内容非常相似,只是发生了微小的移动。帧间预测就是利用 时间相关性 来消除数据冗余。
其基本原理是:不再编码完整的当前帧,而是将其与已经编码好的参考帧(通常是前一帧或后一帧)进行比较,找到当前帧中某个区域在参考帧中的最佳匹配块。然后,只需编码这个位置偏移信息(运...
    阅读更多