小艾笔记--H.264视频编解码原理整理(一)

项目代码的研究已经告一段落了。关键是公司的台式机耍小脾气了,无奈只有送去修了。所以这段时间我就来修炼编码的葵花宝典了。笔记整理的书籍是《MPEG-4_H.264视频编解码工程实践》,嫌弃我整理不好的,可以自己找pdf的文档哦,我只是为了记录下来我的学习生活,不好之处望见谅!

MPEG/H.264是主流的视频编解码算法,但其协议标准仅规定了码流语义。Xvid是MPEG-4开源视频编解码算法工程;X264是H.264开源的视频编解码算法工程。主要采用跨平台的C编写。这个JNI的部分我前面的博客也有简单的介绍。需要进行压缩就是为了节约空间,提高传输的效率。
这篇博客主要介绍编码原理的第一个部分预测,包含两个部分帧内和帧间编码。

  • 帧内编码
  • 帧间编码

首先说明一下 视频编解码的基础知识

视频的帧内空间局部连续性和帧间运动连贯性以及人眼视觉暂留现象使编码压缩成为可能。简单地说,一个视频帧可以理解成一张图片,一张图片的内部空间局部是连续的,由于对于人眼来说对于亮度比灰度要敏感的多,所以对于某一张图片来说,我可以在适当将灰度空间去掉,也就是后面说的帧内编码(处理的对象时某一张/帧);对于连续多张图片来说,由于采集的速度很快,图片与图片之间的联系很大,就是差别不大。我们可以用一张较完整的图片作为参考,其余图片只保留与上一张图片之间的差别数据,解码的时候在还原,也就是后面的帧间编码。

编码的工作机制

MPEG-4/H.264等编解码算法的工作机制基本都是混合编码,主要处理模块包括:预测、变换、量化和熵编码等。工作原理大同小异,图像帧的编码模式主要有帧内和帧间两种方式。帧内包括预测、变换、量化和熵编码等,帧间编码包括运动估计、运动补偿、变换、量化和熵编码等。帧内的预测和帧间的运动估计统称预测编码。这里说的帧内帧间编码都只是属于编码压缩处理的第一部分预测。
主要原理如下:
原理图

我的理解,图像序列是连续输入的,每间隔一段时间开关K打开帧内进行帧内编码–输出的是I帧、关键帧。关键术语以前博客有说;
其余的图片则走帧间编码–输出的P帧和B帧。

预测编码

预测编码是主要的视频编码方法。图像的当前像素点于帧内相邻的上下左右等位置的像素点相比,灰度值变化小,图像存在空间冗余;视频是活动的图像序列,人眼视觉暂留现象要求每秒至少25帧,当前图像点与前后帧的对应位置就非常的相似,图像存在时间冗余。预测编码就是解决上述的两种冗余,并分别对于着帧内编码和帧间编码

帧内预测编码

对图片的自身做相应的处理,也可以说是图像编码帧,I帧,关键帧编码等。可以说是完整的图像,压缩率很低,解码的时候的参考图像,优点是错误累计少、图像清晰。缺点是压缩率较低

主要步骤:
1.正向离散余弦变换;
2.量化;
3.Z字形扫描;
4.使用差分脉冲编码调制对直流系数进行编码;
5.使用行程长度编码对交流系数进行编码;
6.熵编码。
(具体的交流直流 本人也还没懂,慢慢学习吧)

在视频编码中,I帧的间隔分固定和自动两种方式,固定间隔:25f/s*10s=250f。自动间隔是编码系统的码率控制器根据设定的码流阀值及宏块的SAD值综合判断。

帧内编码的原理图
帧内编码原理图

从原理来看预测是对变换、量化后的系数做预测的。H.264的帧内预测根据块的大小,16*16亮度块有4种预测模式、4*4亮度块有9种、8*8亮度块有4种。预测值和当前值相减,得到预测差值,然后代替当前系数值,从而增加零值和较小值的概率,达到一定的压缩效果,这取决于图像的细腻程度。

帧间预测编码

也是主要的方法,也说成P帧、B帧编码。预测不在当前图像帧内,而是在已编码重建帧的对应位置,或其他周围预测、搜索。预测是图像在时间上的时间上先后顺序的视频帧处理。就如同一个物体在每一帧图像里面的状态,帧间预测就是两帧之间相减得到的预测差值。考虑运动轨迹,视频提出了1/2像素、1/4像素、1/8像素的运动估计,得到的预测差值会更加的准确。

帧间编码的原理图
帧间编码原理图

重建图像的插值

运动的物体,轨迹连续但像素点离散,需要用非整数像素点来表示。对于前向预测编码的参考帧来说,重建参考帧就需要在此参考帧的基础上插值出多帧非整数像素的运动轨迹的参考系。更高精度的插值则是前面较低精度的基础上继续在各个方向上插值

运动估计算法

主要是解决匹配准则和搜索算法两个主要问题;对参考帧搜索出最佳的匹配宏块,估计出物体的运动范围大小

匹配准则原理
匹配准则原理
搜索算法
搜索算法
简单的运动估计算法有三步搜索法、对数搜索法、四步搜索法、菱形搜索法、大小钻石搜索、六角形搜索等

三步搜索法:
三步搜索法
对数搜索法:
对数搜索法
由于运动轨迹多种多样,利用某一种搜索方法效率一定不高,在大多算法中都采用多种搜索算法相结合的方式

H.264视频标准的运动估计算法
H.264视频标准的运动估计算法
我已彻底的凌乱了,好可怕啊!!!

运动补偿插值
根据匹配准则得到最佳匹配快和物体的运动范围大小,相减得到我们想要的差值,计算时我们对应宏块位置偏移运动得到匹配宏块,然后根据运动矢量选择插值帧:水平、垂直、斜角、最后减法运算完成运动补偿。

今天到此结束了,原理大部分是截取原文的,毕竟自己还有很长的一段路要走,慢慢学习!在这里监督自己每天都学习一点。如果有不对的欢迎大家指出哦。我是Mr.小艾。

当你在运行Armbian系统的设备上想要更换软件源(通常是为了加速下载或解决地区限制的问题),你可以按照下面的步骤操作: ### 更换Armbian系统默认源 #### 步骤一:备份原始文件 首先,你需要对现有的`sources.list`文件做一份副本。这可以帮助你在遇到问题的时候快速恢复。 ```bash sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak ``` #### 步骤二:编辑 sources 文件 接下来就是实际修改的地方了,我们打开 `sources.list` 进行编辑: ```bash sudo nano /etc/apt/sources.list ``` #### 步骤三:更改镜像地址 将原有的内容替换为你所选择的新镜像服务器URL,例如阿里云、清华大学等提供的国内镜像站点链接。对于大部分用户来说,可以考虑使用如下的清华源配置作为参考模板之一(假设你正在使用的Armbian版本基于Debian Buster): ```plaintext deb https://mirrors.tuna.tsinghua.edu.cn/debian buster main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian buster main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian buster-updates main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian buster-updates main contrib non-free ``` 注意:如果你使用的是其他分支或是非官方库,则需要相应调整上述路径。 #### 步骤四:更新包索引并测试新源 保存并关闭文本编辑器之后,通过执行以下命令来让新的设置生效,并检查是否能正常工作: ```bash sudo apt-get update && sudo apt-get upgrade -y ``` 如果一切顺利的话,那么你就成功地完成了更换Armbian软件源的操作!
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值