视频压缩:I帧、P帧、B帧

/**************************************************************************************************************************************************************************************

**说明:    

        1.本文通过整理而来,集多个高手的精华,此为最重点!!!
        2.因为在海思平台做多媒体视频处理,所以了解I帧、P帧、B帧等压缩-编解码特点是必须的。
        3.海思I帧间隔即GOP取值范围:[0, 1000],以帧为单位,为动态属性。
        4.欢迎拍砖。

 ***************************************************************************************************************************************************************************************/

    视频压缩中,每帧代表一幅静止的图像。而在实际压缩时,会采取各种算法减少数据的容量,其中IPB就是最常见的。

    简单地说,I帧是关键帧,属于帧内压缩就是和AVI的压缩是一样的。P是向前搜索的意思。B是双向搜索。他们都是基于I帧来压缩数据。

   I帧表示关键帧,你可以理解为这一帧画面的完整保留解码时只需要本帧数据就可以完成(因为包含完整画面)

   P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧P没有完整画面数据,只有与前一帧的画面差别的数据

   B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别(具体比较复杂,有4种情况),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累~

    采用的压缩方法: 分组:把几帧图像分为一组(GOP),为防止运动变化,帧数不宜取多。

        1.定义帧:将每组内各帧图像定义为三种类型,即I帧、B帧和P帧;

        2.预测帧:以I帧做为基础帧,以I帧预测P帧,再由I帧和P帧预测B帧;

        3.数据传输:最后将I帧数据与预测的差值信息进行存储和传输。

 

一、I  

    I图像(帧)是靠尽可能去除图像空间冗余信息来压缩传输数据量的帧内编码图像。

    I帧又称为内部画面 (intra picture),I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩(做为随机访问的参考点)可以当成图象。在MPEG编码的过程中部分视频帧序列压缩成为I帧,部分压缩成P帧,还有部分压缩成B帧。I帧法是帧内压缩法(P、B为帧间),也称为“关键帧”压缩法。I帧法是基于离散余弦变换DCT(Discrete Cosine Transform)的压缩技术,这种算法与JPEG压缩算法类似。采用I帧压缩可达到1/6的压缩比而无明显的压缩痕迹。

    I帧特点

        1.它是一个全帧压缩编码帧。它将全帧图像信息进行JPEG压缩编码及传输;

        2.解码时仅用I帧的数据就可重构完整图像;

        3.I帧描述了图像背景和运动主体的详情;

        4.I帧不需要参考其他画面而生成;

        5.I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量);

        6.I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧;

        7.I帧不需要考虑运动矢量;

       8.I帧所占数据的信息量比较大。

    I帧编码流程:

        (1)进行帧内预测,决定所采用的帧内预测模式。

        (2)像素值减去预测值,得到残差。

        (3)对残差进行变换和量化。

        (4)变长编码和算术编码。

        (5)重构图像并滤波,得到的图像作为其它帧的参考帧。

 

二、P

     P图像(帧)是通过充分降低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧

    在针对连续动态图像编码时,将连续若干幅图像分成P,B,I三种类型,P帧由在它前面的P帧或者I帧预测而来,它比较与它前面的P帧或者I帧之间的相同信息或数据,也即考虑运动的特性进行帧间压缩。P帧法是根据本帧与相邻的前一帧(I帧或P帧)的不同点来压缩本帧数据。采取P帧和I帧联合压缩的方法可达到更高的压缩且无明显的压缩痕迹。

    P帧的预测与重构:

        P帧是以I帧为参考帧,在I帧中找出P帧“某点”的预测值和运动矢量,取预测差值和运动矢量一起传送。在接收端根据运动矢量从I帧中找出P帧“某点”的预测值并与差值相加以得到P帧“某点”样值,从而可得到完整的P帧。

    P帧特点:

        ①P帧是I帧后面相隔1-2帧的编码帧。  

        ②P帧采用运动补偿的方法传送它与前面的I或P帧的差值及运动矢量(预测误差)。  

        ③解码时必须将I帧中的预测值与预测误差求和后才能重构完整的P帧图像。  

        ④P帧属于前向预测的帧间编码。它只参考前面最靠近它的I帧或P。  

        ⑤P帧可以是其后面P帧的参考帧,也可以是其前后的B帧的参考帧。

        ⑥由于P帧是参考帧,它可能造成解码错误的扩散。 

        ⑦由于是差值传送,P帧的压缩比较高。

 

