当前位置: 首页 > news >正文

HEVC 速率控制(码控)介绍

视频编码速率控制

  1. 速率控制: 通过选择一系列编码参数,使得视频编码后的比特率满足所有需要的速率限制,并且使得编码失真尽量小。
  2. 速率控制属于率失真优化的范畴,速率控制算法的重点是确定与速率相关的量化参数(Quantization Parameter,QP)。
  3. 速率控制的主要工作是建立编码速率与量化参数的关系模型,根据目标码率确定视频编码参数中的量化参数。
  4. 实际的编码速率控制方案通常会被分解成两个步骤:
    ○ 考虑视频在空域、时域的相关性,根据总得目标比特数确定每个编码单元的最优目标比特数,这被称为比特分配
    ○ 依据编码速率有量化参数的关系模型,为每个编码单元根据其目标比特数独立确定其量化参数
  5. 由于编码单元的编码速率主要与量化参数相关,其他编码参数的影响较小,因此编码速率与量化参数有着较为确定的关系,可以基于这一关系直接根据编码单元的目标比特数确定其量化参数。
  6. 当量化参数一定时,视频序列空、时域复杂度越高,产生的编码比特数也越高。
    在这里插入图片描述

缓冲机制

  1. 视频的编码速率与编码参数、编码结构、视频内容等诸多因素密切相关,速率控制算法通常无法保证实际编码速率与目标速率完全一致;

  2. 为了减小实际编码速率与目标速率的差别,通常会在编码器和创术信道间建立一个数据缓存区,称“缓冲(buffer)机制”,用于平滑编码速率与信道速率之间的差别。
    在这里插入图片描述

  3. 缓冲机制可以使编码速率更好地匹配信道速率,但它的存在不但会消耗一定的存储空间,而且会引入延迟;所以缓冲区的大小一般由允许最大时延及运营成本决定

  4. 为了设计含有缓冲区的速率控制算法,通常将缓冲区的动态变化过程用流体流量模型来表示。

  5. 为了有效发挥缓冲区的作用,需要将缓冲区内的数据量维持在一定的水平,以应对信道速率的变化以及编码速率与目标速率的匹配误差;

  6. 使用缓冲区的视频编码速率控制的基本思想:如果实际编码速率比可用的信道带宽高,则多余的比特会在缓冲区中积累;当缓冲区中的比特数累积到一定的高度时,速率控制算法会采用一定措施适量减小实际编码速率,以降低缓冲区的充盈度;反之,当缓冲区充盈度低于一定程度时,速率控制算法会适量增加实际编码速率,使得缓冲区充盈度回升至一定水平。
    在这里插入图片描述

速率控制技术

  1. 首先为编码单元进行目标比特分配,即根据视频内容、缓冲区状态和信道带宽为编码单元分配恰当的目标比特数;进而为编码单元独立确定量化参数实现分配的目标比特,其关键是确定量化参数,因此这个缓解称为量化参数确定。
    在这里插入图片描述

  2. 目标比特分配
    ■ 一个视频序列拥有大量的编码单元,直接对编码单元进行目标比特分配过于复杂,通常采用分级的方式来简化目标比特分配问题,依次可以是 GOP 级、图像级、宏块级;
    ■ 实际编码单元的失真并不是加性的,视频序列的质量并不是所有图像质量的求和或求平均,图像的质量也不是所有宏块质量的求和或求平均,视频时空域质量的一致性已经成为了衡量速率控制算法性能的一个重要方面。

  3. 量化参数确定
    ■ 关键是建立速率-量化参数 (R-QP) 模型。

h265 速率控制

  1. 以往标准所推荐的速率控制算法不能直接用于 h265中,主要因为:时域预测技术使帧间的率失真性能关系复杂;新的帧内预测及运动信息的空间预测使得 CTU 间也有具有复杂的率失真性能依赖关系;新的 CABAC 技术更好的利用了变换系数间的相关性,使得 R-Q 关系更加复杂。
  2. h265 仍然采用传统的两步骤方式:目标比特分配和量化参数确定;
    ○ 目标比特分配的核心在于,考虑视频帧率失真间的相互依赖关系实现图像级的目标比特分配,考虑视频内容的 CTU 级的目标比特分配;
    ○ 量化参数的核心在于,根据视频内容建立编码比特数与量化参数的关系模型;

