(本人原创,欢迎转载,但希望附上原文链接,谢谢)
前言

经典的视频编解码标准有H.264和HEVC,这两种标准的编码框架(见图1)大致相同,只是其中某几个模块的技术得到了一定的发展,目前在研究的H.266也是基于这个基本框架,在用成百上千次的运算复杂度去获取一点点的编码效率提升。

图1 经典视频编码框架
具体理解
1. 总体把握
这个框架,左上角是我们输入的视频,其实也就是描述一个运动的多帧图像的集合,这段视频要经过中间的盒子进行编码,再进行解码;右下角是解码输出的视频序列。
整个编码过程有一个编码控制,控制一些模式的参数,比如说四叉树的划那些块需要再划分,哪些块不需要,这些都是控制参数,具体的包括对帧内预测、帧间预测、变换、量化的一些控制参数,最后需要传给解码端。
对一段视频序列的处理,首先是从第一帧图像开始。对这幅图像进行slice行划分,再进行块划分,最小单元是编码单元(coding unit)。第一帧图像的编码是从左上角第一个块开始的,然后再按照zigzag之字形的路线进行下一个块的编码,这样保证接下来每一个块都能够参考左边和上面的编码块,提升帧内预测的性能。
第一帧图像编码完成以后,就是下一帧图像的编码。此时,图像既可以做帧内预测,也可以做帧间预测,因为前一帧的图像已经编码完成,就可以拿来作为预测帧。帧内预测与上一段的过程大致相同;帧间预测呢,因为视频序列一般都会描述运动情况,所以为了提高帧间预测性能,我们要对运动情况也做一个预测,这就涉及到运动估计和补偿。运动估计,从字面上讲,其实就是估计预测我的运动,那参照的肯定是我当前帧的前一帧图像了。对于我目前编码块来说,去前一帧当中搜索与我这个编码块最相近的块,然后对比就得出运动矢量,衡量出这两帧的运动情况。搜索相近块的方法有很多,也有很多快速算法,感兴趣的可以去针对性的学习。运动补偿呢,就是得到了运动矢量,去前一帧图像当中取出这个和我最相近的块,因为这个参考块是不会传到解码端的,只有运动矢量会传到解码端,所以根据运动矢量去解码端解出来的前一帧图像中取出那个最相近的块,这个块就是我的预测块,再去相减得到残差完成帧间预测。
然后重复上面的过程,完成视频序列中所有帧的处理,在解码端解码就可以了。
有一个重点,要敲一敲黑板。那就是编解码预测块要选择统一的问题了。比如,视频序列第一帧的第一个块,预测值是提前置入的128,在解码的时候把残差加上128就恢复了信息;解码端第二个块在做预测的时候,是以第一个块作为预测块,但一定是以第一个块的解码块作为预测,再把残差送入编码器编码,最后在解码器处理。此时解码端,把前一个块解出来,加上此时的残差,得到我当前块的解码块。这样编码端和解码端的误差就只来自于残差在编码过程中的损失。如果,再对第二个块编码时,以第一个块的原始块作为预测,把这部分残差去做编码;在解码端得到这个处理后有失真的残差,在把前一个块进行解码得到解码块,两者相加得到第二个块的解码块。这样,误差就由两部分组成,残差编码前后的失真和前一个块编码前后的失真,误差一步一步累计,最后会严重影响编码质量。所以,在编码器当中,也要有解码部分,图中虚线框就是解码器的部分。
解码端的处理,其实就是编码的反过程,但处理顺序相反。编码的第一步是预测,再是变换、量化、编码。所以在解码端要先对残差做个熵解码,再做反量化、反变换,得到处理后的残差。再对前一个图像块做解码,这就是当前块预测块的信息。把残差加上预测块的信息,就实现了解码的全过程。
2. 编码序列第一帧第一个块的处理
第一帧图像的第一个块,块信息要传给编码控制端,决定此时的一些模式参数,这些模式控制着伺候的预测、变换、量化和熵编码。
接下来就是做预测的过程,此时只有帧内预测,没有帧间预测。由于是第一个块,没有其他块可以参考,但为了减少编码信息量,我们就选择像素的中间值128作为参考值,“帧内预测模块”会把此时的块和128做差值,这就是残差。残差再经过变换、量化,此时的残差值,会存到两个buffer里,一个是放在熵编码前,最后进行熵编码;一个是反量化前,最后用来解码给下一个块作为预测。 熵编码后就得到我们编码的码流。熵编码是无损过程,量化和变换都是有损过程。此时的编码码流中,包括编码好的残差值和控制数据
3. 编码序列第一帧第二个块的处理
第一帧第二个块,只有帧内预测,也没有帧间预测。但此时做帧内预测,就可以把前一个块作为参考,但要注意是前一个块的解码块作为预测值。所以,编码路线相当于第一帧第一块来说,多了把上一个块熵编码之前的残差做反量化和反变换。此时的编码码流中,包括编码好的残差值和控制数据
4. 编码序列第一帧其他块的处理
其他块的处理,顺序是按照zigzag的顺序,如图2所示;具体处理和之前所讲的基本相同。

