AI视觉领域流媒体知识入门介绍(二):深入理解GOP

news2024/11/28 11:39:00

GOP(group of pictures)

在流行的视频编码算法中,都包含GOP这个概念,例如MPEG-2, H.264, and H.265。

背景

关于视频存储和传输的“size”:

Resolution

分辨率

Uncompressed Bitrate

未压缩时的比特率

1280×720 (720p)~ 1.5 Gbps
1920×1080 (1080p)~ 3 Gbps
3180 x 2160 (2160p or 4K)~ 12 Gbps

试想,要传输一个4k的视频,比特率高达12Gbps,而我们普通家用的带宽也就几百Mbps,根本无法传输,即使传过来了,播放效果基本就是PPT。。。

视频压缩

既然原始视频码率太高无法传输,那自然想到可以先进行数据压缩,减小体积后再传输。

通常是压缩到1-20 Mbps这个范围。

视频压缩的基本原理

在一系列图像中找到并消除冗余。

例如新闻广播,每一帧视频通常与之前和之后的视频非常相似。新闻广播员说话时嘴唇可能会移动,信息可能会沿着屏幕底部滚动,但图像的很大一部分在每一帧之间要么相同,要么非常相似。

那这些重复的/非常相似的像素,完全没必要传输,这样就能起到压缩视频的效果了。

时间压缩

根据上述规律,可以先发送一个包含全部信息的关键帧,后续的帧就只发送与之前的关键帧不一样的地方。接收方收到数据后,通过已经接收到的关键帧+差别数据,就可以“恢复”出原帧。(当然这里的恢复不是100%还原,而是有损的)

这种利用帧的时间先后顺序的方法,属于时间压缩类算法。

空间压缩

思路一脉相承,只不过这次是在同一张图片内部找到并消除重复数据。

例如大部分国家的国旗图片,上面都是大面积的相同颜色,完全可以消除重复。

JPEG格式的图片也是用的类似的方法。

再谈GOP

GOP就是两个关键帧之间的距离。

为什么需要多个关键帧,而不是只发送视频的第一个关键帧即可?

1. 用户是随机开始播放的,并一定是从头开始

2. 若场景变化很大,和最开始的关键帧相比,几乎没什么冗余的部分,此时压缩已经没有意义了

3. 中间再次发送新的关键帧,也能纠正传输错误、误差等,增强了可控制性

关键帧的另一个名字: Intra-coded frame(帧内编码帧,简称I帧)

这种帧在解码时,不依赖其他帧,因此称为“帧内”。

预测帧:Predicted frame,简称P帧

P帧携带的是与前一帧相比,差异的地方。

它既利用了时间压缩,也使用了图片内部的空间压缩。

为什么叫预测帧?预测了与前一帧的变化(具体要深入实际的编码算法)

双向预测帧:Bi-directional Predicted frame,简称B帧

B帧的压缩效果更好,因为它仅携带和前+后两帧之间的差异部分。

如何找到与未来帧之间的差异呢?

很简单,编码器先缓存一部分帧,这样就知道未来帧是啥了

最后总结一下

GOP表示每多少帧发送一个I帧

I帧可以直接被解码,不依赖外部

P帧解码需要依赖前一个P帧or I帧

B帧解码通常依赖前和后一个I帧 or P帧

下图中的两个B帧,按FIFO解码

注意:帧的显示顺序,和帧实际被解码的顺序是不一样的。

相关阅读:

AI视觉领域流媒体知识入门介绍(一)-CSDN博客 

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

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

相关文章

chrome 一些详细信息查找的地方

可以获得chrome 信息的列表 缓存 #缓存位置# 浏览器事件

打印机:Open the front cover and pull out the drum unit

参考: https://support.brother.com/g/b/faqend.aspx?cgb&langen&prodmfcl8690cdw_eu_as&faqidfaq00000154_082#:~:textReplacing%20the%20drum%20unit%20Make%20sure%20the%20machine,unit%20out%20of%20the%20machine%20until%20it%20stops. 故障现…

【阿里云】通义千问X函数计算FC-爬取免费接口3个月附代码(参加活动可获得京东卡奖励)

目录 前言第一步:打开群内小程序链接报名报名方式一:报名方式二: 第二步:打开专属活动链接第三步:上传作品最后一步:去小程序提交完成记录爬取通义千问接口最后 前言 🧡本次活动可以获得京东卡9…

运动重定向:TeachNet

Vision-based Teleoperation of Shadow Dexterous Hand using End-to-End Deep Neural Network解析 摘要1. 简介2. Related Work2.1 基于视觉的无标记远程操作2.2 基于深度的3D手部姿势估计2.3 远程操作中的主从配对2.4 遥操作映射方法 3. 师生网络Joint angle lossConsistency…

STM32 GPIO 描述

一、GPIO功能描述 每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH) ,两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR) ,一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR…

【计算机组成与设计】Chisel取指和指令译码设计

本次试验分为三个部分: 目录 设计译码电路 设计寄存器文件 实现一个32个字的指令存储器 设计译码电路 输入位32bit的一个机器字,按照课本MIPS 指令格式,完成add、sub、lw、sw指令译码,其他指令一律译码成nop指令。输入信号名…

腾讯云16核服务器配置有哪些?CPU型号处理器主频性能

