这是我HEVC系列的第一篇博客,接触视频编解码知识不久,因而想记录下来学习过程以备随时查看。
HEVC即H265,于2013年正式发布,较之前代H264拥有更好的性能。
首先对于视频编解码的概念:顾名思义,视频编解码就是先将原始视频编码成码流(二进制形式),然后再通过解码还原成图像。此操作的核心即压缩,否则原始视频的直接传输代价太大;不难发现在编码的过程大多数情况实际上是有损的,但是通过相应的方式能够使其拥有良好的效果。同时编码会涉及到预测的随机内容,故而其得到的码流不是唯一的;而同一码流解码得到的视频却必然相同。
HEVC编码框架
1. 四叉树划分
和h264将图片划分成多个16*16的宏块不同,hevc采用的是四叉树的自适应的方式,从一个ctu开始,每次划分为四块cu直到8*8的块,比较划分前后的cost来决定是否划分。
2. inter/intra
在h264中只存在inter(帧间预测);而在hevc中inter和intra(帧内预测)同时存在,并根据二者的比较对相应的块选取适宜的预测方式。
inter:我们不难发现在视频中,相邻帧在绝大多数情况下的相似度极高,因此可以通过对相邻帧的搜索找到相似度高的块,避免重复编码,减少冗余。即时间相关性。
intra:在单张图片内,我们可以找到其空间相关性进行帧内预测,例如某一像素点对于相邻点的变化一定是渐进的等等,因而intra是具有极大的可行性的。
3. 变换量化
hevc在进行DCT变换时一并完成量化,相互结合降低复杂度。
4. 滤波
由于视频的处理是基于块的,因此块的边缘会出现方块效应,采用滤波可以有效减弱甚至消除方块效应。
5. 熵编码
就是将在处理中需要保存的数据通过熵编码转化为二进制,即码流。hevc采用的熵编码的方式为cabac。