初识HEVC/H.265

2024-02-10 02:58
文章标签 初识 h.265 hevc

本文主要是介绍初识HEVC/H.265,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这一年来,公司不断地打算上H.265。但似乎支持H.265码编的芯片不多,但业内不断宣扬,我们也要跟上时代。趁休息,就去了解了解相关的东西,以免被问到回答不上来。

一、标准

HEVC,是“High efficiency video coding ”的简称,也叫H.265。很多年前就开搞了,到2013年终于出了1.0版本。到目前为止,一共发布了3个版本。最新为2015年4月的3.0版本。不同版本个别语法有一点点不同,但整体上框架没变。比如1.0版本的VPS前面的字段为vps_reserved_three_2bits,占用2比特。而在后续版本该字段分别为vps_base_layer_internal_flag和vps_base_layer_available_flag,分别占用1比特。类似的还有很多。

网上很多文章使用1.0版本的语法,建议在学习时把3个版本的标准文档都下载。

HEVC/H.265学习大本营地址:https://hevc.hhi.fraunhofer.de/。这个网站上有标准下载地址、相关论文,以及HEVC测试模型HM代码。

标准下载地址:http://www.itu.int/rec/T-REC-H.265/en

关于H.265的分析工具,网络有不少,但都是收费的,而且价格还不菲。试用版本要么只能用几天,要么只能看视频前20帧。不过对于初步了解H.265似乎足够了。

CodecVisa工具下载:http://www.codecian.com/

H265VideoESViewer工具下载:http://www.jongbel.com/manual-analysis/hevch-265-video-es-viewer/

网络上有很多讲解和分析的文章,此处不展开。

二、测试模型HM

HM代码下载:https://hevc.hhi.fraunhofer.de/svn/svn_HEVCSoftware/tags/。似乎该网站没有提供压缩包下载,只能使用svn下载。目前最新版本16.6。如果下载整个SVN,占用空间将会很大,因此只需下载自己想研究的版本即可。另外要说明一点,不同版本对应的HEVC标准版本不同。如果标准使用最新的,HM代码也建议使用最新的。

HM可以在linux或windows编译,说实话,跟踪代码及调试,还是windows方便。我安装的是VS2010,双击\build\HM_vc10.sln即可进行编译。生成文件位于:\bin\vc10\Win32\Debug。该目录有几个exe文件:

解码器:TAppDecoder.exe
编码器:TAppEncoder.exe

编码使用示例:
1、YUV原始序列:suzie_qcif.yuv
2、从\cfg目录拿拷贝encoder_intra_main.cfg文件。
3、新建YUV配置文件suzie_qcif.cfg,内容:
#======== File I/O ===============
InputFile                     : suzie_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         # 编码50帧

在cmd命令行输入:
TAppEncoder.exe -c encoder_intra_main.cfg -c suzie_qcif.cfg

之后便会生成HEVC码流文件str.bin。

下面再介绍一下编码参数。
在cfg目录下有很多encoder_xx.cfg文件,这些文件就是重要参数的配置文件,比如profile、GOP大小、QP,等。
BitstreamFile:输出码流文件,上面示例encoder_intra_main.cfg文件使用的就是默认值str.bin。
InputFile:输入文件,上面示例是另建文件配置。
SourceWidth、SourceHeight:输入源文件的宽、高
InputBitDepth:输入位深,常见YUV一般为8位。
InternalBitDepth:编码器使用的位深。等同于输出位深OutputBitDepth。
FrameRate:帧率
FramesToBeEncoded:编码帧数,注意,当profile为main-still-pictur,必须为1
Profile:指定码流的profile。取值有:main main10 main-still-picture main-RExt, high-throughput-RExt, main-SCC,等等。
Level:指定码流的level。取值:none、1, 2, 2.1, 3, 3.1, 4, 4.1, 5, 5.1, 5.2, 6, 6.1, 6.2, 8.5。
Tier:指定码流的tier,只有main或high。
IntraPeriod:I帧间隔
GOPSize:GOP大小
注意:IntraPeriod和GOPSize这两个参数有点复杂,一些都选1,即都是I帧,如果不是,还要设置一些参数,例子见encoder_lowdelay_main_rext.cfg。
QP:指定量化参数。默认为30,HEVC范围为0~51。值越大,压缩越好,文件体积越小,但质量越差。

