视频基础学习五——视频编码基础二(编码参数帧、GOP、码率等)

系列文章目录

视频基础学习一——色立体、三原色以及像素
视频基础学习二——图像深度与格式(RGB与YUV)
视频基础学习三——视频帧率、码率与分辨率
视频基础学习四——视频编码基础一(冗余信息)
视频基础学习五——视频编码基础二(编码参数帧、GOP、码率等)
视频基础学习六——视频编码基础三(h264框架配合图文+具体抓包分析 万字)

文章目录

  • 系列文章目录
  • 前言
  • 一、视频帧
    • 1.帧
      • 定义
      • 帧类型
        • 1)I帧
        • 2)P帧
        • 3)B帧
        • 三种帧解码依赖关系
    • 2.GOP
    • 3.IDR帧
  • 二、时间戳DTS和PTS
  • 三、码率控制
    • 1.CQP
    • 2.CRF
    • 3.CBR
    • 4.VBR
    • 5.ABR
  • 总结


前言

上一篇文章记录了视频为何需要编码以及编码的大致原理——去除视频中的冗余信息,这一篇文章是介绍视频编码的一些基础知识,是对视频编码进一步也是做视频流媒体工作中经常需要用到的技术。

值得注意的是:一些初学者会认为视频编码只是将视频进行压缩以减少视频的体积,但这只是其中一个目的,视频编码还有另外一个比较重要的目的是对于网络传输有良好的亲和性

|版本声明:山河君,未经博主允许,禁止转载


一、视频帧

1.帧

在上一篇文章中,我们说了对于减少视频冗余信息里用到的一种很重要的方式——帧间预测帧内预测,前者利于时域上相邻图片的相关性大大减少了时间冗余,后者通过一张图片不同块的相似性减少空间冗余(详细请看视频基础学习四——视频编码基础一(冗余信息))。这里已经提到了帧与相邻帧的概念。

h264中就对应的采用了帧间压缩帧内压缩技术,来提高了压缩速率。

定义

一副图片经过编码后的数据叫做一帧,而一帧是由一个片(slice)或者多个片组成,一个片是由一个或多个宏块组成,而每一个宏块的大小是16x16的数据,一个宏块又可以分为1616,168,816,88,84,48,4*4,等大小不等的子块,具体关系如同下图
在这里插入图片描述
在h264中,编码最小单元就是宏块

至于为什么划分这么精细,请参照上一篇博客视频基础学习四——视频编码基础一(冗余信息),这里就不过多解释了。

帧类型

1)I帧

也称作关键帧,解码时只需要该帧就可以解压缩为一张完整的图片,特点:

  • 它是一个全帧压缩编码帧。它将全帧图像信息进行JPEG压缩编码及传输;
  • 解码时仅用I帧的数据就可重构完整图像;
  • I帧描述了图像背景和运动主体的详情;
  • I帧不需要参考其他画面而生成;
  • I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量);
  • I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧;
  • I帧不需要考虑运动矢量;
  • I帧所占数据的信息量比较大。

I帧简单点理解是通过了帧内压缩技术进行压缩,并为帧间压缩提供基础。所以它只解决了视频中的空间冗余信息,编码冗余信息、视觉冗余信息和知识冗余信息,并没有解决时间上的冗余

特点中提到的GOP的概念下面会进行介绍

2)P帧

也称为前向预测编码帧,利用之前的 I 帧或 P 帧,采用运动预测的方式进行帧间预测编码,特点:

  • P 帧是 I 帧后面相隔 1-2 帧的编码帧;
  • P 帧采用运动补偿的方法传送它与前面的 I 或 P 帧的差值及运动矢量(预测误差);
  • P 帧属于前向预测的帧间编码,它只参考前面最靠近它的 I 帧或 P 帧;
  • P 帧可以是其后面 P 帧的参考帧,也可以是其前后的 B 帧的参考帧;
  • 由于 P 帧是参考帧,它可能造成解码错误的扩散;
  • 由于是差值传送,P 帧的压缩比较高。

