视频基础学习五——视频编码基础二(编码参数帧、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做详细的介绍。

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

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

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

相关文章

@Resource 与 @Autowired区别

Resource 和 Autowired 都是用于依赖注入的注解,但它们有一些区别。 Resource 注解: 来源: Resource 是由 JavaEE 提供的注解,它不属于 Spring 框架的一部分。 装配方式: Resource 默认按照名称进行装配,如…

【智能算法】花朵授粉算法(FPA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2012年,Yang等人受到自然界花朵授粉过程启发,提出了鸭群算法(Flower Pollination Algorithm, FPA)。 2.算法原理 2.1算法思想 FPA基于自然界花朵授…

三步教你怎么把icloud照片恢复至iphone!

“我手机里面照片被优化后,然后不小心把所有被优化的模糊照片从手机中删除了,但是iCloud还有,我应该怎样把iCloud的照片重新放回手机?谢谢。” 在使用iPhone时,iCloud照片库是一个非常方便的功能,它允许你在…

深入了解MySQL中的SQL函数

深入了解MySQL中的SQL函数可以极大地提升数据处理的能力和灵活性。这些函数涵盖了从数学计算、字符串操作、日期时间处理到复杂的聚合和窗口函数。在这篇文章中,我们将详细讨论MySQL中的各种SQL函数,包括它们的用途、使用场景和一些高级技巧。 数学函数…

【QT+QGIS跨平台编译】177:【QGIS_App+Qt跨平台编译】之一(一套代码、一套框架,跨平台编译)

文章目录 一、QGIS_App介绍二、QGIS下载三、文件分析四、pro文件一、QGIS_App介绍 QGIS_App是一个基于QGIS的完整的GIS系统库,它不仅可以作为一个独立的GIS应用程序使用,还可以将其各个组件作为二次开发的一部分。QGIS_App具有一个完整的GIS主界面和多个插件(plugins),这些…

spring事件监听

spring事件监听 ApplicationListener监听容器中发布的事件 实现ApplicationListener来完成事件监听 public interface ApplicationListener<E extends ApplicationEvent> extends EventListener { /** * Handle an application event. * param event the event t…

pnpm - Failed to resolve loader: cache-loader. You may need to install it.

起因 工作原因需要研究 vue-grid-layout 的源码&#xff0c;于是下载到本地。因为我习惯使用 pnpm&#xff0c;所以直接用 pnpm i 安装依赖&#xff0c;npm run serve 启动失败。折腾了一番没成功。 看到源码里有 yarn.lock&#xff0c;于是重新用 yarn install 安装依赖&…

如何用JavaScript/来更新其他meta标签

下面是一个简单的例子&#xff0c;展示了如何使用JavaScript来更新页面中的其他meta标签。这个例子中&#xff0c;我们将更新description和author两个meta标签。 首先&#xff0c;假设我们有以下HTML代码&#xff1a; <!DOCTYPE html> <html lang"en">…

使用Unity 接入 Stable-Diffusion-WebUI的 文生图api 并生成图像

使用Unity 接入 Stable-Diffusion-WebUI 文生图生成图像 文章目录 使用Unity 接入 Stable-Diffusion-WebUI 文生图生成图像一、前言二、具体步骤1、启动SD的api设置2、unity 创建生图脚本3、Unity 生图交互配置步骤 1: 创建sdControl步骤2&#xff1a;生成后图片画布步骤3&…

Groovy程序设计-【第一部分Groovy起步】-02-面向Java开发者的Groovy

前言&#xff1a; 知识点记录来源于【Groovy程序设计】一书中&#xff0c;本文仅作知识点记录供日后使用查询&#xff0c;不做教程使用。 groovy支持java语法&#xff0c;并且保留了java的语义&#xff0c;所以我们可以随心所欲的混用两种语言。 1.从Java到Groovy 先看一个…

从「宏大叙事」到「生活叙事」,小红书品牌种草的的“正确姿势”

不同于抖音和微博&#xff0c;在小红书上&#xff0c;品牌营销的基调应该是怎样的&#xff1f;品牌怎样与小红书用户对话&#xff1f;什么样的内容&#xff0c;才能走进小红书用户的心中&#xff1f;本期&#xff0c;小编将带大家洞察品牌在小红书营销的“正确姿势”。从「小美…

Table表格(关于个人介绍与图片)

展开行&#xff1a; <el-table :data"gainData" :border"gainParentBorder" style"width: 100%"><el-table-column type"expand"><template #default"props"><div m"4"><h3>工作经…

百度文心一言:官方开放API开发基础

目录 一、模型介绍 1.1主要预置模型介绍 1.2 计费单价 二、前置条件 2.1 创建应用获取 Access Key 与 Secret Key 2.2 设置Access Key 与 Secret Key 三、基于千帆SDK开发 3.1 Maven引入SDK 3.2 代码实现 3.3 运行代码 一、模型介绍 文心一言&#xff08;英文名&…

Java实现生成中间带图标的二维码

Java实现生成中间带图标的二维码 生成Base64格式的二维码&#xff0c;返回html渲染 package your.package;import com.google.zxing.*; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcod…

DSPE-PEG-TPP 磷脂聚乙二醇-磷酸三苯酯 靶向线粒体纳米颗粒药物递送系统

DSPE-PEG-TPP 磷脂聚乙二醇-磷酸三苯酯 靶向线粒体纳米颗粒药物递送系统 【中文名称】磷脂-聚乙二醇-磷酸三苯酯 【英文名称】DSPE-PEG-TPP 【结 构】 【品 牌】碳水科技&#xff08;Tanshtech&#xff09; 【纯 度】95%以上 【保 存】-20℃ 【规 格】50mg,…

数字工厂系统的开发

数字工厂系统&#xff08;Digital Factory System&#xff0c;DFS&#xff09;是基于数字孪生技术&#xff08;Digital Twin Technology&#xff09;和信息物理融合系统&#xff08;Cyber-Physical System&#xff0c;CPS&#xff09;构建的&#xff0c;用于仿真、分析和优化制…

密码学 | 承诺:基本概念

目录 正文 1 承诺的交互 2 承诺的属性 3 硬币抛掷问题 3.1 朴素版方案 3.2 承诺版方案 &#x1f951;源自&#xff1a;https://en.wikipedia.org/wiki/Commitment_scheme &#x1f951;写在前面&#xff1a;英文的承诺是 commitment scheme&#xff0c;否则很难进行…

js 事件模型 事件捕获、事件冒泡

什么是事件捕获、事件冒泡 事件冒泡&#xff08;event bubbling&#xff09;和事件捕获&#xff08;event capturing&#xff09;是指在 DOM 树中处理事件的两种不同方式。 事件捕获&#xff1a; 事件从DOM树的根节点开始&#xff0c;然后逐级向下捕获到最具体的元素&#xf…

网络爬虫入门

爬虫&#xff08;也被称为网络爬虫或网络蜘蛛&#xff09;是一种自动化程序&#xff0c;它可以在互联网上自动抓取数据。爬虫的基本工作原理通常包括以下几个步骤&#xff1a;发送请求&#xff1a;爬虫向目标网站发送HTTP请求&#xff0c;请求网页内容。接收响应&#xff1a;爬…

sklearn【F1 Scoree】F1分数原理及实战代码!

目录 一、F1 Scoree 介绍二、案例学习三、总结 一、F1 Scoree 介绍 在分类任务中&#xff0c;评估模型的性能是至关重要的。除了准确率&#xff08;Accuracy&#xff09;之外&#xff0c;我们还需要考虑其他指标&#xff0c;如精确度&#xff08;Precision&#xff09;和查全率…