初识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

相关文章

hevc和H.264格式的区别

HEVC(High Efficiency Video Coding)和H.264(也称为Advanced Video Coding,AVC)都是视频压缩标准,但它们之间存在一些显著的区别,主要集中在压缩效率、资源需求和兼容性方面。 压缩效率 HEVC,也被称为H.265,提供了比H.264更高的压缩效率。这意味着在相同的视频质量下,HEVC能够以大约一半的比特率进行编码,从而减少存储空间需求和

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

C语言入门系列:初识函数

文章目录 一,C语言函数与数学函数的区别1,回忆杀-初中数学2,C语言中的函数 二, 函数的声明1,函数头1.1,函数名称1.2,返回值类型1.3,参数列表 2,函数体2.1,函数体2.2,return语句 三,main函数四,函数的参数与传递方式1,实参和形参1.1,函数定义(含形参)1.2,函数调用(使用实参) 2,参数传递方式2.1,值传递2.2,引用传递 五,函数原型与预声明1,

任务5.1 初识Spark Streaming

实战概述:使用Spark Streaming进行词频统计 1. 项目背景与目标 背景: Spark Streaming是Apache Spark的流处理框架,用于构建可伸缩、高吞吐量的实时数据处理应用。目标: 实现一个实时词频统计系统,能够处理流式数据并统计文本中的单词出现频率。 2. 技术要点 Spark Streaming集成: 与Spark生态的其他组件如Spark SQL、ML

初识 SpringMVC,运行配置第一个Spring MVC 程序

1. 初识 SpringMVC,运行配置第一个Spring MVC 程序 文章目录 1. 初识 SpringMVC,运行配置第一个Spring MVC 程序1.1 什么是 MVC 2. Spring MVC 概述2.1 Spring MVC 的作用: 3. 运行配置第一个 Spring MVC 程序3.1 第一步:创建Maven模块3.2 第二步:添加 web 支持3.3 第三步:配置 w

测试辅助工具(抓包工具)的使用1 之初识抓包工具(fiddler)

1.什么是抓包? 说明:客户端向服务器发送请求以及服务器响应客户端的请求,都是以数据包来传递的。 抓包(packet capture):通过工具拦截客户端与服务器交互的数据包。 抓包后可以修改数据包的内容  2.为什么要抓包? 确定bug是前端研发人员的还是后端研发人员的 3.如何抓包? 1)使用抓包工具Fiddler 2)Fiddler介绍: Fiddl

UDP编程初识

复习: TCP     每个TCP套接字都有一个发送区,我们可以使用SO_SNDBUF来更改缓冲区的大小,当进程调用write时,内核从该应用进程的缓冲区中复制所有数据到套接字的缓冲区。如果该套接字的发送缓冲区容不下该应用进程的所有数据(或是应用进程的缓冲区大于套接字的发送缓冲区,或是套接字的发送缓冲区已有其他数据),该应用进程将被投入睡眠(这里的套接字是阻塞的),内核将不从write系统

第十六章(二) 套接字初识

 数据传输:  尽管可以通过 read 和 write 交换数据,但这就是这两个函数所能作的一切。但是如果想要指定选项,从多个客户端接收数据包,或者发送带外数据,就需要使用6个为数据传递而设计的套接字函数。  三个传送数据的套接字函数: <span style="color:#000000;">ssize_t send(int sockfd, void *buf, size_t n

第十六章(一) 套接字初识

 地址格式  一个地址标识一个特定通信域的套接字端点,地址格式与这个特定的通信域相关。为使不同的格式地址能够传入到套接字函数,地址会被强制转化成一个通用的地址结构: struct sockaddr{sa_family_t sa_family; //address familychar sa_data[]; //variable-length address...};

Libevent源码分析之event结构体初识

I/O框架库以库函数的形式,封装了较为底层的系统调用,给应用程序提供了一组更为便捷的接口 各种I/O框架库的实现原理基本相似,要么以Reactor模式实现,要么以Proactor模式实现,要么同时用这两种模式。 拿基于Reactor模式的I/O框架库来说,包含以下几个组件: 1、句柄     I/O框架库要处理的对象,即I/O事件、信号和定时事件,统一称为事件源。一个事件源通常和