三、B

    B图像(帧)是既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧。   

    B帧法是双向预测的帧间压缩算法。当把一帧压缩成B帧时,它根据相邻的前一帧、本帧以及后一帧数据的不同点来压缩本帧,也即仅记录本帧与前后帧的差值。只有采用B帧压缩才能达到200:1的高压缩。一般地,I帧压缩效率最低,P帧较高,B帧最高。

    B帧的预测与重构:

        B帧以前面的I或P帧和后面的P帧为参考帧,“找出”B帧“某点”的预测值和两个运动矢量,并取预测差值和运动矢量传送。接收端根据运动矢量在两个参考帧中“找出(算出)”预测值并与差值求和,得到B帧“某点”样值,从而可得到完整的B帧。

    B帧特点:

        1.B帧是由前面的I或P帧和后面的P帧来进行预测的;

        2.B帧传送的是它与前面的I或P帧和后面的P帧之间的预测误差及运动矢量;

        3.B帧是双向预测编码帧;

        4.B帧压缩比最高,因为它只反映2参考帧间运动主体的变化情况,预测比较准确;

        5.B帧不是参考帧,不会造成解码错误的扩散。 

    P 帧和 B 帧编码的基本流程为:

        (1)进行运动估计,计算采用帧间编码模式的率失真函数(节)值。P 帧 只参考前面的帧,B 帧可参考后面的帧。

        (2)进行帧内预测,选取率失真函数值最小的帧内模式与帧间模式比较,确定采用哪种编码模式。

        (3)计算实际值和预测值的差值。

        (4)对残差进行变换和量化。

        (5)若编码,如果是帧间编码模式,编码运动矢量。

    :IBP各帧是根据压缩算法的需要,是人为定义的,它们都是实实在在的物理帧,至于图像中的哪一帧是I,是随机的,一但确定了I,以后的各帧就严格按规定顺序排列。 

 

四、实际应用

    从上面的解释看,我们知道I和P的解码算法比较简单,资源占用也比较少,I只要自己完成就行了,P呢,也只需要解码器把前一个画面缓存一下,遇到P时就使用之前缓存的画面就好了,如果视频流只有I和P,解码器可以不管后面的数据,边读边解码,线性前进,大家很舒服。

    但网络上的电影很多都采用了B帧,因为B帧记录的是前后帧的差别比P帧能节约更多的空间,但这样一来,文件小了,解码器就麻烦了,因为在解码时,不仅要用之前缓存的画面,还要知道下一个I或者P的画面(也就是说要预读预解码),而且,B帧不能简单地丢掉,因为B帧其实也包含了画面信息,如果简单丢掉,并用之前的画面简单重复,就会造成画面卡(其实就是丢帧了),并且由于网络上的电影为了节约空间,往往使用相当多的B帧,B帧用的多,对不支持B帧的播放器就造成更大的困扰,画面也就越卡。

    一般平均来说,I的压缩率是7(跟JPG差不多),P是20,B可以达到50,可见使用B帧能节省大量空间,节省出来的空间可以用来保存多一些I帧,这样在相同码率下,可以提供更好的画质。


   在如上图中,GOP (Group of Pictures)长度为13,S0~S7 表示 8个视点,T0~T12 为 GOP的 13个时刻。每个 GOP包含帧数为视点数 GOP 长度的乘积。在该图中一个 GOP 中,包含94 个 B帧。B 帧占一个 GOP 总帧数的 90.38%。GOP 越长,B 帧所占比例更高,编码的率失真性能越高。下图测试序列 Race1 在不同 GOP 下的率失真性能对比。

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

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

相关文章

EasyNLP 中文文图生成模型带你秒变艺术家

导读 宣物莫大于言,存形莫善于画。 --【晋】陆机 多模态数据(文本、图像、声音)是人类认识、理解和表达世间万物的重要载体。近年来,多模态数据的爆炸性增长促进了内容互联网的繁荣,也带来了大量多模态内容理解和生成…

阿里本地生活全域日志平台 Xlog 的思考与实践

1. 背景 程序员学习每一门语言都是从打印“hello world”开始的。这个启蒙式的探索,在向我们传递着一个信息:“当你踏进了编程的领域,代码和日志将是你最重要的伙伴”。在代码部分,伴随着越来越强大的idea插件、快捷键&#xff0…

关于运维,阿里云、字节、华科的专家如是说

只有今天周密的“运”筹帷幄,才有将来持续的“维”护稳定。不久前,阿里云联合中国计算机行业协会信息存储与安全专业委员会,邀请到了来自阿里云、字节跳动、华中科技大学的多位专家,共同探讨数字经济时代存储系统的运维之道。 一…

行业 SaaS 微服务稳定性保障实战

很多研发人员在日常工作中经常回遇到以下两个问题:竟然不可以运行,为什么?竟然可以运行,为什么? 因此,他们非常期望可观测能够提供解决问题的思路。 引言 2017 年,推特工程师 Cindy 发表了一篇…

阿里云全站加速 DCDN 重磅发布!打造新一代加速引擎

在数字化转型变革逐步深入的当下,安全高效成为企业上云、全球化部署的关键需求。 随着应用场景复杂度不断提升、业务需求差异化发展,为了给企业提供更完善的安全加速服务,阿里云对全站加速DCDN产品进行了全面升级,针对边缘安全防…

阿里云云原生一体化数仓 - 数据安全能力解读

MaxCompute产品简介 MaxCompute是一款多功能、低成本、高性能、高可靠、易于使用的数据仓库和支持全部数据湖能力的大数据平台,支持超大规模、serverless和完善的多租户能力,内建企业级安全能力和管理功能,支持数据保护和安全共享&#xff0…