图2 块的编码顺序
5. 编码序列第二帧第一个块的处理
第二帧第一个块,有帧内预测和帧间预测。帧内预测是把128作为预测值,帧间预测是去前一帧当中搜索最相近的块先做运动估计,再做运动补偿得到残差值。然后变换、量化,此时残差值存入buffer,再做熵编码。此时的编码码流中,包括编码好的残差值、运动数据和控制数据。
6. 编码序列第二帧第二个块的处理
第二帧第二个块的处理和第二帧第一个块基本相同,但帧内预测的参考值不同,此时的参考值是第一个块的解码值。
7. 编码序列第二帧其他块的处理
其他块的处理,顺序是按照zigzag的顺序,具体操作和之前所讲的基本相同。
8. 编码序列其他帧的处理
编码序列的其它帧就是迭代重复上述过程,难的开头做完了,后面就是迭代重复啦。
至此,编解码基本框架就介绍结束啦。我们下期同一时间再见~

经典视频编解码框架理解相关推荐

  1. 视频编解码标准情况概述

    视频编解码技术框架 现有的视频编解码框架实际上从上世纪70年代以来几乎没有大的变化. <图片来源:贾川民, 赵政辉, 王苫社,等. 基于神经网络的图像视频编码[J]. 电信科学, 2019, 3 ...

  2. 深入浅出理解视频编解码技术

    导读:随着移动互联网技术的蓬勃发展,视频已无处不在.视频直播.视频点播.短视频.视频聊天,已经完全融入了每个人的生活.Cisco 发布的最新报告中写道,到 2022 年,在移动互联网流量中,视频数据占 ...

  3. 深入理解视频编解码技术----基于H.264标准及参考模型 读书笔记

    书名: <深入理解视频编解码技术--基于H.264标准及参考模型> 第一章 1.各种变换,如DCT, 离散傅里叶变换等,是为了变换到另一个域中,便于对图像进行压缩(如果加入预测,残差值会更 ...

  4. 【从零开始】理解视频编解码技术

    [从零开始]理解视频编解码技术 auxten ​ CovenantSQL 联合创始人 ​关注他 1,263 人赞同了该文章 转载自: https://github.com/leandromoreira ...

  5. 视频编解码学习之二:编解码框架

    http://www.cnblogs.com/xkfz007/archive/2012/07/29/2613824.html 第四章 视频编码基础 1. 压缩码流 语法:码流中各个元素的位置关系 01 ...

  6. 视频编解码之理论概述 和即时通信

    前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的.有关实时 ...

  7. 各种音视频编解码标准

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...

  8. 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...

  9. 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式 详解

    http://blog.csdn.net/wishfly/article/details/50187417 编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运 ...

最新文章

  1. python画图-python画图的两种方法
  2. python的运行窗口-在 Python 窗口中执行工具
  3. 【PAT乙级】1039 到底买不买 (20 分)
  4. ubuntu 13.04 安装 GRUB customizer
  5. 四位共阳极数码管显示函数_新手求助四位共阳数码管显示函数
  6. 使用Handlerf发送消息或使用Handler轮询时,报错IllegalStateException:This message is already in use.;...
  7. iOS学习笔记-自己动手写RESideMenu
  8. 【报告分享】百度大脑AI技术成果白皮书2018-2019.pdf
  9. 单个正态总体均值的区间估计_数理统计第20讲(单一正态总体区间估计)
  10. gf(2 4)有限域的乘法c语言实现,有限域GF(2^n)的C语言实现浅析
  11. 搞笑很好玩的14个缎子
  12. 机器学习:CS 229 - Machine Learning - Supervised Learning cheatsheet
  13. 蓝桥杯嵌入式CT117E硬件开发平台经验分享11 | 第九届蓝桥杯国赛题
  14. 4年前端狗,面试被虐,如何翻身?
  15. 两阶段市场投标策略。 电力市场程序。 日前日内竞价 提出了日前电力市场和实时电力市场下充电站的投标策略
  16. Qiyuan-python接小球游戏2.0
  17. 相约2023 | 第 20 期高级转录组分析和R数据可视化火热报名中!!!
  18. win10关闭杀毒防护
  19. 文凯博士出席2021珠海全国高性能计算机学术年会
  20. IPS的原理以及使用手册(cisco4240)

热门文章

  1. 从1到n整数中1出现的次数(python 实现)
  2. SQL Server访问远程数据库,并把其中的一个数据库复制到本地
  3. Python高级培训——Num2之类的方法重写、property、运算符重载
  4. Python数据分析项目讲解:分析世界五百强企业数据
  5. 定制化MES系统如何拒绝平庸化?实现高效率?
  6. HDOJ 1848 Fibonacci again and again
  7. vue轮播图实现点击图片跳转到外部链接
  8. SVN和Git对比梳理
  9. (三)pandas开源课程学习笔记——探索性数据分析
  10. neutron安装完成后验证