HEVC 编码速率控制

news/2024/5/20 23:51:50/文章来源:https://blog.csdn.net/fantasy_ARM9/article/details/129177064

视频传输带宽通常都会受到一定的限制,为了在满足通信带宽和传输时延限制的情况下有效传输视频数据,保证视频业务的播放质量,需要对视频编码过程进行速率控制,所谓速率控制,就是通过选择一系列编码失真尽量小,速率控制属于码率失真优化的范畴,速率控制算法的重点是确定于速率相关的量化参数Quantization Parameter,QP ,其他编码参数优化方法已经介绍过了。

一 视频编码速率控制

前面详细剖析了视频编码的码率失真特性,同一视频不同的编码参数将产生不同的编码速率和视频质量。因此,可以通过调节编码参数使得编码速率与目标速率一致,以达到速率控制的目的。在码率失真优化准则下确定的编码参数中,视频编码速率主要与量化参数密切相关,并遵循一定的规律,速率控制的主要工作是建立编码速率与量化参数的关系模型,根据目标码率确定视频编码参数中的量化参数。

基于前面的码率失真优化知识,一个视频序列的速率控制问题可以描述为,在总编码比特数小于或者等于Rc的条件下,为每一个编码单元确定最优的量化参数,使得总失真最小,即。

Q = arg.min sigmaDi

以图像作为编码单元为例,其中N为该序列包含的图像数,Di为第i幅图像的失真,Q = Q1,,,Qn 为各图像的最优量化参数,实际视频编码标准中拥有独立量化参数的最小单位通常是宏块(H265/HEVC为CU),如果允许控制宏块级的量化参数,速率控制就需要确定所有宏块的最优量化参数。另外,对于变速率的情形,可能需要控制每个编码单元使其满足一定的编码比特限制。

Q = arg.min sigmaDi。 s.t.Ri <= Rj,c

其中 Rj,c 为第i个编码单元的编码比特数限制。

由于视频编码算法采用了大量的帧内,帧间预测技术,导致编码单元的码率失真性能相互依赖,直接根据式子利用码率失真优化技术确定编码单元的量化参数复杂度更高,这在前面已经介绍过。因此,实际的速率控制方案通常会被分解为两个步骤。

(1)考虑视频在空域,时域的相关性,根据总的目标比特数确定每个编码单元的最优目标比特数,这被称为比特分配。

(2)依据编码速率与量化参数的关系模型,为每个编码单元根据其目标比特独立确定量化参数。

比特分配的目的是为每个编码单元分配最优的目标比特数,使得视频编码后总的失真最小,即利用码率失真优化技术为每个编码单元分配目标比特数,可以描述为。

Rt = (Rt,,,Rn) = arg.min sigmaDi

由于各比那吗单元的码率失真性能相互依赖,因此该步骤的关键是考虑各编码单元之间码率失真性能的相关性,实现最优比特分配。

当每个编码单元的目标比特数确定后,速率控制的第二步骤即为,根据每个编码单元的目标比特数独立确定其量化参数,可以描述为

Qi = arg.min Di

由于编码单元的编码速率主要与量化参数相关,其他编码参数的影响较小,因此编码速率与量化参数有着较为确定的关系,可以基于这一关系直接根据编码单元的目标比特数确定其量化参数。

这一环节需要强调的是,编码速率和量化参数的关系与视频的内容特性密切相关,图12.1 给出了视频序列BQSquare采用HM10.0测试模型得到的编码速率,采用低延时模型,每一幅图像使用的相同的量化参数32,GOP大小为4。从图12.1可以看出,在量化参数保持不变的情况下,编码速率随着编码时间的变化而变化,在第3-4秒之间,编码比特数迅速增加,这是因为视频序列发生了场景切换,时域复杂度较高,而在4-7秒内,编码比特数下降,这是因为这段视频内容的时域和空域复杂度较低,一般来说,当量化参数一定时,视频序列空,时域复杂度越高,产生的编码比特数也越高,反之,则会产生较少的编码比特数,编码速率将会随着视频内容的变化而不断变化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_73411.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一篇了解分布式id生成方案

系统唯一ID是我们在设计一个系统的时候常常会遇见的问题&#xff0c;也常常为这个问题而纠结。生成ID的方法有很多&#xff0c;适应不同的场景、需求以及性能要求。所以有些比较复杂的系统会有多个ID生成的策略。下面就介绍一些常见的ID生成策略。 1.数据库自增长序列或字段 …

DCL单例模式是如何保证数据安全的?

承接上文证明CPU指令是乱序执行的DCL单例&#xff08;Double Check Lock&#xff09;到底需不需要volatile&#xff1f;new对象这一步&#xff0c;对应着汇编层面的这3个指令&#xff0c;指令0是申请空间&#xff0c;设置默认值&#xff1b;指令7是执行构造方法&#xff0c;设置…

计算机网络概述 第二部分

5.网络分层 ①OSI 7层模型 数据链路层 (Data Link Layer) 实现相邻&#xff08;Neighboring&#xff09;网络实体间的数据传输 成帧&#xff08;Framing&#xff09;&#xff1a;从物理层的比特流中提取出完整的帧 错误检测与纠正&#xff1a;为提供可靠数据通信提供可能 …

stm32f407探索者开发板(二十一)——窗口看门狗

文章目录一、窗口看门狗概述1.1 看门狗框图1.2 窗口看门狗工作过程总结1.3 超时时间1.4 为什么需要窗口看门狗1.5 其他注意事项二、常用寄存器和库函数2.1 控制寄存器WWDG_ CR2.2 配置寄存器WWDG_ CFR2.3 状态寄存器WWDG_SR三、手写窗口看门狗3.1 配置过程3.2 初始化窗口看门狗…