EMT4J——让 Java 应用升级更轻松

前言 JDK 升级对于 Java 应用来说是不得不面对的事情,一方面 Java 生态系统希望 Java 应用能跟上最新 JDK 版本: Oracle 建议将 JDK 的 LTS 版本的发布周期从 3 年调整为 2 年,对于只使用 LTS 版本的应用来说,可以在更短时间内使用最新的技术&#xff…

多年锤炼,迈向Kata 3.0 !走进开箱即用的安全容器体验之旅

一、Kata 的过去 让我们将时钟拨回 2015 年 5 月,Hyper.sh 和 Intel 开源技术中心的工程师们分别独立发布了runV 和 Clear Containers 的虚拟化容器项目,而这两个项目便是 Kata Containers1 的前身。这两个项目互相有很多交流,在分别独立发展…

从函数计算到 Serverless 架构

前言 随着 Serverless 架构的不断发展,各云厂商和开源社区都已经在布局 Serverless 领域,一方面表现在云厂商推出传统服务/业务的 Serverless 化版本,或者 Serverless 计算平台,另一方面表现在开源社区中 Serverless 相关项目逐渐…

PolarDB B-tree 并发控制优化

InnoDB 索引 InnoDB 引擎使用索引组织表,每个表的数据都放在一个对应的索引中,该索引称为聚集索引(clustered index),使用索引组织表的目的是: 动态地组织磁盘文件结构,维护数据记录有序&…

几种常见的 MySQL/PolarDB-MySQL 回收表空间方法对比

背景 为什么需要回收表空间?任何一个存储或您购买的实例规格都有容量限制,并且根据存储介质不同,保存方式不同,相应地成本也会不同。在线数据库的存储成本是比较高的,所以架构师和DBA在系统设计之初就要考虑满足未来几…

Lindorm-Operator云原生实践

背景介绍: 随着 Kubernetes 使用的越来越广泛,k8s管理的native的对象资源有时并不能满足用户的需求,为了提高可扩展性,自 v1.7 以来,Kubernetes 引入了 CRD 机制(CustomResourceDefinition)&am…

客户端单元测试实践 — C++篇

背景 我们团队在手淘中主要负责BehaviX模块,代码主要是一些逻辑功能,很少涉及到UI,为了减少双端不一致问题、提高性能,我们采用了将核心代码C化的策略。 由于团队项目偏底层,测试同学难以完全覆盖,回归成…

基于 RTS 超低延时直播优化强互动场景体验

RTS 在阿里云视频直播的基础上进行底层技术优化,通过集成阿里云播放器 SDK,支持在千万级并发场景下节点间毫秒级延时直播的能力,弥补了传统直播存在 3~6 秒延时的问题,确保了超低延时、低卡顿、秒开流畅的直播观看体验。本文介绍了…

一文详解用 eBPF 观测 HTTP

前言 随着eBPF推出,由于具有高性能、高扩展、安全性等优势,目前已经在网络、安全、可观察等领域广泛应用,同时也诞生了许多优秀的开源项目,如Cilium、Pixie等,而iLogtail 作为阿里内外千万实例可观测数据的采集器&…

面向云时代的龙蜥操作系统,是 CentOS 替代的最佳选择

2022 开放原子全球开源峰会 OpenAnolis 分论坛上,阿里云智能基础软件产品经理张鹏程做了《面向云时代的龙蜥操作系统,应对 CentOS 停服的最佳选择》的主题分享,介绍了操作系统产业迎来新发展格局,龙蜥致力于成为 CentOS 迁移的最佳…

数据库治理利器:动态读写分离

背景 在分布式系统架构中,业务的流量都是端到端的。每个请求都会经过很多层处理,比如从入口网关再到 Web Server 再到服务之间的调用,再到服务访问缓存或 DB 等存储。 对于我们的系统来说,数据库是非常重要的一块。因此无论是在稳…

为什么我要迁移 SpringBoot 到函数计算

为什么要迁移? 我们的业务有很多对外提供服务的 RESTful API,并且要执行很多不同的任务,例如同步连锁 ERP 中的商品信息到美团/饿了么等平台,在线开发票等。由于各种 API 和任务执行的不确定性,经常会因为资源不足导致…

Ingress Nginx 接连披露高危安全漏洞,是否有更好的选择?

今年 K8s Ingress Nginx 项目接连披露了三个高危安全漏洞(CVE-2021-25745[1], CVE-2021-25746[2], CVE-2021-25748[3]),该项目也在近期宣布将停止接收新功能 PR,专注修复并提升稳定性。Ingress Nginx 作为 K8s 项目自带的网关组件…

浅谈数据仓库架构设计

1. 数据中台与DW/BI/DSS 个人认为数据中台本质上是一种新的适配大数据技术发展的新的“数据仓库-决策支持(商业智能)”架构。这个架构是构建在传统的架构基础之上,对传统架构的一种新的发展。 数据中台从企业的视角出发,要求企业…