P9 视频码率及其码率控制方式

news2024/11/26 8:16:40

前言 

                             

从本章开始我们将要学习嵌入式音视频的学习了 ,使用的瑞芯微的开发板

🎬 个人主页:@ChenPi

🐻推荐专栏1: 《C++_@ChenPi的博客-CSDN博客》✨✨✨ 

🔥 推荐专栏2: 《Linux C应用编程(概念类)_@ChenPi的博客-CSDN博客》✨✨✨

🛸推荐专栏3:《嵌入式音视频_@ChenPi的博客-CSDN博客》
🌺本篇简介  :本章主要讲解VI VENC模块和AI AENC模块的初始化及具体函数详解

01 什么是码率?

视频码率指的是数据传输单位数,也是指每秒钟传输的视频数据位数,单位是kbps千位/s。

通常来说码率越大,视频的精度越高。编码出来的视频文件,则会越接近原始YUV文件。

通常码率和分辨率息息相关。下面这张图就是分辨率和码率的关系

02 什么是码率控制方式?

码率控制指的是利用编码中的一些特殊手段控制图像的压缩比例,使其画面质量在不同的场景中保持一个最优的状态。

RV1126的码率控制方式,总共分为三种:

  1. CBR固定码率控制模式
  2. VBR可变码率控制模式
  3. AVBR码率控制模式。

2. 1. CBR控制码率详解

CBR指的是固定比特率,它指的是在统计时间内编码码率处于平稳状态。

这种方式的特点是码率调节会相对比较缓慢,它不会跟着图像的质量的波动去改变码率。

CBR控制模式一般用于网络流媒体视频编码。

  1. CBR的优点在于压缩速度非常快,并且码率很平稳不会出现码率跳变的情况。
  2. 但缺点也很明显,就是它不会根据画面的波动对码率进行节省,这样的话会导致每秒空间的浪费。在RV1126的API里面,CBR一般用平均比特率去表示。

从上图我们可以看出来,在RV1126的API里面。用

  • VENC_H264_CBR_S(H264的CBR控制模式)
  • VENC_MJPEG_CBR_S(MJPEG的CBR控制模式)
  • VENC_H265_CBR_S(H265的CBR控制模式)

2.2 H264_CBR结构体:

  1. u32Gop:关键帧间隔
  2. u32SrcFrameRateNum数据源帧率分子
  3. u32SrcFrameRateNum数据源帧率分母
  4. fr32DstFrameRateNum: 目标帧率分子
  5. fr32DstFrameRateDen 目标帧率分母
  6. u32BitRate:平均比特率[2000, 98000000]

2.3 H265_CBR结构体:

H265_CBR结构体的成员变量,跟H264_CBR结构体的成员变量是一样的。

2.4 MJPEG_CBR_S结构体:

  • u32Gop:关键帧间隔
  • u32SrcFrameRateNum数据源帧率分子
  • u32SrcFrameRateNum数据源帧率分母
  • fr32DstFrameRateNum: 目标帧率分子
  • fr32DstFrameRateDen 目标帧率分母
  • u32BitRate:平均比特率[2000, 98000000]

03 VBR控制码率模式详解

VBR指的是动态码率,它的作用是在统计时间内允许编码编率出现波动,这种波动可以使得编码图像质量变高。

VBR的特点是它是随着图像的复杂程度的不同而变化。假设在编码到简单图像的时候它会节省码率,而如果编码到一些相对复杂的图像它的码率将会提升。VBR模式一般使用在DVD上面。

VBR同样也有优缺点,VBR的优点是它的尽可能保证整个图像编码质量,利用VBR编码的图像很少会出现马赛克、画面丢失的情况。

但缺点同样也很明显,使用VBR编码出来的图像它的体积是不固定的。所以,它会根据画面的复杂程度去决定视频文件的大小,另外还有的是使用VBR进行编码的时候它的编码算法复杂度会变高,这就会导致解码端的复杂度升高。

在RV1126的API里面。

  1. VENC_H264_VBR_S(H264VBR控制模式)
  2. VENC_MJPEG_VBR_S(MJPEGVBR控制模式)
  3. VENC_H265_VBR_S(H265VBR控制模式)

VENC_H264_VBR_S结构体:

  • u32Gop:关键帧间隔
  • u32SrcFrameRateNum数据源帧率分子
  • u32SrcFrameRateNum数据源帧率分母
  • fr32DstFrameRateNum: 目标帧率分子
  • fr32DstFrameRateDen 目标帧率分母
  • u32MaxBitRate:最大比特率[2000, 98000000]