P帧在I帧的基础上,利用帧间预测,通过运动估计和补偿,解决了视频在时间上的冗余

3)B帧

也称为双向预测编码图像帧,它的压缩比例是最高的,它既需要之前的图像帧(I 帧或 P 帧),也需要后来的图像帧(P 帧)才能进行解码,特点:

  • B 帧是由前面的 I 或 P 帧和后面的 P 帧来进行预测的;
  • B 帧传送的是它与前面的 I 或 P 帧和后面的 P 帧之间的预测误差及运动矢量;
  • B 帧是双向预测编码帧;
  • B 帧压缩比最高,因为它只反映两参考帧间运动主体的变化情况,预测比较准确;
  • B 帧不是参考帧,不会造成解码错误的扩散。
三种帧解码依赖关系

三种解码依赖关系如下图
在这里插入图片描述

2.GOP

GOP(Group Of Pictures):是图像组的概念。在h264中,使用的是封闭GOP,即在一个GOP中所有的帧解码不应该GOP外其他帧。所以在一个GOP组中,第一帧一定是I帧。

如同下图,两个
在这里插入图片描述

3.IDR帧

IDR 帧全称叫做 Instantaneous Decoder Refresh,是 I 帧的一种。IDR 帧的作用是立刻刷新,重新算一个新的序列开始编码,使错误不致传播。I 帧有被跨帧参考的可能,但 IDR 帧不会,如同下图
在这里插入图片描述

二、时间戳DTS和PTS

  • DTS(Decoding Time Stamp):即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。
  • PTS(Presentation Time Stamp):即显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。

如果视频中没有B帧,那么DTS和PTS是一致的

那么为何加入了B帧后,DTS和PTS就不一致了呢?上面也说过B帧是双向预测的,B帧的解码需要前后两帧进行解码,如果一个视频中帧的显示顺序为:I B1 B2 P,那么它的解码顺序应该是:I P B1 B2,如同下图
在这里插入图片描述

三、码率控制

码率控制严格上来说不属于编码标准,但是在编码器设置中是非常重要的,一般来说在选择码率的时候,需要考虑到以下几点:

  • 视觉质量
  • 瞬时输出码率
  • 输出视频文件大小
  • 编码速度

在h264中常见码率有CQP、CRF、ABR、CBR、VBR五种设置。

1.CQP

CQP(Constant Quantization Parameter):恒定QP

恒定了编码参数。一般不会用于流媒体传输,因为这个选择是完全忽略码率,其中QP的范围是0~51,QP值越大表示越大的量化步长,编码视频的质量越低。QP为0表示进行无损编码。多会用于录制场景,一般选择18左右就可以做到高质量的画质,但是往往文件会很大。

2.CRF

CRF(Constant Rate Factor):恒定质量因子

以视觉质量为目标,和CQP很相似,但是文件会更小,因为它会减少一些人眼不敏感的场景例如高速运动或者细节丰富画面的编码,以达到节省码率的设置。

和QP的范围一样RF的范围也是[0,51]。其中0为无损模式,23为缺省,51质量最差。和QP一样的趋势。RF值加6,输出码率大概减少一半;减6,输出码率翻倍。

3.CBR

CBR(Constant Bitrate):固定码率

一定时间内保持比特率恒定,但是质量不稳定,不能充分利用带宽,这种码率设置不能充分考虑视频内容的复杂性,所以一般在传输中会尽量保持带宽设置较大,如果设置不合理,一些运动场景会很糊。但是好处是可以方便控制视频体积大小,在流式播放中,在更小的时间窗口保持码率的波动更小。

4.VBR

VBR(Variable Bitrate):可变码率

