首页 > 其他分享 >【数字视频技术介绍】| 视频帧类型(I 帧、P 帧、B 帧)

【数字视频技术介绍】| 视频帧类型(I 帧、P 帧、B 帧)

时间:2022-12-15 19:40:29浏览次数:57  
标签:视频 一帧 编码 数字视频 使用 类型 我们


公众号回复:666,领取学习资源大礼包

这是一份循序渐进的视频技术的介绍,来自 Github 仓库:

​https://github.com/leandromoreira/digital_video_introduction​

本文档旨在尽可能使用浅显的词语,丰富的图像和实际例子介绍数字视频概念,使这些知识能适用于各种场合。

有兴趣了解更多内容的同学可以下载仓库源码,这里只做摘录,仅供参考。

帧类型

现在我们进一步消除​​时间冗余​​,但在这之前让我们来确定一些基本术语。假设我们一段 30fps 的影片,这是最开始的 4 帧。

【数字视频技术介绍】| 视频帧类型(I 帧、P 帧、B 帧)_关键帧 -> 【数字视频技术介绍】| 视频帧类型(I 帧、P 帧、B 帧)_帧内编码_02 -> 【数字视频技术介绍】| 视频帧类型(I 帧、P 帧、B 帧)_关键帧_03 -> 【数字视频技术介绍】| 视频帧类型(I 帧、P 帧、B 帧)_关键帧_04

我们可以在帧内看到很多重复内容,如蓝色背景,从 0 帧到第 3 帧它都没有变化。为了解决这个问题,我们可以将它们抽象地分类为三种类型的帧。

I 帧(帧内编码,关键帧)

I 帧(可参考,关键帧,帧内编码)是一个自足的帧。它不依靠任何东西来渲染,I 帧与静态图片相似。第一帧通常是 I 帧,但我们将看到 I 帧被定期插入其它类型的帧之间。

【数字视频技术介绍】| 视频帧类型(I 帧、P 帧、B 帧)_技术介绍_05

球 1

P 帧(预测)

P 帧利用了一个事实:当前的画面几乎总能使用之前的一帧进行渲染。例如,在第二帧,唯一的改变是球向前移动了。仅仅使用(第二帧)对前一帧的引用和差值,我们就能重建前一帧。

【数字视频技术介绍】| 视频帧类型(I 帧、P 帧、B 帧)_技术介绍_05 <-  【数字视频技术介绍】| 视频帧类型(I 帧、P 帧、B 帧)_帧内编码_07

自己动手:具有单个 I 帧的视频

既然 P 帧使用较少的数据,为什么我们不能用单个 I 帧和其余的 P 帧来编码整个视频?

编码完这个视频之后,开始观看它,并快进到视频的末尾部分,你会注意到它需要花一些时间才真正跳转到这部分。这是因为 P 帧需要一个引用帧(比如 I 帧)才能渲染。

你可以做的另一个快速试验,是使用单个 I 帧编码视频,然后再次编码且每 2 秒插入一个 I 帧,并比较成品的大小

B 帧(双向预测)

如何引用前面和后面的帧去做更好的压缩?!简单地说 B 帧就是这么做的。

【数字视频技术介绍】| 视频帧类型(I 帧、P 帧、B 帧)_技术介绍_05   <-   【数字视频技术介绍】| 视频帧类型(I 帧、P 帧、B 帧)_帧内编码_07  ->   【数字视频技术介绍】| 视频帧类型(I 帧、P 帧、B 帧)_关键帧_03

自己动手:使用 B 帧比较视频

你可以生成两个版本,一个使用 B 帧,另一个全部不使用 B 帧,然后查看文件的大小以及画质。

小结

这些帧类型用于提供更好的压缩率,我们将在下一章看到这是如何发生的。现在,我们可以想到 I 帧是昂贵的,P 帧是便宜的,最便宜的是 B 帧。

【数字视频技术介绍】| 视频帧类型(I 帧、P 帧、B 帧)_帧内编码_11

帧类型例子

【数字视频技术介绍】| 视频帧类型(I 帧、P 帧、B 帧)_技术介绍_12




标签:视频,一帧,编码,数字视频,使用,类型,我们
From: https://blog.51cto.com/u_12127193/5945717

相关文章

  • 【数字视频技术介绍】| 编码中的时间冗余和空间冗余
    公众号回复:666,领取学习资源大礼包这是一份循序渐进的视频技术的介绍,来自Github仓库:​​https://github.com/leandromoreira/digital_video_introduction​​本文档旨在尽......
  • Python学习笔记--布尔类型和比较运算符、if判断语句以及相关案例的实现
    布尔类型和比较运算符代码:结果:主要有以下几类:注意:bool类型的真假表示开头必须大写,例如:True和False而要是想要得到布尔类型,除了直接定义,还可以通过比较运算得到布尔......
  • c++ 类型转换
    string转int可以使用std::stoi,std::stol,std::stoll来转换。intstoi(conststd::string&str,std::size_t*pos=nullptr,intbase=10);参考:h......
  • 5.PL/SQL数据类型
    1.标量数据类型变量数据类型的变量只有一个值,且内部没有分量数值类型:用于存储数值类型的数据。如:number:可以存储小数和整数类型数据。格式为:number(p,s):p表示长度,s表......
  • python视频传输方案
    1.1:imageZMQ库实现,发送端importsocketimporttimeimportcv2importimagezmqimporttracebackimportsimplejpegcapture=cv2.VideoCapture(0)#获取摄像头视频c......
  • idea 基本数据类型
    1、整数类型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT分别占用1字节、2字节、3字节、4字节、8字节;任何整数类型都可以加上UNSIGNED属性,表示数据是无符号的,即非......
  • [WPF] MediaElement播放HDR视频泛黄、颜色显示不正确应该如何解决?
    当我们在使用MediaElement控件播放HDR视频时会遇到颜色发灰、泛黄的情况,难道是因为控件做的有问题?其实并不是程序问题,只是我们普通的应用程序工作在8bit色深的环境中,而HDR......
  • 即时通讯音视频开发编码H.264的特点与优势
    即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙。原因在于:实时音视频技术=音视频处理技术+网络传输技术的横向技术应用集合体,而公共互联网不是为了实时......
  • Blazor组件自做十三: VideoPlayer 视频播放器
    Video.js是一个具有大量功能的流行的视频和音频JavaScript库,今天我们试试集成到Blazor.BlazorVideoPlayer视频播放器组件示例https://blazor.app1.es/videoPl......
  • java数据类型(基本数据类型)
    java语言的数据类型分为:基本数据类型,引用数据类型从内存角度来看:基础数据类型存储在自己的空间中,特点:赋值给其他变量,也是赋的真实的值引用数据类型数据值存储在其他......