视频编解码 — 码控算法

news2025/2/21 20:25:01

目录

码控算法 

码控算法的类型

具体操作过程如下

复杂度求解

帧组级

帧级

GOM级


码控算法 

        用算法来控制编码器输出码流的大小,码控就是为一帧图像选择一个合适的QP值的过程。

一帧图像的画面确定了之后,画面的复杂度和QP值几乎决定了编码之后的大小。由于编码器无法决定画面的复杂度,因此码控的目标就是选择一个合适的QP值,以此来控制编码后码流的大小。

码控算法的类型

CBR (恒定码率) ,VBR (动态码率) ,CQP (恒定QP),CRF(恒定码率因子)

VBR 码率随着原始视频画面复杂度的变化而不断变化,复杂的时候码率比较高

CQP 使用同一个QP值,画面复杂的时候,残差比较大,画面简单的时候,残差很小,一般用来衡量编码算法的性能,在实际工程中不会使用

CRF 是x264默认的码控算法,QP是会变化。在画面运动大时候,提高QP值,画面运动小的时候,降低QP值。

CBR 恒定码率,需要用户设置一个值,不管画面复杂度如何,都尽量使得输出的码率接近设置的目标码率。适合RTC场景,因为RTC场景希望编码的码率跟实际预测的带宽值接近,不能超出码率太大,也希望能够尽量有效地利用带宽,不能太低目标码率,从而能保证编码后图像画面清晰。

CBR算法

一步步的将输出码率逼近目标码率,而不是一步准确确定QP值。

算法控制分为 帧组级,帧级,宏块组GOM

具体操作过程如下

1、先确定帧组级的输出大小尽量接近目标码率。

2、确定组内的每一帧具体应该分配多少的大小才能保证帧组最后输出的大小

3、根据目标帧大小,确定一个帧级的QP值

4、确定帧内的宏块组应该分配多少,来保证当前帧最后的输出大小能接近于目标帧大小

5、确定宏块的QP

输出码率尽量接近目标码率,保证在不同画面复杂度和不同运动程度的情况下,需要先计算得到当前帧的复杂度。

复杂度求解

I帧复杂度求解:帧内预测是用编码块周围已编码的像素来预测当前编码块的像素值,方差能够表示I帧复杂度的值,方差越大,表示帧内变化程度越剧烈,用周围像素去预测当前编码块的像素,可能有较大的残差。

I帧的复杂度,是求每一个宏块的方差,最后将帧的所有宏块的方差之和作为帧的复杂度

P帧复杂度求解: SAD值,使用当前帧的宏块,减去参考帧对应位置的宏块,并将所有宏块的SAD值加起来作为P帧的复杂度。

帧组级

CBR是恒定码率,保证一段时间内输出的码率接近目标码率,而不是每一帧输出都严格接近目标码率。因为,算法是根据一段时间内前面已经编码的结构调节未编码帧的QP值,从而达到一组帧的输出大小尽量接近目标码率的。

在开始的时候,需要根据目标码率来确定帧组的目标大小,再确定帧组内每一帧的目标大小。

1,在编码刚开始的时候,帧组的剩余大小就是帧组的目标大小

2、编码当前帧组中的第一帧。将帧组的剩余大小除以帧组的帧数,得到第一帧的目标大小

3、第一帧编码后,需要用第一帧实际编码的大小来更新帧组的剩余大小

4、将帧组的剩余大小减去第一帧编码后的实际大小

5、第二帧的目标大小就是等于更新后的帧组的大小,除以剩余帧数

6、帧组中帧不断编码,不断更新帧组的剩余大小,不断调整帧的目标大小

总体意思是,总的减去已经用的,剩下的平均分配,不断迭代

帧级

有了帧组级码控中计算得到的目标帧大小,就能计算当前帧SliceQP

当前帧的复杂度和目标帧大小,加上前面已经编码完成的帧的复杂度和编码使用的Qstep值。以及使用这个QStep编码之后实际的编码大小来计算。

可以根据前面已经编码好了的帧估算一下,大体计算一下,这些帧的复杂度和QStep跟最终的编码大小大概成多少比例,然后再使用这个比例来估算在当前帧的复杂度下,大概使用多少QStep能输出大小接近于目标帧大小。

一帧编码后的大小应该是和帧的复杂度成正比,并且跟帧使用的QStep成反比。

GOM级

在编码一个GOM之前,需要计算帧的实际剩余大小帧的目标剩余大小,帧的实际剩余大小就是用帧的目标大小减去帧中已编码的GOM的实际大小。

再使用帧的实际剩余大小加上前一个GOM的实际编码大小,减去该GOM的目标大小,就是帧的目标剩余大小。

需要计算当前GOM的目标大小,以供下一个GOM编码的时候做GOM级码控计算的时候使用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

float32转float16

背景 当下做AI基本都用float16进行推理,目前用的比较多的还有bfloat16, 这里我们只讨论float16的这个数据类型。float16有个优点是大部分的GPU或者部分CPU支持float16的计算,速度快于float32, 此外显存或者内存也可以减少一半,基于这个特点&…

2022年12月1日最新的SqlServer安装教程

文章目录1、在线安装文件下载2、下载安装包3、下载安装SSMS1、在线安装文件下载 (1)进入官网地址,点击下载:SqlServer下载 (2)等待下载结束,大约几M (3)打开下载的.ex…

Spring Security基于jwt实现权限校验