系统将自动为内容的简单部分分配较少的比特,从而留出足量的比特用于生成高质量的复杂部分。在文件大小相同情况下,VBR编码后要比CBR的质量更好。缺点是码率不固定,且编码速度也有很大波动。多用于延时不敏感的点播,或者存储下载系统中使用。

5.ABR

ABR(Average Bitrate):平均目标码率

简单场景分配较低bit,复杂场景分配足够bit,使得有限的bit数能够在不同场景下合理分配,这类似VBR。同时一定时间内,平均码率又接近设置的目标码率,这样可以控制输出文件的大小,这又类似CBR。可以认为是CBR和VBR的折中方案。这也是最常用的方案。


总结

其实这边文章介绍了视频编码中经常会遇到的一些特性,属于对于编码器基础的一些知识,下面一章会对于当前经常使用的编码器h264做详细的介绍。

如果对您有所帮助,请帮忙点个赞吧!

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

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

相关文章

KKVIEW远程远程访问家里电脑

远程访问家里电脑:简易指南与价值所在 在数字化时代,电脑已成为我们日常生活和工作中不可或缺的工具。有时,我们可能在外出时急需访问家中电脑里的某个文件或应用,这时,远程访问家里电脑就显得尤为重要。本文将简要介…

SQLite---调试提示(十九)

返回:SQLite—系列文章目录 上一篇:SQLite Android 绑定(十八) 下一篇:从 SQLite 3.4.2 迁移到 3.5.0(二十) ​ 以下是 SQLite 开发人员跟踪、检查和了解 核心 SQLite 库。 这些技术旨在帮助理解 核…

从 SQLite 3.5.9 迁移到 3.6.0(二十一)

返回:SQLite—系列文章目录 上一篇:从 SQLite 3.4.2 迁移到 3.5.0(二十) 下一篇:SQLite—系列文章目录 ​SQLite 版本 3.6.0 (2008-07-16) 包含许多更改。按照惯例 SQLite项目&#xff…

中移物联网 OneOS 操作系统环境搭建和工程创建

一、官网 OneOS Lite是中国移动针对物联网领域推出的轻量级操作系统,具有可裁剪、跨平台、低功耗、高安全等特点,支持ARM Cortex-A和 Cortex-M、MIPS、RISC-V等主流芯片架构,兼容POSIX、CMSIS等标准接口,支持Javascript、MicroPyt…

Ubuntu下配置Android NDK环境

Android-NDK的下载 下载Android-NDK wget -c http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin 执行bin文件(即解压) ./android-ndk-r10c-linux-x86_64.bin Android-NDK的配置 要想使用Android-NDK,还需要进行环境变量…

C++ stl容器string的底层模拟实现

目录 前言: 1.成员变量 2.构造函数与拷贝构造函数 3.析构函数 4.赋值重载 5.[]重载 6.比较关系重载 7.reserve 8.resize 9.push_back,append和重载 10.insert 11.erase 12.find 14.迭代器 15.流插入,流提取重载 16.swap 17.c_str 18.完…

Testng测试框架(6)--@Factory动态地创建测试类的实例

