HEVC之1:HM的使用

初学HM时配置文件很生疏,那时总结的也很青涩:

在学配置之前需懂得几个基本的C++相对路径:

../../ 表示上上层目录路径

../  表示当前目录的上层目录路径

./  表示根目录路径

懂得了这个就可以开始配置了:
打开HM文件夹就可以看见build

点击build下的.sln后缀的文件。 HM_vc9 是vs2008用的  HM_vc10是vs2008以上平台用的

工程打开后如下图操作

命令参数中-c 中的c 是 configure的意思 即配置    注意工作目录  我习惯性的是在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

(1)       下载完成后解压,文件夹中包含下图所示的内容:

不同的开发平台要选择不同的工程文件,苹果的xcode工程文件在HM.xcodeproj中,windows和linux的工程文件在build文件夹中。我所使用的是visual studio 2010,因此选择build文件夹中的HM_vc10.sln,从VS中找到目录文件,打开。

(2)在visual studio 2010中打开后,发现整个solution包含七个工程(TAppCommon,TAppEncoder,TAppDecoder,TLibCommon,TLibEncoder,TLibDecoder,TLibVideoIO,下图所示)。这些工程分别的功能在以后讨论。今天的目的仅仅是能成功将YUV文件编码成HEVC格式的码流,因此将TAppEncoder设为活动工程(在该工程上由右键->Set as StartUp Project)。

(3)编译整个Solution(F7),等待7个工程编译完成后,根目录下新生成了一个文件夹,路径为:(根目录位置\HM-10.0rc1\bin\vc10\Win32\Debug),其中有成功编译完成的两个可执行文件TAppDecoder.exe和TAppEncoder.exe,以及其他一些副产品。

(4)工程目录中的cfg文件夹中有多个预先设定好的配置文件,分别代表了不同的编码模式。该目录中的pre-sequence文件夹中指定了多个输入测试序列的配置信息。我们在这里选择encoder_intra_main.cfg作为编码参数配置,另外用akiyo_qcif.yuv作为测试序列即输入文件配置。新建一个cfg文件命名为akiyo.cfg,内容如下:

#======== File I/O ===============

InputFile                    : E:\TestSquence\176x144\akiyo_qcif.yuv

InputBitDepth                 : 8           # Input bitdepth

FrameRate                     : 30          # Frame Rate per second

FrameSkip                     : 0           # Number of frames to be skipped in input

SourceWidth                   : 176        # Input  frame width

SourceHeight                  : 144         # Input  frame height

FramesToBeEncoded             : 50         # Number of frames to be coded

将两个cfg文件拷贝到(3)中的目录下,待编码序列要依据cfg的路径存放,否则会出现找不到文件的错误。(参数设置的编码帧数在哪可以重新设置?cfg配置文件中有个FramesToBeEncoded参数指定编码的帧数,这里面还设置了待编码序列的路径、分辨率等等信息)(此步很重要到最后运行Debug->Start Without Debuging出了错,最大的错处肯定在此处因为如果在cfg文件里输入了错误的yuv文件路径,是肯定会出现failed to open input YUV file这个错误的,注意代码部分打了红色标记的就是最容易出错的地方,很多人只知道照葫芦画瓢,包括我,上面是作者的测试序列存放路径,因此要改成我们的测试序列的路径)

如果FramesToBeEncoded = 10,编码只到第9帧,原因是编码是从0开始第9帧结束,总共还是编码了10帧。

怎么新建一个cfg文件?

把设置参数按格式写到txt文件里面,然后无视警告直接把后缀名改成.cfg

(5)配置工程属性。

在TAppEncoder工程上右键单击->Properties->Configuration Properties->Debugging。将命令行参数和工作目录改成下图所示(在“Command Arguments”一栏填入-c encoder_intra_main.cfg -c akiyo.cfg,(-c就是配置config,就是读取后面配置文件的命令)表明这个编码器使用这两个配置文件所指定的参数进行编码。在Working Directory将其设置为xxx\bin\vc10\Win32\Debug,即上一步中编译生成的可执行文件的绝对路径,这两个可执行文件是两个可执行文件TAppDecoder.exe和TAppEncoder.exe),在这要特别注意,我们可以把需要使用到的配置文件(encoder_intra_main.cfg和akiyo.cfg)复制到该目录下(xxx\bin\vc10\Win32\Debug)。不然在进行编译运行时会出错如图,至于yuv测试序列可以随便放置只要你在akiyo.cfg中InputFile栏填写yuv测试序列的正确位置即可。

这一步也可以用命令行完成,效果是一样的。

(6)编译运行。Debug->Start Without Debuging->是,命令行窗口中会显示编码的信息和结果,如下图所示。

运行完后会在Debug文件夹下生成dec.yuv和str.bin这两个文件,前者是编码环路产生的重建序列,str.bin是编码过后的hevc格式的二进制码流。

