HEVC之路0:HM16.18的运行+码流分析
1.HM下载
- HM不能直接网页下载,因为它是采用svn来管理代码的,因此需要利用svn下载,这里采用TortoiseSVN(软件下载地址为https://tortoisesvn.net/)进行下载。

- 下载并安装TortoiseSVN,在桌面任意位置右键,打开repo-browser

- 在弹出来的URL框填入HM的下载地址:https://hevc.hhi.fraunhofer.de/svn/svn_HEVCSoftware/tags/
svn_HEVCSoftware分成三个大类:
trunk:主干程序,是最新的HM主线版本。
branches:分支程序,是扩展的HM版本。
tags:各个版本的HM版本。
- 然后就能看到HM相关文件夹,所发布的HM版本在tags文件夹中

- 在需要的版本中右键选择“checkout”,即可进行下载。这里选择的是最新版HM-16.17
关于版本,可以看到早期版本中有“RExt”字样,RExt表示Format Range Extension,用于支持4:0:0,4:2:2,4:4:4的颜色空间和额外比特深度。但到HM16.0后,RExt已经并入HM主线,因此不再单独列出RExt。而对于有”SCM”字样版本,即包含SHVC,MV-HEVC,3D-HEVC版本分支。
2.HM运行
- 在HM16.18->build文件夹中,点击对应的VS版本打开,这里以HM_vc2015.sln为例,可以看到右侧出现9个项目。

- 右击“解决方案‘HM_vc2013’(9个项目)”->”生成解决方案”。debug,win32可选,与系统是否是64位的无关,不影响工程运行
生成成功后,在HM16.7下会生成一个“bin”文件夹,在bin\vc2013\Win32\Debug中会有2个可执行文件:TAppEncoder.exe和TAppDecoder.exe
- 我们主要对HEVC编码器进行研究,即将yuv格式码流编码成HEVC格式数据,所以主要关注TAppEncoder。
右击解决方案中“TAppEncoder”->“设为启动项目”
再右击“TAppEncoder”->”属性”->”配置属性”->”调试”
在工作目录栏指定工作目录路径,这里在HM16.7下创建了一个workspace的文件夹作为工作目录。
在命令参数栏中需要填写的是用到的配置文件名,包含2个:
(1)编码器配置文件: encoder_intra_main.cfg,文件路径:D:\HEVC\HM16.7\cfg。并把该文件复制到workspace中。
(2)视频源配置文件(该用于指定输入yuv测试文件,分辨率,待编码帧数等):为了日后使用方便,在workspace中新建一个bitstream.cfg的配置文件,配置的编写复制HM16.7\cfg\per-sequence中的相应配置即可。(如,我们需要压缩BasketballDrill视频文件,则打开BasketballDrill.cfg并把其中的配置复制到bitstram.cfg中。但注意要修改InputFile的地址,这个后面会提到)。
指定源数据文件
下载地址1:http://ftp.kw.bbc.co.uk/hevc/hm-15.0-anchors/bitstreams/i_main/ ;
该地址下载下来的是.bin格式的265压缩文件,需经265解码器解码成yuv格式文件才可为编码器使用。
下载地址2(已经失效):https://pan.baidu.com/share/link?shareid=976413622&uk=204312922#list/path=%2F
该地址下载下来的是.yuv的yuv文件,可用于265编码器编码。这里下载了一个BasketballDrill_832x480_50.yuv文件用于编码测试- 修改配置文件
在HM16.7\cfg\per-sequence中找到BasketballDrill.cfg,并把其中的配置复制到bitstream.cfg
修改bitstream.cfg中的配置:
InputFile修改为码流路径,注意路径不能有中文字符,斜线方向不影响。
FramesToBeEncoded修改为5.即只编码5帧,这里只为缩短编码时间。
修改encoder_intra_main.cfg中的配置:
将QP值修改为51,以减小压缩后的码流量大小
注意:以上配置不能乱改,一旦不满足规范,则程序无法正常运行。 (如IntraPeriod和GOPSize这两个参数的修改就有点复杂,一些都选1,即都是I帧,如果不是,还要设置一些参数,而不是简单改变数值。例子见encoder_lowdelay_main_rext.cfg)。
- 运行程序
运行过程中出现如下界面,运行结束后在workspace中生成2个文件:str.bin和rec.yuv。前者是编码后的码流文件,后者是重建的yuv格式图像
3.码流分析
目前HEVC有几款不错的码流分析软件,CodecVisa,Elecard HEVC Analyzer等,但CodecVisa收费,Elecard HEVC Analyzer可以找到破解版,下面来简单介绍Elecard HEVC Analyzer的使用方法。
打开Elecard HEVC Analyzer,然后打开编码得到的.bin文件。






4.错误分析
(1)编码输入的分辨率错误,只能改好重新编码一下。
5.参考链接
https://blog.csdn.net/u011025888/article/details/78841829
- https://blog.csdn.net/lin453701006/article/details/52775820
HEVC之路0:HM16.18的运行+码流分析的更多相关文章
- 【转】Sqlite 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该...
开发环境: vs2010+.net framework 4.0+ System.Data.SQLite.DLL (2.0)今天在做Sqlite数据库测试,一运行程序在一处方法调用时报出了一个异常 混合 ...
- 11.2.0.4 aix下运行第二个节点root.sh报错处理
第二个节点运行root.sh报错如下 Entries will be added to the /etc/oratab file as needed by Database Configuration ...
- C#程序集问题:混合模式程序集是针对“v2.0.50727”版的运行时生成的.....
今天在把以前写的代码生成工具从原来的.NET3.5升级到.NET4.0,同时准备进一步完善,将程序集都更新后,一运行程序在一处方法调用时报出了一个异常: 混合模式程序集是针对“v2.0.50727”版 ...
- 混合模式程序集是针对“v2.0.50727”版的运行时生成的
混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集. 由于“system.data.sqlite.dll”不完整造成的. 在 ...
- [笔记] Ubuntu 18.04源码编译安装OpenCV 4.0流程
标准常规安装方法安装的OpenCV版本比较低,想尝鲜使用4.0版本,只好源码安装. 安装环境 OS:Ubuntu 18.04 64 bit 显卡:NVidia GTX 1080 CUDA:10.0 c ...
- Qt 学习之路 2(18):事件
Home / Qt 学习之路 2 / Qt 学习之路 2(18):事件 Qt 学习之路 2(18):事件 豆子 2012年9月27日 Qt 学习之路 2 60条评论 事件(event)是由系统 ...
- 《从0到1学习Flink》—— Mac 上搭建 Flink 1.6.0 环境并构建运行简单程序入门
准备工作 1.安装查看 Java 的版本号,推荐使用 Java 8. 安装 Flink 2.在 Mac OS X 上安装 Flink 是非常方便的.推荐通过 homebrew 来安装. brew in ...
- 1.MongoDB报错 Failed to connect 127.0.0.1:27017 Mongo运行错误
1.Mongo运行错误:Failed to connect 127.0.0.1:27017 Mongo运行错误:Failed to connect 127.0.0.1:27017,reason:err ...
- android studio从1.5更新到2.0后terminal无法运行gradle命令,提示无法找到gradle命令
android studio从1.5更新到2.0后terminal无法运行gradle命令,提示无法找到gradle命令. 'gradle' 不是内部或外部命令,也不是可运行的程序 或批处理文件. 设 ...
随机推荐
- day-25-类的继承顺序-父类对子类的约束-多态-队列和栈
一.类的继承顺序 只要继承object类就是新式类 不继承object类的都是经典类 在python3 中所有的类都继承object类,都是新式类 在python2 中不继承object的类都是经典类 ...
- 6- MySQL条件查询与通配符
-数据库表中一般包含大量的数据,很少需要查询表中的所有行,通常只会根据特定的需要提取表中的一部分数据.这个时候需要制定查询条件,及过滤条件. -在select语句中,数据库根据where字句中指定的查 ...
- 使用netty实现socks5协议
一.socks5协议简介 SOCKS是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递. SOCKS是"SOCKetS"的缩写[注 1]. 当防火墙后的客户端要访问外 ...
- Hook android系统调用的实践
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/71037182 一.环境条件 Ubuntukylin 14.04.5 x64bit ...
- hdu3074 线段树求区间乘积(单点更新)
题意: 给你n个数,两种操作,(1) 把第b个数改成c (2)算出b-c的乘积,结果对1000000007取余. 思路: 线段树单点更新,简单题目,不多解释,具体看代码. #i ...
- POJ2528线段树段更新逆序异或(广告牌)
题意: 可以这样理解,有一条直线,然后用n条线段去覆盖,最后问全部都覆盖完之后还有多少是没有被完全覆盖的. 思路: 一开始想的有点偏,想到起点排序,然后..失败了,原因是忘记了题目 ...
- .NET Design Patterns
设计模式分组 GoF设计模式著作中的23种设计模式分为3组:创建型(Creational).结构型(Structural)和行为型(Behavional). 创建型 创建型处理对象构造和引用.它们将对 ...
- 使用constexpr时遇到的小坑
最近在使用constexpr的时候无意中踩了个小坑. 下面给个小示例: #include <iostream> constexpr int n = 10; constexpr char * ...
- (转)如何优雅的使用rabbit mq
RabbitMQ无疑是目前最流行的消息队列之一,对各种语言环境的支持也很丰富,作为一个.NET developer有必要学习和了解这一工具.消息队列的使用场景大概有3种: 1.系统集成,分布式系统的设 ...
- multiset容器erase函数的误用
<从缺陷中学习C/C++>第3章库函数问题,本章主要介绍库函数的使用中会遇到的问题.使用库函数可以降低软件开发的难度,提高代码编写的效率.本节为大家介绍multiset容器erase函数的 ...