代码学习0:参考软件的使用

  • 视频压缩编码标准
  • 参考软件获取
  • 参考软件的使用
  • 参考软件使用方法
    • VTM工程
    • cfg配置文件
    • 工程命令设置
      • 编码器
      • 解码器
    • 工程运行
      • 编码器
      • 解码器
    • 结果输出
      • 编码端
      • 解码端

之前对视频压缩编码的学习主要停留在原理文本的学习上,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值。

解码端

视频压缩编码参考软件代码入门相关推荐

  1. dbeaver 设置编码_苹果视频压缩编码输出软件Compressor中文版

    Compressor for Mac是一款专业的视频转码编辑工具,拥有将媒体文件转码为各种格式的功能,compressor mac中文版为Final Cut Pro X导出增加了强大功能和灵活性,co ...

  2. H.264与H.265视频压缩编码参考码率

    转载于:https://www.cnblogs.com/guanghe/p/11340220.html

  3. 【H.264/AVC视频编解码技术详解】四. 常见H.264视频编解码器(X264和JM)及参考软件JM的下载与编解码

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  4. 四. 常见H.264视频编解码器(X264和JM)及参考软件JM的下载与编解码

    常见H.264视频编解码器(X264和JM)及参考软件JM的下载与编解码 我们已经知道,H.264是一种视频压缩标准,其只规定了符合标准的码流的格式,以及码流中各个语法元素的解析方法.H.264标准并 ...

  5. 屏幕录像软件oCam入门实战视频课程-杨璞-专题视频课程

    屏幕录像软件oCam入门实战视频课程-4598人已学习 课程介绍         oCam是一个免费.中文化.操作简单.录像质量佳.又好用的屏幕录像与截屏软件,目前采用新的V264版.它可以录像或截取 ...

  6. 四. H.264视频编解码器(X264和JM)及参考软件JM的下载与编解码

    实H.264是一种视频压缩标准,其只规定了符合标准的码流的格式,以及码流中各个语法元素的解析方法. H.264标准并未规定编码器的实现或流程,产生了一些比较著名的开源H.264编解码器工程.其中H.2 ...

  7. 《深入浅出WPF》系列视频(特辑)——MVVM入门与提高(难度300+)

    原文地址为: <深入浅出WPF>系列视频(特辑)--MVVM入门与提高(难度300+) <深入浅出WPF>系列视频(特辑)--MVVM入门与提高(难度300+) 一年多没有推出 ...

  8. HEVC参考软件HM的使用

    文章写得很好,转载以防丢失 作者:66 (转载请务必注明出处) 学习HEVC的相关知识已经快一个月了,以前从来没有记笔记的习惯,现在自学,在理解和记忆上都比以前要迟钝许多,养成定期总结是非常有必要的. ...

  9. 亲测好用的视频后期合成软件:Nuke 13(完美支持12系统和m1)

    Nuke 13 for Mac是一款专业的影视后期特效合成软件,这次的nuke 13 mac版带来了更多功能和改进,比如在Nuke的3D Viewer中增加了对Hydra的支持.引入了通过Nuke中的 ...

最新文章

  1. PAT_A1148#Werewolf - Simple Version
  2. 全球及中国智能电网产业十四五规划方向及投资决策建议报告2021年版
  3. stk 坐标系_STK中文用户手册.pdf
  4. excel可编码java,Java关于前后台传输中文乱码以及Excel下载乱码解决
  5. 邻居把偶然的救急当成了依赖,怎么办?
  6. c语言调整图片分辨率,如何不改变图片分辨率,并且缩小图片质量-电脑自学网...
  7. python程序怎样在手机上_python手机文件怎么上传至电脑?
  8. 足不出户逛里约 神马搜索推出奥运会蓝光页面
  9. 2021-08-3116. 最接近的三数之和 排序+双指针
  10. Linux网络编程:libnet 移植及使用
  11. 安卓 运行 linux 桌面,安卓上运行原生Xorg和Linux桌面记录[完结]
  12. 2019数学建模比赛总结
  13. 12代酷睿不再“挤牙膏”,能为英特尔vPro远程办公带来什么?
  14. Y7000联想拯救者gtx1050Ti安装cuda9.0
  15. CCProxy + Proxifier 通过另一台电脑访问网络
  16. Liunx下Qos功能实现简析
  17. 如何保护Java程序 防止Java反编译
  18. C/C++学习笔记-指针数组、数组指针
  19. java centos 缩略图_Nginx国人开发缩略图模块(ngx_image_thumb)
  20. 蓝桥算法提高ADV-381 分割项链题解

热门文章

  1. ubuntu解决微信无法输入中文
  2. 除了迅雷,这几款下载神器也超级好用!
  3. 自定义高性能播放器, 实现边下边播缓存等功能
  4. win10多显示器设置只有主显示屏显示任务栏
  5. CDQZ多校集训题目--盛夏
  6. 7-46 新浪微博热门话题
  7. OOP和POP之间的区别
  8. html5 vr图片展示,three.js——通过 HTML5 页面呈现 VR 内容
  9. [wine5.0] 解决wine所有软件乱码(中文不显示)问题
  10. Symbian OS应用编程图形篇之架构