视频压缩编码参考软件代码入门


之前对视频压缩编码的学习主要停留在原理文本的学习上,18年9月份新学期才开始尝试深入一点了解代码。第一次面临这么大工程量的代码框架,虽然只是想对其进行一个小小的优化,但是在不了解其他部分框架的时候,盲目改代码就会出错,可能造成编解码不一致等情况。因此趁寒假快到,空出一点时间回炉重造,希望从菜鸟初级入门能够更系统地学习并整理下~
参考软件:VTM3.0

(参考 “岳麓吹雪”大佬博客《HEVC代码学习0:HM使用+码流分析教程》:https://blog.csdn.net/lin453701006/article/details/52775820)

视频压缩编码标准

自上世纪80年代以来,人类一直在研究视频的编解码方法,并制定了相应的国际化标准和准则,视频编码标准规范了压缩后视频码流的格式以及解码器,使得不同设备编码后的码流能够在不同设备上正常解码播放,保证各种编解码设备和软件的互通性。目前国际上制定编解码标准的两大组织分别是:

  • 国际电信联盟电信标准化部门ITU-T(International Telecommunication Union-Telecommunication Standardization Sector);
  • 国际标准组织/国际电工委员会ISO/IEC(International Organization for Standardization/International Electro technical Commission);

在过去的时间里,前者的视频编码专家组VCEG(Video Coding Experts)推出了H.26X系列。后者由其动态图像专家组MPEG(Moving Picture Experts Group)推出了MPEG系列视频编码标准。在2003年,两者联合推出了H.264/AVC视频标准,目前还在广泛使用。随着时间发展,2013年,两者推出最新的国际视频标准H.265,即HEVC标准。

2015年10月,VCEG和MPEG成立JVET工作组Joint Video Exploration Team,该工作组的任务是制定下一代视频编码标准。2018年4月,JVET正式命名下一代视频编码标准为多功能视频编码(Versatile Video Coding,VVC),其相应的测试模型为VTM。目前VVC标准还在制定过程中。

参考软件获取

目前VTM的获取方式:
https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM
可以通过git下载。

补充一下HEVC的参考软件HM的获取方式:
https://hevc.hhi.fraunhofer.de/svn/svn_HEVCSoftware/
分成三个大类:
trunk:主干程序,是最新的HM主线版本。
branches:分支程序,是扩展的HM版本。
tags:各个版本的HM版本。
可以通过TortoiseSVN下载:
在这里插入图片描述

参考软件的使用

对于HM软件,通过TortoiseSVN下载后,可以直接进入下载目录./build,打开.sln文件即可打开工程。
在这里插入图片描述

但是对于VTM需要先安装cmake进行编译:
第一步:在下载目录下新建空文件夹: mkdir build
第二步:打开cmake文件,选择source code路径和build路径;
第三步:点击"configure",当出现"configure done"证明编译成功;
在这里插入图片描述
第四步:点击"Generate",生成.sln文件;
第五步:可以直接点击"Open Project",也可以同上述HM一样,直接进入build目录下打开.sln文件。
以上上述编译过程结束后才能打开VTM项目。

参考软件使用方法

VTM工程

VTM工程的文件组织结构:

  • build文件:包含VTM的工程文件NextSoftware.sln;
  • cfg文件:里面是关于VTM编码配置文件.cfg,可以直接用文本工具打开编辑;
  • source文件:是VTM的c++源文件,包含编码器和解码器的源文件;
  • bin文件:包含VTM工程的编译结果,EncoderApp.exe和DecoderApp.exe等等;
    目前VTM3.0包含以下13个工程。
    在这里插入图片描述
    其中比较重要的:
  • DecoderAnalyserApp:
  • DecoderApp: 解码器的应用函数
  • EncoderApp: 编码器的应用函数
  • CommonLib: 编码器和解码器公用的库函数
  • DecoderLib: 解码器的库函数
  • EncoderLib: 编码器的库函数

cfg配置文件

cfg文件的参数需要进行配置,其中包括VTM工程本身的参数配置和测试序列的参数配置两个文件,均在./cfg目录下。
在这里插入图片描述

  • VTM工程参数配置:
    如上图,工程配置文件分为4种:encoder_intra_vtm.cfg(即All_intra,全帧内预测模式),encoder_lowdelay_P_vtm.cfg,encoder_lowdelay_vtm.cfg,encoder_randomaccess_vtm.cfg。
    其中参数如QP,对工具如deblocking、SAO的开关等等都在配置文件中,以及编码端的码流文件、重构yuv文件名称都可以控制;
    在这里插入图片描述
  • 测试序列参数配置:
    在路径./cfg/per-sequence中,有标准测试条件下测试序列的配置。
    如下图,参数分别是序列名称、比特深度、亮度色度模式、帧率、从第几帧开始编码、序列图像宽度、序列图像高、共编码多少帧。
    其中如果更换其他序列,必要修改的是序列名称以及宽度高度,具体要开始编码多少帧根据需求进行设定。
    在这里插入图片描述

工程命令设置

编码器

打开属性页,填写命令参数和工作目录:
命令参数格式:“-c 两个cfg配置文件” + “>> 日志txt文件”
如-c encoder_intra_vtm_qp32.cfg -c SlideEditing.cfg >> log_file.txt
其中 >> 是不覆盖写,> 是覆盖写。
而工作目录是在./bin目录下的子目录,具体需要根据选择的调试器是Debug或者Release,即编译后生成的EncoderApp.exe所在目录。
在这里插入图片描述

解码器

打开属性页,填写命令参数和工作目录:
其中解码端的命令参数和编码端的不同,不再有配置文件,而是根据编码器生成的码流文件生成重构yuv。
命令格式为"-b 码流文件” + “-o 解码输出重构文件” + “>> 解码器日志文件”
如,-b str.bin -o res_decoder.yuv >> log_decoder.txt
在这里插入图片描述

工程运行

编码器

  • 将编码器"EncoderApp"设置为启动项目,直接开始运行即可。
    在这里插入图片描述
    最后编码器的性能结果会被记录在命令参数的日志文件中,生成的码流文件和重建视频文件是在参数配置cfg文件内设置的,路径即编码器自己设置的工作目录下。

解码器

  • 将解码器“DecoderApp”设置为启动项目,直接开始运行。
    最后解码器的解码性能结果会被记录在命令参数的日志文件中,-o生成的重构视频文件,都在解码器设置的工作目录下。

结果输出

编码端

在参考软件中,一般的信息都已经被打印在日志文件中,包括一些工具的开关状态、编码结果,以及全部的编码时间。
在这里插入图片描述

每编完一帧后输出的的编码信息,其中重要的是:POC(对应图像时域播放顺序的序号,这里POC 0 就是时域播放第一帧)、TId(temporal id 时域层序号,一个帧只能参考时域层低于他的帧,不能参考更高层的帧),总比特数,YUV各自的PSNR值。

解码端

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值