李迟 2015.9.6




这篇关于初识HEVC/H.265的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/695970

相关文章

Linux操作系统 初识

在认识操作系统之前,我们首先来了解一下计算机的发展: 计算机的发展 世界上第一台计算机名叫埃尼阿克,诞生在1945年2月14日,用于军事用途。 后来因为计算机的优势和潜力巨大,计算机开始飞速发展,并产生了一个当时一直有效的定律:摩尔定律--当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 那么相应的,计算机就会变得越来越快,越来越小型化。

docker学习系列(一)初识docker

在第一版本上线之后公司,我们决定将之前使用的开源api文档项目转移到本公司的服务器之上,之前用的是showdoc,showdoc利用的是php技术,作为java程序员表示需要快速部署php环境以及apach容器都需要时间,所以采用第二种方法,即利用docker进行快速部署(虽然学习成本也不比php少)。 一、docker简介 docker的官网是https://www.docker.com,

框架template初识

框架初识 框架就是一个别人帮我们搭好的舞台,造好了很多现成的工具供我们使用,让开发过程更快速、简洁。 Gin框架介绍 Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。 Gin是一个用Go语言编写的web框架。它是一个类似于martini 但拥有更好性能的API框架, 由于使用了 httprouter,速度提高了近40倍。 第一个Gin示例 package mai

【数据结构】--初识泛型

1. 包装类 在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。 1.1 基本数据类型和对应的包装类 除了 Integer 和 Character, 其余基本类型的包装类都是首字母大写。 1.2 (自动)装箱和(自动)拆箱 装箱(装包): 把 基本数据类型 变为 包装类类型 的过程 叫做装箱。 反汇编指

初识Linux · 进度条

目录 前言: 1 缓冲区和回车换行 2 进度条 前言: 我们目前学习了些许知识,已经足够支持我们写一个非常非常小的项目了,即进度条,相信大家都有过下载游戏,等待游戏更新完成的时候,那么此时就有一个进度条,代表着游戏的更新进度,那么我们今天就来模拟实现这个过程,在此之前,我们需要一些预备知识。 1 缓冲区和回车换行 回车换行?是的,你没有看错,相信不少人对换行有一定的误解,我们

Linux初识线程

前言 前面在介绍进程的时候,说过进程的内核表述是"进程是承担资源分配的基本实体",但是我们至今都没有介绍如何理解他?本期我们就会介绍! 目录 前言 一、再谈地址空间和页表 1、OS对物理内存的管理 • 为什么4KB是OS进行I/O的基本单位? 2、再谈页表 • 二级页表 • 如何找到一个变量的所有字节? • 虚拟地址是如何转为物理地址的? • 理解动态内存管理 • 为什么对

初识命名空间

1.创建两个命名空间 ip netns add host1 ip netns add host2 2.  查看命名空间 ip netns ls 3 、 创建veth ip -netns host1 link add veth0 type veth peer name host1-peer 4、 查看命名空间接口  ip -netns host1 address 5、 把hos

Linux进程初识:OS基础、fork函数创建进程、进程排队和进程状态讲解

目录 1、冯诺伊曼体系结构 问题一:为什么在体系结构中存在存储器(内存)? 存储单元总结: 问题二:为什么程序在运行的时候,必须把程序先加载到内存? 问题三:请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。 2、操作系统 2.1操作系统的概念: 我们首先要明白什么是管理: 2.2为什么要有操作系统? 2.3操作系统如何保证稳定和安全呢?(利用系统调用函数解决)

初识string(一)and内存管理

对类和对象的补充:缺省参数在函数定义中从右向左依次赋值,如果从右向左有一个参数没有赋值缺省参数,则左边的变量就不能在赋缺省参数,类中的变量可以赋缺省参数并且没有限制。 在类定义中我们总是看到函数后加const。这其实是调用常量类对象或类对象的意思。 一、引言 俗话说“工欲善其事,必先利其器。”一门语言创造的初衷一定是为了交流和记录重要的事。计算机语言肯定也不例外,虽然计算机语言创造的初衷单纯

数据可视化01-初识echart

1、echart官网 http://echarts.baidu.com/index.html 2、echart特性 ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的矢量图形库 ZRender,提供直观,交互丰富,可高度个性