HEVC学习1—总框架与程序结构

要开始学术了。

我的研究方向是视频编解码,主要研究领域为HEVC,目前新手小白一枚。

这里通过博客的方式记录一下自己的学习过程,顺便也给与我一样的人一个参考。


一、HEVC简介

要对HEVC的总体架构有所了解(百度百科什么的其实一大堆),建议参考这两篇文章,具体可以谷歌学术,找到pdf下载

1.Overview of the High Efficiency Video Coding (HEVC) Standard

这篇文章便是传说中的 HEVC overview 官方文档啦

想看中文翻译是怎么样的,可以看看这篇文章《解读下一代视频压缩标准HEVC (H.265)

2. High Performance, Low Complexity Video Coding and the Emerging HEVC Standard

这篇文章介绍了HEVC的发展历史,以及HEVC中采用的一些重要技术。

其他的文章还包括有,我现在也在慢慢地看。

列表如下:

 3. A Hybrid Video Coder Based on Extended Macroblock Sizes, Improved Interpolation, and Flexible Motion Representation

 4. Video Coding Using a Simplified Block Structure and Advanced Coding Techniques

 5. Video Compression Using Nested Quadtree Structures, Leaf Merging, and Improved Techniques for Motion Representation and Entropy Coding

 6. Improved Video Compression Efficiency Through Flexible Unit Representation and Corresponding Extension of Coding Tools

 7. Comparison of the Coding Efficiency of Video Coding Standards—Including High Efficiency Video Coding (HEVC)

 8. HEVC Complexity and Implementation Analysis

 9. Block Partitioning Structure in the HEVC Standard

10. Quadtree Based Nonsquare Block Structure for Inter Frame Coding in High Efficiency Video Coding

11. Block Merging for Quadtree-Based Partitioning in HEVC

12. Decoder-Side Motion Vector Derivation for Block-Based Video Coding

13. HEVC Deblocking Filter

14. Sample Adaptive Offset in the HEVC Standard

15. Transform Coefficient Coding in HEVC

16. Comparative Rate-Distortion-Complexity Analysis of HEVC and AVC Video Codecs

17. High Throughput CABAC Entropy Coding in HEVC

18. Intra Coding of the HEVC Standard

19. Adaptive Global Motion Temporal Filtering for High Efficiency Video Coding

20. Parallel Scalability and Efficiency of HEVC Parallelization Approaches

21. HEVC Lossless Coding and Improvements

22. Rate-Distortion Optimized Reference Picture Management for High Efficiency Video Coding

23. Performance and Computational Complexity Assessment of High-Efficiency Video Encoders

HEVC的官方详细文档见这里:phenix.it-sudparis.eu/jct/doc_end_user/current_document.php?id=7243


二、HM

HEVC的官方测试程序为HM。HM的代码见:https://hevc.hhi.fraunhofer.de/svn/svn_HEVCSoftware/tags/

大家可以下载一个svn,Windows下的请搜索 TortoiseSVN,使用方法可以参考这篇博客

TortoiseSVN使用方法:http://www.cnblogs.com/blsong/archive/2010/09/02/1816124.html

关于HM的使用和参数配置参考了这篇文章:

http://blog.csdn.net/hevc_cjl/article/details/8169182

这位博主很不错,分享了大量的代码注释,并讲解了一些重要的概念和代码。

测试中主要使用的工程为 TAppEncoder 和 TAppDecoder,前者为编码器,后者为解码器。

编码器的输入参数为-c "cfg/encoder_randomaccess_main.cfg" -c "cfg/per-sequence/BQSquare_416x240_60.cfg"

加引号的目的是使得引号内的内容作为一个参数传递(避免路径中的空格带来的影响)

如图所示:


建议release版本编译运行,除非是自己要调试错误采用debug,毕竟编码过程比较慢。

运行的结果一般是 str.bin 和 rec.yuv两个文件,

会放在指定的工作目录中(上图中的“工作目录参数”指定的目录下)

其中str.bin就是编码的结果,即HEVC格式的视频文件,

而 rec.yuv 是编码中重建的视频(和原始输入yuv文件相比会有些不同)。


TAppDecoder是解码器的工程,

运行这个工程的参数为 -b str.bin -o rec2.yuv

其中 -b 参数指定了 HEVC编码文件,而 -o 指定了解码器的输出。

这里输出设置为 rec2.yuv 主要是为了和编码器编码重建的 rec.yuv 对比开来。

这两个文件在代码无误的情况下应该内容完全一致,否则说明你改动的代码出现了问题,

导致了解码出现了错误。


如何对比两个yuv文件是否一致,推荐使用 YUVplayer,自己百度可以下载到,

界面比较小巧,也比较易于使用。这里就不做详细介绍了。


明白了这些之后,再开始新的学习吧,一步一步学习新的算法概念,

并且尝试将自己想的算法添加到代码中,或者替换部分代码把。

你可能感兴趣的:(HEVC)