VENC_H265_VBR_S结构体:

H265_VBR结构体的成员变量,跟H265_CBR结构体的成员变量是一样的。

VENC_MJPEG_VBR_S的结构体:

  • u32SrcFrameRateNum数据源帧率分子
  • u32SrcFrameRateNum数据源帧率分母
  • fr32DstFrameRateNum: 目标帧率分子
  • fr32DstFrameRateDen 目标帧率分母
  • u32BitRate:平均比特率[2000, 98000000]

04 AVBR控制码率模式详解

AVBR全称叫适配式可变码率控制方式,它的很多思想跟VBR基本上是一致的。

但它比VBR强大的一点是这种控制方式能够自动检测当前编码场景是静止画面还是运动画面

若当前画面是静止画面则会主动降低码率、若当前画面是运动画面则会把码率主动提升。

AVBR适用于当前编码视频静止画面运动画面频繁出现的场景,所以AVBR码率控制方式经常用在大型体育比赛上面。

在RV1126的API里面。

  • VENC_H264_ AVBR_S(H264VBR控制模式)
  • VENC_MJPEG_AVBR_S(MJPEGVBR控制模式)
  • VENC_H265_AVBR_S(H265VBR控制模式)

4.1 VENC_H264_AVBR结构体:

  1. u32Gop:关键帧间隔
  2. u32SrcFrameRateNum数据源帧率分子
  3. u32SrcFrameRateNum数据源帧率分母
  4. fr32DstFrameRateNum: 目标帧率分子
  5. fr32DstFrameRateDen 目标帧率分母
  6. u32MaxBitRate:最大比特率[2000, 98000000]

VENC_H265_AVBR结构体和H264的也是一样的

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

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

相关文章

听GPT 讲Rust源代码--compiler(38)

File: rust/compiler/rustc_parse/src/parser/expr.rs 在Rust的源代码中,rust/compiler/rustc_parse/src/parser/expr.rs这个文件扮演了解析表达式的角色。表达式是Rust中的一种语法结构,用于表示程序中的计算、操作和值。 该文件定义了一个名为ExprPa…

SQL基础知识1

一、基本知识 1、定义 2、语句结构 二、库和表的操作 1、创建、删除库 方法一 在navicat的查询中写 方法二 用mysql命令窗口写 1、用管理员身份运行MySQL的窗口 2、先看一下已经存在的数据库 3、新建数据库 2、导入表 3、表的相关操作 1、创建表 实例 名称不能和系统关…

Java 基础(一)

1.Java 基础概念 Java 是美国Sun 公司于1995 年推出的一门计算机编程语言,2009年被Oracle 公司收购 Java 之父:詹姆斯高斯林(James Gosling) Java语言的产品是 JDK(Java Development Kit :Java开发者工具包) ,必须安…

2024年1月记录(水文遥测站、中心站)

1.水文遥测站、中心站 水文遥测终端|遥测终端机RTU|遥测数传仪|中小河流水文自动监测设备|水雨情自动测报设备-平升电子

Java学习苦旅(二十五)——哈希表

本篇博客将详细讲解哈希表。 文章目录 哈希表概念冲突概念避免冲突哈希函数设计常见哈希函数 负载因子调节解决冲突闭散列开散列(哈希桶) 和java类集的关系 结尾 哈希表 概念 顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关…

结算时间和可组合性助力Sui上DeFi蓬勃发展

结算时间是基于Sui交易处理模型的度量标准,确保DeFi用户几乎立即看到交易结果。可组合性则是深深融入Sui的编程环境,扩展了其对对象和智能合约的影响。Sui深度的可组合性赋予DeFi构建者引入创新产品的能力,使其在其他区块链上的DeFi应用中独树…

【算法提升】LeetCode每五日一总结【01/01--01/05】

文章目录 LeetCode每五日一总结【01/01--01/05】2023/12/31今日数据结构&#xff1a;二叉树的前/中/后 序遍历<非递归> 2024/01/01今日数据结构&#xff1a;二叉树的 前/中/后 序遍历 三合一代码<非递归>今日数据结构&#xff1a;二叉树的 前/中/后 序遍历 三合一代…

加密世界危机四伏,普通用户该如何应对钓鱼陷阱