【微信小程序】-- 常用视图容器类组件介绍(六)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#…

LeetCode 725. 分隔链表

LeetCode 725. 分隔链表 难度&#xff1a;middle\color{orange}{middle}middle 题目描述 给你一个头结点为 headheadhead 的单链表和一个整数 kkk &#xff0c;请你设计一个算法将链表分隔为 kkk 个连续的部分。 每部分的长度应该尽可能的相等&#xff1a;任意两部分的长度差…

绿通科技在创业板开启申购:超额募资约19亿元,收入依赖贴牌

2月23日&#xff0c;广东绿通新能源电动车科技股份有限公司&#xff08;下称“绿通科技”&#xff0c;SZ:301322&#xff09;开启申购。据贝多财经了解&#xff0c;绿通科技本次上市的发行价为131.11元/股&#xff0c;发行数量为1749万股&#xff0c;市盈率73.75倍。 按发行价…

逆向 x品会 edata

逆向 x品会 edata 版本 7.88.6 帖子底部有参考说明 charles 抓包 目标字段 edata edata 搜索关键字 跟进找到是edata >>> KeyInfo native esNav 方法 private static native String esNav(Context context, String str, String str2, String str3, int i); …

XX项目自动化测试方案模板,你学会了吗?

目录 1、引言 2、自动化实施目标 3、自动化技术选型 4、测试环境需求 5、人员进度安排 总结感谢每一个认真阅读我文章的人&#xff01;&#xff01;&#xff01; 重点&#xff1a;配套学习资料和视频教学 1、引言 文档版本 版本 作者 审批 备注 V1.0 Vincent XXX …

不会前端没事,用GWT Boot和Spring Boot构建Web程序

本文介绍了一种使用Java构建Web应用程序的方式&#xff0c;其中GWT或者J2CL是必不可少的&#xff0c;另外还有多个UI框架可以配套使用&#xff0c;比如Domino UI、VueGWT、GWT Material Design (GMD)&#xff0c;React4J、WebFX&#xff0c;还有一些活跃低的框架GWTBootstrap3、…

【解决报错】‘jupyter‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件

在当前路径下使用cmd打开后&#xff0c;输入jupyter notebook出现如下错误&#xff1a; 通常可能出现的问题有两种&#xff1a; &#xff08;1&#xff09;你本身就没安装jupyter&#xff0c;如果你配置了anaconda&#xff0c;就自带jupyter&#xff0c;直接跳到问题2。如果确…

Apache Commons FileUpload Apache Tomcat拒绝服务漏洞解决方案

近日&#xff0c;安全狗应急响应中心关注到Apache官方发布安全公告&#xff0c;披露在Apache Commons FileUpload&#xff1c;1.5版本中存在一处拒绝服务漏洞&#xff08;CVE-2023-24998&#xff09;。Commons FileUpload是Apache组织提供的免费的上传组件。由于Apache Commons…

面向对象的一点小想法

接口里的方法可以写也可以不写 如果写的话&#xff0c;那么得是默认方法&#xff0c;需要在前面加个default 对于默认方法&#xff0c;能够重写&#xff0c;或者直接继承&#xff08;也就是直接用&#xff09; 比如下面&#xff1a; 就直接调用了接口的默认函数nibuhao&#…

R统计绘图-NMDS、环境因子拟合(线性和非线性)、多元统计(adonis2和ANOSIM)及绘图(双因素自定义图例)

这个推文也在电脑里待了快一年了&#xff0c;拖延症患者&#xff0c;今天终于把它发出来了。NMDS分析过程已经R统计-PCA/PCoA/db-RDA/NMDS/CA/CCA/DCA等排序分析教程中写过了。最近又重新看了《Numerical Ecology with R》一书,巩固一下知识&#xff0c;正好重新整理了一下发出…

Nacos源码启动

一、下载源码 为保证速度&#xff0c;国内推荐使用gitee&#xff1a;https://gitee.com/mirrors/Nacos.git 二、导入IDE中 参考之前文章配置国内Maven私服&#xff0c;快速更新工程。 三、启动过程&#xff0c;各种问题 找到启动入口&#xff1a; 先直接启动测试下&#xff…

oscp渗透测试认证该从哪里学起

当我决定要考OSCP时就马上打开浏览器&#xff0c;试图一下弄清楚课程内容和通过考试的方法&#xff0c;我不断的将指南和资源添加到书签中。渐渐的书签里存了许多资料&#xff0c;以至于我不知道从哪里开始学&#xff0c;学习命令吗&#xff1f;我学习编码吗&#xff1f;我使用…

北京/东莞/广州/深圳2023年上半年软考(中/高级)报名>>>

软考是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职称资格考试。 系统集成…

扩展学习之时间戳趣谈

目录 一、介绍 二、转换工具 三、获取Unix时间戳的指令 四、普通时间转Unix时间戳 五、扩展 一、介绍 时间戳&#xff1a;一份数据在特定时间点存在的可验证的数据。 Unix时间戳&#xff08;英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp&#xff09;&…

valgrind 移植到arm64 平台上总结

valgrind 介绍valgrind是查找内存泄漏的神器&#xff0c;你可以自动的检测许多内存管理和线程的bug&#xff0c;避免花费太多的时间在bug寻找上&#xff0c;使得你的程序更加稳固。 下载地址&#xff1a;https://valgrind.org/downloads/ 本人下载的是valgrind-3.19.0valgrind编…

.Net与程序集

一个简单的C#程序回想一下我们第一个.net 程序 hello world&#xff0c;它具有那些步骤呢&#xff1f;打开visual studio创建一个C# console的项目build运行程序这时候就有一个命令行窗口弹出来&#xff0c;上面打印着hello world。我们打开文件夹的bin目录&#xff0c;会发现里…