JCTVC-K0103速率控制算法

  1. JCTVC-K0103 是 h265 测试模型 HM10.0 的速率控制算法,该速率控制算法的主要分两个步骤:根据目标码率为不同编码单元分配目标比特数;根据 R 和拉格朗日因子,拉格朗日因子与 QP 的关系模型确定不同编码单元的量化参数。
    目标比特分配: GOP 级目标比特分配、图像级目标比特分配、CTU 级目标比特分配
    量化参数确定: 双曲函数能够很好地反映 h265 视频码率和失真之间的关系;
    在这里插入图片描述

  2. 量化参数 QP 与 拉格朗日因子之间的关系:
    在这里插入图片描述

  3. 量化参数确定后,即可对当前图像进行编码,该图像编码完成后可得实际编码比特数 bpp^,利用 bpp^可更新参数埃尔法和百塔,以便候选图像速率控制时使用。
    在这里插入图片描述

  4. CTU 级量化参数的确定方法和图像级类似,首先根据目标比特数与拉格朗日因子的 关系得到拉格朗日因子,第 m 个 CTU 的拉格朗日因子为:
    在这里插入图片描述

  5. 需要注意的是,相邻两个 CTU 的 QP 差异不得大于 1,当前 CTU 与其所属图像的 QP 差异不得大于 2。

参考

  1. 新一代高效视频编码H.265HEVC原理、标准与实现 [万帅,杨付正 编著] 2014年版。

相关文章:

HEVC 速率控制(码控)介绍