工厂允许您动态地创建测试。例如,假设您想创建一个测试方法,该方法将多次访问网站上的某个页面,并且您希望使用不同的值来调用它。 public class TestWebServer {Test(parameters { "number-of-times" })public void accessPage(…

【C++题解】1605. 求一个两位数的个位和十位的和

问题:1605. 求一个两位数的个位和十位的和 类型:基本运算、拆位求解。 题目描述: 从键盘读入一个两位的整数 n ,请求出这个两位整数个位和十位的和是多少? 输入: 一个两位的整数 n 。 输出&#xff1a…

hbase基础shell用法

HBase中用create命令创建表,具体如下: create student,Sname,Ssex,Sage,Sdept,course 此时,即创建了一个“student”表,属性有:Sname,Ssex,Sage,Sdept,course。因为HBase的表中会有一个系统默认的属性作为行键&#x…

【MySQL】事务篇

SueWakeup 个人主页:SueWakeup 系列专栏:学习技术栈 个性签名:保留赤子之心也许是种幸运吧 目录 本系列专栏 1. 什么是事务 2. 事务的特征 原子性(Atomicity) 一致性(Consistency) 隔离性&…

255Mesh 无线lora模块详细配置和测试

一、型号介绍 字符含义: E:终端 N:节点(node) G:网关 (gateway) 官网淘宝介绍 注意:组网必须配网关。 二、功能配置 软件界面 1.网络参数 网络参数包括网络 ID&a…

华为OD技术面试-有序数组第K最小值

背景 2024-03-15华为od 二面,记录结题过程 有序矩阵中第 K 小的元素 - 力扣(LeetCode) https://leetcode.cn/problems/kth-smallest-element-in-a-sorted-matrix/submissions/512483717/ 题目 给你一个 n x n 矩阵 matrix ,其…

FPGA基于VCU的H265视频压缩,HDMI2.0输入,支持4K60帧,提供工程源码+开发板+技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的视频图像编解码方案 3、详细设计方案设计框图FPGA开发板视频输入Video PHY ControllerHDMI 1.4/2.0 Receiver SubsystemVideo Processing SubsystemVideo Frame Buffer WriteZynq UltraScale VCUPetaLinux 系统制作VLC播放器工…

ubuntu安装irtualbox注意事项

下载官网7.0版本,ubuntu22.04,安装一直出错误,查到了下面兄弟的办法,仍然不幸,最后使用apt重装,请按第二部分流程安装,安装6.1,可以用 第一部分,反正我是没搞通,7.0反复的出现相同的…

在 Leetcode 上使用 Javascript 查找数组中的所有重复项(使用 JS 的 DSA)

在本篇博客文章中,我们将探讨如何在数组中找出所有重复的元素,这个问题源自LeetCode上的一个问题。 问题描述: 我们有一个包含n个整数的数组,所有整数都在范围[1, n]内。每个整数要么出现一次,要么出现两次。任务是找…

第8章 项目整合管理

子过程:为创建预定的产品、服务或成果而执行的一系列相互关联的行动和活动; 既属于某一过程组(启动、规划、执行、监控、收尾)又属于某一知识领域(整合、范围、进度、成本、质量、资源、采购、沟通、干系人、风险&…

5G智慧水利数字孪生可视化平台,推进水利行业数字化转型

5G智慧水利数字孪生可视化平台,推进水利行业数字化转型。随着5G技术的快速发展,越来越多的行业开始探索数字化转型的道路。水利行业作为国民经济的重要支柱,也面临着数字化转型的迫切需求。5G智慧水利数字孪生可视化平台作为水利行业数字化转…

数据安全之路:Databend 用户与角色管理应用

Databend 目前支持基于角色的访问控制 (RBAC) 和 自主访问控制 (DAC) 模型,用于访问控制功能。 通过本指南,我们会了解权限和角色在 Databend 中的基本概念,以及如何管理角色、继承角色与建立层级、设置默认角色以及所有权的重要性。这些功能…

活动预告|NineData 创始人CEO叶正盛将参加QCon全球软件开发大会,共话AI大模型技术在数据库DevOps的实践

4月13日下午,NineData创始人&CEO叶正盛即将参加InfoQ中国主办的『QCon全球软件开发大会北京站』的技术大会。在本次技术峰会上,叶正盛将以《AI大模型技术在数据库DevOps的实践》为主题,深入剖析AI大模型技术在数据库DevOps领域的最新进展…

逆向案例二十一——遇到混淆怎么办

开始新的板块尝试,混淆了怎么办 网址:极简壁纸_海量电脑桌面壁纸美图_4K超高清_最潮壁纸网站 抓包抓到,好久没做解密了,奥里给干他!: 搜索关键字,打上断点,点击第二页。 _0x10a345…