调试编码程序或解码程序快速方式,F5全速运行、F9插入断点、F10单步运行

解码器程序参数为:-b str.bin -o rec.yuv,-b指定HEVC编码文件即编码输出码流文件(二进制码流),-o指定解码器输出

HEVC之1 HM的使用相关推荐

  1. HEVC官方软件HM源代码简单分析-解码器TAppDecoder

    ===================================================== H.264/H.265 官方源代码分析文章: H.264官方软件JM源代码简单分析-编码器l ...

  2. 【Codecs系列】HEVC官方软件HM源代码简单分析-解码器TAppDecoder

    目录 函数调用关系图 普通内部函数 解析函数(Parser) 熵解码函数(Entropy Decoding) 解码函数(Decode) 环路滤波函数(Loop Filter) 本文记录HEVC官方参考 ...

  3. HEVC参考软件HM的使用

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

  4. HEVC参考软件HM源码分析--帧间预测(1)--xCompressCU

    本文首先对HM中帧间预测的基本流程作简要介绍,接着对代码中关键变量的用途作出说明,最后以源代码+注释的形式进行具体分析. 备注:这位大神的博客对楼主帮助很大,解决了我的不少疑惑,最后才能顺利写下这篇博 ...

  5. [总结]HEVC熵编码和HM具体实现

    HEVC熵编码 文章目录 HEVC熵编码 熵编码原理 熵编码的基本要求 定长熵编码 变长熵编码 VLC 霍夫曼编码 指数Golomb编码 算术编码AC HEVC的CABAC HEVC的CABAC特点 ...

  6. HEVC参考软件HM源码分析--帧间预测(3)--predInterSearch

    帧间预测基本知识 对帧间预测有所了解的同学应该都知道,帧间预测操作一般都是由两个最基本也是最核心的操作组成:运动估计(ME)和运动补偿(MC). 运动估计:负责找到当前帧和参考帧之间的匹配运动矢量(M ...

  7. (转霄神)HM解码流程图

    转自雷神雷霄骅:https://blog.csdn.net/leixiaohua1020/article/details/49912013 ============================== ...

  8. HEVC率失真优化方法

    参考资料: [1]万帅,杨付正编著. 新一代高效视频编码H.265/HEVC 原理.标准与实现[M]. 北京:电子工业出版社, 2014.12. 视频率失真曲线 对于某一视频编码标准,其编码框架已经确 ...

  9. HEVC代码学习:帧间预测——MVP过程中MV的获取、传递及存储

    作为一个视频编码小白,最近开始着手啃HEVC帧间预测的代码,想用博客记录一下自己的学习过程,也想与大家分享.交流一下. HEVC代码的学习主要是参考两位大神岳麓吹雪.NB_vol_1的博客以及HM参考 ...

最新文章

  1. Bioinformatics | 预测药物相互作用的多模式深度学习框架
  2. keil5图标变成白色_PPT中高大上的图标是怎么做的?
  3. 库函数strlen源码重现及注意问题
  4. UVa11100 The Trip,2007(贪心)
  5. Chrome 浏览器降级后浏览网站不保留用户数据问题原因及解决方法
  6. RHEL修改最大文件打开数,关于epoll socket Too many open files问题的解决
  7. LeetCode动态规划 斐波那契数
  8. git for windows_手把手教会舍友玩 Git (包教包会,再也不用担心他的学习)
  9. java泛型中T和?和有什么区别
  10. linux超级管理员密码设置
  11. 人生的意义在于梦想和坚持
  12. windows如何去除桌面图标箭头
  13. 跨境电商一件代发和专线小包是什么意思?有什么区别?
  14. c/c++语言中常用的math函数
  15. Top 10 顶级项目管理工具
  16. oracle卸载完服务,ORACLE卸载安装服务启动
  17. 数据分析的六大黄金法则
  18. SpringBoot整合!docker更新镜像名称
  19. Windows、Firefox、ideal、Excel下常用快捷键
  20. 微信小程序的校园二手物品交易平台系统 uniapp 小程序

热门文章

  1. antd select option 设置字体颜色_匹配颜色是照片合成重要关键点
  2. mysql桦仔_Microsoft SQL Server 2005技术内幕:T-SQL查询笔记
  3. mysql的本地id可以随便设置马_Mysql 都会遭受哪些方面的攻击?
  4. ftp ---- vsftpd安装卸载
  5. linux mysql 数据类型_MySQL的数据类型和建库策略(转)
  6. cmd上如何运行php文件,cmd - php文件在命令行可以顺利运行,在浏览器上无法正常运行...
  7. 手机屏幕宽高像素计算_国内手机厂商纷纷支持,三星传感器终成正果!索尼还能雄起吗?...
  8. 关于Navicat 连接mysql报11001错误
  9. python 字典默认会引用 除非深拷贝
  10. 2018四川高考文科21题