一 引言 在基于springsecurity和jwt实现的单体项目token认证中我实现了基于jwt实现的认证,本文在此基础上继续实现权限认证 用户认证成功后携带jwt发起请求,请求被AuthenticationFilter拦截到,进行jwt的校验jwt校验成功后,调用JwtAuthenticationProvider从jwt中获得权限信息…

一个分布在多次Softmax后,会趋于相同

本文其实是我在知乎上无意中翻到的一条提问:softmax到底有哪些作用?,其中苏剑林大佬关于第四个问题的回复,给我产生了一些思考。为什么一个分布在多次Softmax之后,每个值会趋于相同?例如[1,100]在大约10次S…

[附源码]JAVA毕业设计高校心理咨询预约系统(系统+LW)

[附源码]JAVA毕业设计高校心理咨询预约系统(系统LW) 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目…

新建esp32的vscode工程的三种方式

普通的idf工程在vscode下直接打开的时候,会发现很多头文件都是报错的,一些函数/类型等的定义也无法找到,比较影响阅读: 因此在vscode上开发esp32的时候,最好为这个工程提供vscode的支持,以下是三种实现的…

商务部研究院信用所、启信宝联合发布《中国商务信用发展指数报告(2022)》

近期,商务部国际贸易经济合作研究院信用研究所与合合信息全资子公司上海生腾数据科技有限公司(简称“生腾数据”)联合发布了《中国商务信用发展指数报告(2022)》(简称《报告》)。为准确反映中国…

NLP中的对抗训练(附PyTorch实现)

对抗样本的基本概念 要认识对抗训练,首先要了解"对抗样本",它首先出现在论文Intriguing properties of neural networks之中。简单来说,它是指对于人类来说"看起来"几乎一样,但对于模型来说预测结果却完全不…

[附源码]JAVA毕业设计公务用车管理智慧云服务监管平台(系统+LW)

[附源码]JAVA毕业设计公务用车管理智慧云服务监管平台(系统LW) 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff0…

[附源码]Python计算机毕业设计SSM蓝色港湾房产交易与租赁系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

最近基于深度学习大火的AIGC将会抢原创工作者的饭碗?

NLG | CLIP | Diffusion Model GAN | AIGC | Stable Diffusion 随着CLIP、DALLE、Diffusion Model、Magic3D、Stable Diffusion等技术的快速发展,AIGC在全球各大科技巨头间可谓是高频词汇,连带着AI这个老生常谈的话题也一并火热起来。 去年三月&#xf…

【R】R包MethylCal安装问题解决 Rtools is required to build R packages

文章目录写在前面问题描述解决过程【1】安装INLA【2】安装Rtools写在前面 吐槽一番: 一般情况下,不是在万不得已,真心不想用R,最让人望而却步的就是包的安装问题,动不动就出现版本不兼容问题,或者下载这个…

Chapter9.5:线性系统的状态空间分析与综合考研参考题

此系列属于胡寿松《自动控制原理题海与考研指导》(第三版)习题精选,仅包含部分经典习题,需要完整版习题答案请自行查找,本系列属于知识点巩固部分,搭配如下几个系列进行学习,可用于期末考试和考研复习。 自动控制原理(…

Java本地高性能缓存的几种实现方式

Java缓存技术可分为远端缓存和本地缓存,远端缓存常用的方案有著名的redis和memcache,而本地缓存的代表技术主要有HashMap,Guava Cache,Caffeine和Encahche。本篇博文仅覆盖了本地缓存,且突出探讨高性能的本地缓存。 本…

美信监控易:网络管理之链路专线管理

专线通常是指运营商为企事业单位提供的专用网络线路,用于满足其业务需求。专线管理可以提供对专线基础信息的维护,以及性能数据的监测能力。通过系统自动地、周期性地执行专线测试,获取指标数据,实现专线连通性、性能数据的全面感…

图数据结构之邻接链表Adjacency List(Python版)

前面学过两种图的数据结构,有兴趣的可以查阅:图数据结构之字典实现(Python版)https://blog.csdn.net/weixin_41896770/article/details/128125901 图数据结构之邻接矩阵Adjacency Matrix(Python版)https://blog.csdn.net/weixin_41896770/article/detai…

中文Stable Diffusion模型太乙使用教程

中文Stable Diffusion模型太乙使用教程 太乙模型介绍 在线体验地址: Stable Diffusion 太乙模型,首个开源的中文Stable Diffusion模型,基于0.2亿筛选过的中文图文对训练。 生成内容一直被视为 AI 领域中最具有挑战性的能力,最近大火的 AI 绘…

文献管理软件Zotero的安装和使用

文章目录前言一、Zotero简介二、安装与使用1、账号注册2、软件安装3、插件安装4、关联账户设置5、坚果云扩充(WebDAV)6、保存路径设置7、与Connected Papers联动8、参考文献的引用前言 随着阅读文献数量的增加,感觉一个好用的文献管理工具必…

08【SpringMVC的放行规则】

文章目录二、SpringMVC的放行规则2.1 SpringMVC提供的拦截规则2.2 缺省Servlet放行2.3 resources放行2.4 Handler放行2.5 放行规则小结二、SpringMVC的放行规则 2.1 SpringMVC提供的拦截规则 *.form:代表以*.form结尾的后缀请求都会进入springmvc管/:代…

Vue2.0开发之——Vue基础用法-axios(29)

一 概述 axios-使用axios发起基本的Get请求axios-结合async和await调用axiosaxios-使用解构赋值axios-基于axios.get和axios.post发起请求 二 axios-使用axios发起基本的Get请求 2.1 axios介绍 axios(发音:艾克C奥斯)是前端圈最火的、专注于数据库请求的库 在后面…