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

前言

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

🎬 个人主页:@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里面。用

  • V ENC_H264_CBR_S(H264 的C BR 控制模式 )
  • V ENC_MJPEG_CBR_S(MJPEG 的C BR 控制模式 )
  • VENC_H265_CBR_S(H265 的C BR 控制模式 )

2.2 H 264_CBR 结构体:

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

2.3 H 265_CBR 结构体:

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

2.4 M JPEG_CBR_S 结构体 :

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

03 VBR 控制码率模式详解

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

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

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

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

在RV1126的API里面。

  1. V ENC_H264_VBR_S(H264 VBR 控制模式 )
  2. V ENC_MJPEG_VBR_S(MJPEG VBR 控制模式 )
  3. VENC_H265_VBR_S(H265 VBR 控制模式 )

V ENC_H264_VBR_S 结构体:

  • u32Gop :关键帧间隔
  • u 32SrcFrameRateNum 数据源帧率分子
  • u 32SrcFrameRateNum 数据源帧率分母
  • fr32DstFrameRateNum : 目标帧率分子
  • fr32DstFrameRateDen 目标帧率分母
  • u 32M ax BitRate :最大比特率 [2000, 98000000]

V ENC_H265_VBR_S 结构体:

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

VENC_MJPEG_VBR_S 的结构体:

  • u 32SrcFrameRateNum 数据源帧率分子
  • u 32SrcFrameRateNum 数据源帧率分母
  • fr32DstFrameRateNum : 目标帧率分子
  • fr32DstFrameRateDen 目标帧率分母
  • u 32BitRate :平均比特率 [2000, 98000000]

04 AVBR 控制码率模式详解

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

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

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

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

在RV1126的API里面。

  • V ENC_H264_ AVBR_S(H264 VBR 控制模式 )
  • V ENC_MJPEG_AVBR_S(MJPEG VBR 控制模式 )
  • VENC_H265_AVBR_S(H265 VBR 控制模式 )

4.1 V ENC_H264_AVBR 结构体:

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

V ENC_H265_AVBR 结构体和H264的也是一样的


相关推荐
颇有几分姿色14 分钟前
深入理解 Linux 内存管理:free 命令详解
linux·运维·服务器
EasyCVR22 分钟前
EHOME视频平台EasyCVR视频融合平台使用OBS进行RTMP推流,WebRTC播放出现抖动、卡顿如何解决?
人工智能·算法·ffmpeg·音视频·webrtc·监控视频接入
极客小张37 分钟前
基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路
stm32·单片机·嵌入式硬件·mqtt·sqlite·毕业设计·智能充电桩
AndyFrank44 分钟前
mac crontab 不能使用问题简记
linux·运维·macos
筱源源1 小时前
Kafka-linux环境部署
linux·kafka
算法与编程之美2 小时前
文件的写入与读取
linux·运维·服务器
xianwu5432 小时前
反向代理模块
linux·开发语言·网络·git
Amelio_Ming2 小时前
Permissions 0755 for ‘/etc/ssh/ssh_host_rsa_key‘ are too open.问题解决
linux·运维·ssh
冷凝女子2 小时前
【QT】海康视频及openCv抓拍正脸接口
qt·opencv·音视频·海康
Ven%3 小时前
centos查看硬盘资源使用情况命令大全
linux·运维·centos