腾讯云16核服务器配置大全,CVM云服务器可选择标准型S6、标准型SA3、计算型C6或标准型S5等,目前标准型S5云服务器有优惠活动,性价比高,计算型C6云服务器16核性能更高,轻量16核32G28M带宽优惠价3468元15个月,…

Redis之 redis.conf配置文件

文章目录 前言一、基本配置1.单位2.包含3.网络配置4.通用5.快照6.安全7.限制8.仅追加模式 二、总体主要介绍总结 前言 行家一出手,就知有没有,让一起学习redis.config配置文件。 一、基本配置 Redis 的配置文件位于 Redis 安装目录下,文件名…

【C++代码】接雨水,最近的更大的元素,柱状图中的最大矩阵,单调栈--代码随想录

题目:每日温度 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。…

凡人修仙之灵药篇

一、总纲 (1)药物均来自拼夕夕,我已经买过的,确认都是正版的,不过急需疗伤的还是线下就医吧, 快递一般都是三天到的。 (2)具有多种并发症建议去就医。 (3)两…

【公益案例展】 网易“双碳”智控系统——开源开放赋能绿色发展

‍ 网易天工公益案例 本项目案例由网易天工投递并参与数据猿与上海大数据联盟联合推出的 #榜样的力量# 《2023中国数据智能产业最具社会责任感企业》榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 2020年9月中国明确提出2030年“碳达峰”与2060年“碳中和”…

【黑马程序员】SSM框架——MyBatisPlus

文章目录 前言一、MyBatisPlus 简介1. 入门案例1.1 创建新模块1.2 选择需要的技术集1.3 添加 mp 起步依赖1.4 设置 Jdbc 参数1.5 实体类与表结构1.6 定义数据接口1.7 测试功能 2. MyBatisPlus 概述3. MyBatisPlus 特性 二、标准数据层开发1. 标准数据层 CRUD 功能1.1 Lombok1.2…

Educational Codeforces Round 157 (Rated for Div. 2) D. XOR Construction (思维题)

题目 给定长为n-1(n<2e5)的整数序列a&#xff0c;第i个数a[i](0<a[i]<2n) 构造一个长为n的整数序列b&#xff0c;满足&#xff1a; 1. 0到n-1在b数组中每个数恰好出现一次 2. 对于&#xff0c; 题目保证一定有解&#xff0c;有多组时可以输出任意一组 思路来源 …

腾讯云CVM服务器操作系统镜像大全

腾讯云CVM服务器的公共镜像是由腾讯云官方提供的镜像&#xff0c;公共镜像包含基础操作系统和腾讯云提供的初始化组件&#xff0c;公共镜像分为Windows和Linux两大类操作系统&#xff0c;如TencentOS Server、Windows Server、OpenCloudOS、CentOS Stream、CentOS、Ubuntu、Deb…

图及谱聚类商圈聚类中的应用

背景 在O2O业务场景中&#xff0c;有商圈的概念&#xff0c;商圈是业务运营的单元&#xff0c;有对应的商户BD负责人以及配送运力负责任。这些商圈通常是一定地理围栏构成的区域&#xff0c;区域内包括商户和用户&#xff0c;商圈和商圈之间就通常以道路、河流等围栏进行分隔。…

Java连接Redis并操作Redis中的常见数据类型

目录 一. Java连接Redis 1. 导入依赖 2. 建立连接 二. Java操作Redis的常见数据类型存储 1. Redis字符串(String) 2. Redis哈希(Hash) 3. Redis列表&#xff08;List&#xff09; 4. Redis集合&#xff08;Set&#xff09; 一. Java连接Redis 1. 导入依赖 pom依赖…

Linux--线程-条件控制实现线程的同步

1.条件变量 条件变量是线程另一可用的同步机制。条件变量给多个线程提供了一个会合的场所。条件变量与互斥量一起使用时&#xff0c;允许线程以无竞争的方式等待特定的条件发生。 条件本身是由互斥量保护的。线程在改变条件状态前必须首先锁住互斥量&#xff0c;其他线程在获…

基于STM32HAL库(独立看门狗)-简述

目录 概述 一、开发环境 二、STM32CubeMx配置 三、编码 四、运行结果 五、总结 概述 一个成熟靠谱的项目&#xff0c;离不开“看门狗”的必选项&#xff0c;凡是人写的程序多少都会有出现bug的情况&#xff08;或芯片外设受外界干扰导致故障程序卡死、跑飞的情况&#xf…

第二阶段第一章——面向对象

前言 学习了这么久Python&#xff08;呃其实也没多久差不多两周&#xff09;&#xff0c;可能有小伙伴说我废了&#xff0c;两周才学这么点&#xff0c;咋说呢&#xff0c;我曾经也是急于求成&#xff0c;做任何事情都是急于求成&#xff0c;比如我喜欢一个人我就想马上跟她在…

14 _ 排序优化:如何实现一个通用的、高性能的排序函数?

几乎所有的编程语言都会提供排序函数,比如C语言中qsort(),C++ STL中的sort()、stable_sort(),还有Java语言中的Collections.sort()。在平时的开发中,我们也都是直接使用这些现成的函数来实现业务逻辑中的排序功能。那你知道这些排序函数是如何实现的吗?底层都利用了哪种排…