据区块链安全公司 Scam Sniffer 称&#xff0c;加密货币网络钓鱼活动在 2023 年有所增加&#xff0c;诈骗者利用钱包盗取恶意软件从受害者那里窃取了近 3 亿美元。金额很惊人是不是&#xff1f;只是没想到素以小心谨慎为口号冲浪的我也栽了一回。还原一下事情经过&#xff1a; …

【镜像压缩】linux 上 SD/TF 卡镜像文件压缩到实际大小的简单方法(树莓派、nvidia jetson)

文章目录 1. 备份 SD/TF 卡为镜像文件2. 压缩镜像文件2.1. 多分区镜像文件的压缩&#xff08;树莓派、普通 linux 系统等&#xff09;2.2. 单分区镜像文件的压缩&#xff08;Nvidia Jetson Nano 等&#xff09; 3. 还原镜像文件到 SD/TF 卡参考链接 1. 备份 SD/TF 卡为镜像文件…

NACHI机器人模拟示教器如何切换中文

前言 现在开始学习机器人的编程语言&#xff0c;那么要学习会用首先得用模拟示教器来学习&#xff0c;但是全是英文确实比较难受一些些&#xff0c;没有中文来的直观。所以摸透一下如何给示教器更换语言。 具体步骤 步骤一&#xff1a;将中文的汉化包下载下来。具体的下载链…

iOS调出拨打电话弹窗

只需将手机号填入12345的部分即可 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:"tel://12345"] options:{} completionHandler:^(BOOL success) {}]; 如下图所示

SpringBoot整合sentinel

1、引入依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> 2、 配置文件添加 spring:cloud:sentinel:transport:dashboard: ip:8858 项目重启&#x…

JavaScript数组操作完全手册

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》 ​ 目录 ✨ 前言 第一节:数组的定义和创建 1.1 数组字面量 [] 1.2 Array构造函数 1.3 Array.of() …

Redis之集群方案比较

哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态&#xff0c;如果master节点异常&#xff0c;则会做主从切换&#xff0c;将某一台slave作为master&#xff0c;哨兵的配置略微复杂&#xff0c;并且性能和高可用性等各方面表现一般&a…

群晖安装MariaDB

群晖安装MariaDB 在套件中心安装MariaDB给root开启远程访问权限使用工具连接数据库 在套件中心安装MariaDB 给root开启远程访问权限 # ssh 登陆群晖后执行下面操作 $ mysql -uroot -p[数据库密码] $ use mysql; $ select User,authentication_string,Host from user; # 查看账…

大模型实战营Day2 作业

基础作业 1 使用 InternLM-Chat-7B 模型生成 300 字的小故事 2 熟悉 hugging face 下载功能&#xff0c;使用 huggingface_hub python 包&#xff0c;下载 InternLM-20B 的 config.json 文件到本地 进阶作业 1 完成浦语灵笔的图文理解及创作部署 2 完成 Lagent 工具调用 Demo…

存储器进化全解析:从NAND到UFS,深入剖析常见存储技术与应用

存储领域发展至今&#xff0c;已有很多不同种类的存储器产品。下面给大家介绍几款常见的存储器及其应用&#xff1a;#存储器#​ 一、NAND NAND Flash存储器是Flash存储器的一种&#xff0c;属于非易失性存储器&#xff0c;其内部采用非线性宏单元模式&#xff0c;为固态大容量…

uniapp打包后图片资源会重复

hbuildx打包后文件过大&#xff0c;多方优化后&#xff0c;发现会生成重复的图片&#xff0c;如图&#xff1a; 临时解决方法&#xff1a; lib.zip chain-webpack.js_.zip 解压 lib.zip 替换到 HBuilderX根目录/plugins/uniapp-cli/node_modules/dcloudio/uni-cli-shared/lib…

C#,数值计算,求平方根之巴比伦算法(Babylonian algorithm)的源代码

平方根的巴比伦算法。 1 巴比伦算法介绍一 巴比伦算法可能算是最早的用于计算$sqrt{S}$的算法之一&#xff0c;因为其可以用牛顿法导出&#xff0c;因此在很多地方也被成为牛顿法。其核心思想在于为了计算x的平方根&#xff0c;可以从某个任意的猜测值g开始计算。在真实的运算…

Node.js(四)-express

1. 初识express 1.1 express简介 1.1.1 什么是express 官方&#xff1a;Express是基于Node.js平台&#xff0c;快速、开放、极简的web开发框架。 通俗&#xff1a;Express的作用和Node.js内置的http模块类似&#xff0c;是专门用来创建web服务器的。 express的本质&#xff1…