视频编码速率控制 速率控制: 通过选择一系列编码参数,使得视频编码后的比特率满足所有需要的速率限制,并且使得编码失真尽量小。速率控制属于率失真优化的范畴,速率控制算法的重点是确定与速率相关的量化参数(Quantiz…...

四大软件测试策略的特点和区别(单元测试、集成测试、确认测试和系统测试)

四大软件测试策略分别是单元测试、集成测试、确认测试和系统测试。 一、单元测试 单元测试也称为模块测试,它针对软件中的最小单元(如函数、方法、类、模块等)进行测试,以验证其是否符合预期的行为和结果。单元测试通常由开发人…...

ingress-nginx controller安装

文章目录 一、ingress-nginx controller安装环境 1.1 部署yaml1.2 镜像1.3 安装操作 一、ingress-nginx controller安装 环境 kubernetes版本:1.27.1操作系统:CentOS7.9 1.1 部署yaml deploy.yaml apiVersion: v1 kind: Namespace metadata:labels:…...

开源快速开发平台:做好数据管理,实现流程化办公!

做好数据管理,可以提升企业的办公协作效率,实现数字化转型。开源快速开发平台是深受企业喜爱的低代码开发平台,拥有多项典型功能,是可以打造自主可控快速开发平台,实现一对一框架定制的软件平台。在快节奏的社会中&…...

基于深度学习的裂纹图像分类研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

TypeScript入门学习汇总

1.快速入门 1.1 简介 TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 标准。 TypeScript 由微软开发的自由和开源的编程语言。 TypeScript 设计目标是开发大型应用,它可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在…...

Vue3使用vxetable进行表格的编辑、删除与新增

效果图如下: vxetable4传送门 一、引入插件 package.json中加入"vxe-table": "4.0.23",终端中执行npm i导入import {VXETable, VxeTableInstance...

JUC 并发编程之JMM

目录 1. 内存模型JMM 1. 1 主内存和工作内存 1.2 重排序 1. 内存模型JMM Java内存模型是Java虚拟机(JVM)规范中定义的一组规则,用于屏蔽各种硬件和操作系统的内存访问差异,保证多线程情况下程序的正确执行。Java内存模型规定了…...

k8s集群中安装kibana 7.x 踩坑

1. FATAL ValidationError: child "server" fails because [child "port" fails because ["port" must be a number]] 解决办法: 在环境变量中指定端口: - name: SERVER_PORTvalue: 5601 2. Kibana FATAL Error: [elast…...

CSS的一些基础知识

选择器: 选择器用于选择要应用样式的HTML元素。常见的选择器包括标签选择器(如 div、p)、类选择器(如 .class)、ID选择器(如 #id)和伪类选择器(如 :hover)。选择器可以根…...

解决多线程环境下单例模式同时访问生成多个实例

如何满足单例:1.构造方法是private、static方法、if语句判断 ①、单线程 Single类 //Single类,定义一个GetInstance操作,允许客户访问它的唯一实例。GetInstance是一个静态方法,主要负责创建自己的唯一实例 public class LazySi…...

转转闲鱼交易猫源码搭建

后台一键生成链接,独立后台管理 教程:修改数据库config/Conn.php 不会可以看源码里有教程 下载程序:https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3...

设计模式精华版汇总

以下是个人整理的设计模式汇总,将会持续更新工作和面试中经常用到的设计模式。 设计模式-装饰者模式(包装模式)- 案例分析和源码分析​​​​​​ 设计模式-代理模式:控制访问的设计模式 - 案例分析 设计模式-门面模式&#xf…...

uniapp实现带参数二维码

view <view class"canvas"><!-- 二维码插件 width height设置宽高 --><canvas canvas-id"qrcode" :style"{width: ${qrcodeSize}px, height: ${qrcodeSize}px}" /></view> script import uQRCode from /utils/uqrcod…...

金融行业软件测试面试题及其答案

下面是一些常见的金融行业软件测试面试题及其答案&#xff1a; 1. 什么是金融行业软件测试&#xff1f; 金融行业软件测试是针对金融领域的软件系统进行验证和确认的过程&#xff0c;旨在确保软件在安全、稳定、可靠和符合法规要求的条件下运行。 2. 解释一下金融软件中的风险…...

强化学习QLearning 进行迷宫游戏和代码

强化学习是机器学习里面的一个分支。它强调基于环境而探索行动、学习&#xff0c;以取得最大化的预期收益。其灵感来源于心理学中的行为主义理论&#xff0c;既有机体如何在环境给予的奖励或者惩罚的刺激下&#xff0c;逐步形成对刺激的预期&#xff0c;产生能够最大利益的习惯…...

Vue2 第九节 过滤器

&#xff08;1&#xff09;定义&#xff1a;对要显示的数据进行特定格式化后再显示 &#xff08;2&#xff09;语法&#xff1a; ① 注册过滤器 1&#xff09;Vue.filter(name, callback) 全局过滤器 2&#xff09; new Vue({filters:{}}) 局部过滤器 ② 使用过滤器 1&…...

Swift 对象数组去重

使用 reduce 方法去重 使用 reduce 方法结合 contains 方法可以实现去重。reduce 方法用于将数组的元素进行累积计算&#xff0c;而 contains 方法用于检查元素是否已经存在于结果数组中。 struct SearchRecord: Equatable {let id: Intlet name: String }let records [Sear…...

代码随想录算法训练营day52 300.递增子序列 674.最长连续递增子序列 718.最长重复子数组

题目链接300.递增子序列 class Solution {public int lengthOfLIS(int[] nums) {int[] dp new int[nums.length];Arrays.fill(dp, 1);for(int i 0; i < nums.length; i){for(int j 0; j < i; j){if(nums[i] > nums[j]){dp[i] Math.max(dp[i], dp[j] 1);}}}int r…...

Android 面试题 虚拟机、进程、线程 七

&#x1f525; 安卓虚拟机 &#x1f525; 虽然Android程序是使用Java语言开发的&#xff0c;当然&#xff0c;现在也可以使用kotlin语言。但是实际上我们开发出来的Android程序并不能运行在JVM上&#xff0c;而是只能运行在一个类似JVM的Android虚拟机上。Android虚拟机有两种&…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...