视频压缩的工作原理

news2024/11/29 0:46:25

一、说明

        当你正在观看你最喜欢的节目,出现缓冲的时候,这是什么原因?当 Wi-Fi 带宽不足以下载传输视频流所需的数据时,就会发生缓冲。也有可能是视频网站发布了未压缩版本的视频文件,因此视频文件太大而无法流畅地流式传输。

        在高清模式下,图像分辨率为1080x1920像素,如果我们想象一个视频由许多这些图像组成,称为帧,那么 Wi-Fi 连接必须多快才能播放24帧/秒?

        答案是超1000兆,没错。由于每一帧都是48兆比特的数据,它实际上需要48×24每秒兆比特 (Mbps) 以观看视频24帧/秒。但大多数高清视频在10兆Wi-Fi速度下都能很好地传输。

二、视频压缩

1、简述

        这是通过视频压缩实现的。

        视频压缩是使用算法来减少在视频文件中传达视觉信息所需的数据量。

        从编辑软件导出文件时,通常 使用压缩算法(如 JPEG、MPEG 或 H.264)对其进行编码。下载或查看时,相应的解压缩算法会对 压缩文件进行解码,以便查看图像或播放视频。

        视频压缩通过减少单个帧中的数据量(称为帧编码)和减少多个帧中的数据(称为帧编码 )来工作。

        帧内编码使用图像压缩技术单独压缩每个帧。

        MJPEG 视频压缩算法正是这样做的,将每个帧视为单独的图像并对其进行压缩。MJPEG可以实现大约10:1压缩,所以我们的48Mb 高清帧可以降低到4.8Mb。这样的压缩足以传输高清视频吗?

        可以。

        如果每个帧是4.8Mb,它仍然需要Wi-Fi速度4.8×24Mbps 以流畅地传输。

        今天,网络上的大多数视频都是使用 H.264 压缩的(新一代H.265也有使用,但是相对还是少一点),H.264是一种强大的算法,结合了帧内和帧间编码以实现200:1压缩。

        鉴于 MJPEG 和 H.264 之间的压缩能力差异,帧内压缩和帧间压缩哪个似乎更强大?

        答案是帧间压缩。没错。H.264 和其他现代算法的强大功能来自帧间压缩的进步,这使得 H.264 能够实现200:1压缩比。

        让我们看看帧间压缩是如何工作的。

2、Macroblocks(宏块)

        这些帧非常相似。我们如何减少显示它们所需的数据量?

        我们只存储帧之间的变化。没错。

        在类似的帧序列中,我们只需要完全存储第一帧。该算法可以根据它们与前一帧之间的相似性来预测后续帧。

        帧间编码记录帧如何变化,而不是完全存储每个帧。

        首先,编码器将它试图预测的帧(我们称之为当前帧)划分为宏块 - 矩形像素组。

         除非前一帧来自完全不同的场景,否则当前帧中的大多数宏块都可以与前一帧中的像素组匹配。而且,这正是编码器试图找到的。

        编码器使用块匹配算法来查找前一帧中宏块的最佳拟合匹配。

        识别匹配区域后,编码器需要哪些信息才能从前一帧生成当前帧?

        没错。要生成预测帧,编码器需要知道当前帧中的宏块来自前一帧的位置。

         箭头或运动矢量描述当前帧中的宏块在上一帧中的位置。确定宏块的运动矢量的过程称为运动估计

        让我们看看如何使用它来预测帧。

3、运动补偿和残差

        到目前为止,我们已经将要编码的帧划分为宏块,使用匹配算法查找前一帧中的匹配区域,并计算运动矢量来描述宏块的来源。,当这种情况发生时:

        我们可以使用运动矢量和前一帧重建当前帧吗?

        实际上,我们可以。

        运动矢量描述当前帧中的宏块在前一帧中来自何处。编码器可以使用此信息来创建运动补偿帧。

         运动补偿帧足以单独使用吗?不能,我们还需要原始帧的一些信息,进行修复运动补偿帧。

        为了在不显著增加数据的情况下提高图像质量,我们必须包含来自全分辨率当前帧的一些信息。

        下面是显示运动补偿帧和原始帧的不同之处。

        残差图像(有时称为预测误差)存储运动补偿帧与原始帧之间的差异。 

        残差图像残余通常比原始帧小几百近千倍。

        压缩的视频文件包含序列中的第一帧、运动矢量和残差图像。

4、小结

        播放压缩视频时,解码器使用运动矢量和第一帧创建运动补偿帧,然后将残余图像添加到运动补偿帧中以纠正预测错误。

        现代视频压缩算法能够使用帧间编码实现高压缩率,该编码使用运动矢量和残差预测帧。这使我们能够以最少的缓冲观看和共享视频。

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

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

相关文章

Linux常用命令——grpconv命令

在线Linux命令查询工具 grpconv 用来开启群组的投影密码 补充说明 grpconv命令用来开启群组的投影密码。Linux系统里的用户和群组密码,分别存放在/etc目录下的passwd和group文件中。因系统运作所需,任何人都得以读取它们,造成安全上的破绽…

Linux——TCP协议2

目录 确认应答(ACK)机制 超时重传机制 连接管理机制 流量控制 滑动窗口 快重传VS超时重传 拥塞控制 延迟应答 捎带应答 面向字节流 粘包问题 TCP异常情况 基于TCP应用层协议 TCP/UDP对比 用UDP实现可靠传输 listen 的第二个参数 确认应答(ACK)机制 TCP将每个字节的数…

力扣高频SQL50题(基础版)——第五天

力扣高频SQL50题(基础版)——第五天 1 至少有5名直接下属的经理 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 #①找到经理的所有编号②让其与员工表内连接,然后分组筛选即可 SELECT e1.name FROM (SELECT id,nameFROM EmployeeWHERE managerId IS…

Vmware虚拟机实例配置静态IP

最近在给虚拟机配置静态IP的时候,出了一些小问题,本文主要描述操作过程中一些小问题的解决。 主要参考资料: How to set up Linux in VMWare Workstation with static IP (IPv4) 个人配置信息: VMware Workstation Debian 记录一下虚拟机的网卡信息 …

文本编辑器

章节目录: 一、Vim 编辑器1.1 检查 vim 软件包1.2 vim 基础1.3 命令模式1.4 输入模式1.5 底线命令模式( Ex 模式 ) 二、nano 编辑器三、结束语 一、Vim 编辑器 vi 编辑器是 Unix 系统中最早的编辑器之一。vim 是从 vi 发展出来的一个文本编辑…

GTK官方教程

前言: 让你在开发中爱不释手的 GT 包。关注GSLS官网,查看更多源码 ヾ(✿゚▽゚)ノ工具包。 所有文章 小编尽量让读者可以 直接 读懂 与 完全 复制粘贴,其中复杂或较多 的源码 会有 源码 并 贴上 github 网址。 GT 类 里面…

图文并茂教你快速入门React系列04-状态管理

在React中,什么是状态? 响应式 使用 React,你不用直接从代码层面修改 UI。举个栗子哇,不用编写诸如“禁用按钮”、“启用按钮”、“显示成功消息”等命令。相反,你只需要描述组件在不同状态(“初始状态”…

chatgpt赋能python:Python另存为在哪:一篇SEO指南

Python另存为在哪:一篇SEO指南 简介 Python是目前最流行的编程语言之一,它的高效性和易用性使得越来越多的人选择使用它来编写软件和web应用程序。然而,Python在保存文件时可能会有些棘手,尤其是在需要另存为不同格式或目录时。…

chatgpt赋能python:Python只取数字:你需要知道的一切

Python只取数字:你需要知道的一切 在当今数字化的时代,数字信息已经成为全球交流和经济活动的主要组成部分。因此,在处理数据时,我们经常需要从文件中提取数字信息。Python是一种广泛应用于数据处理和分析的编程语言,…

Java面向对象程序开发——基础

文章目录 前言类和对象类对象 构造方法匿名对象变量作用域this关键字总结 前言 提示:这里可以添加本文要记录的大概内容: Java 是一种以面向对象编程为基础的编程语言 在 Java 编程中,一切皆为对象 每个对象都有其自己的属性和方法 对象可以…

图论试题2021

25 A:最大度是7,大于了顶点数6,故不是简单图的度序列。 C:树的度序列至少要有两个度为1的顶点 D:只要度数为奇数的个数有偶数个,就是度序列。 A:每棵树的中心由一个点或两个相邻点组成 B&…

碳中和城市建筑能源系统(1):能源篇(龙惟定)2022

碳中和城市建筑能源系统(1):能源篇 碳中和城市建筑能源系统(1):能源篇(龙惟定)2022 碳中和城市建筑能源系统(2):网络篇(龙惟定)2022 碳中和城市建筑能源系统&…

chatgpt赋能python:Python可以用i++吗?——探讨Python自增自减运算符

Python可以用i吗?——探讨Python自增自减运算符 Python作为一门高级编程语言,一直以来都备受开发者们的喜爱。Python以代码简洁、语言简单易懂、易于学习等特点而赢得了广大开发者的信赖。然而,在Python中并没有i这样的自增自减运算符&#…

计算机网络第一章——计算机系统结构(下)

提示:总角之宴,言笑晏晏。信誓旦旦,不思其反。反是不思,亦已焉哉。 文章目录 1.2.1 分层结构,协议,接口和服务为什么要有分层?怎么分层正式认识分层结构概念总结 1.2.2 OSI 参考模型ISO参考模型…

软考A计划-电子商务设计师-电子商务系统分析与设计

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

【JUC基础】14. ThreadLocal

目录 1、前言 2、什么是ThreadLocal 3、ThreadLocal作用 4、ThradLocal基本使用 4.1、创建和初始化 4.2、存储和获取线程变量 4.3、清理和释放线程变量 4.4、小结 4.5、示例代码 5、ThreadLocal原理 5.1、set() 5.2、get() 5.3、变量清理 5.4、ThreadLocalMap 6、…

硬链接与符号链接

硬链接与符号链接(Hard Link vs Symbolic Link) 两者对于 Linux 操作系统的异同、优缺点。 什么是链接? 在最一般的意义上,链接是两个对象之间的连接。更具体地说是在计算方面;根据牛津定义,链接是与代码或指令的连接&#xff0c…

【读书笔记】《平凡的世界》- 路遥

他又进一步想,郝红梅抛开他而和顾养民相好,也完全是正常的啊!他自己在哪方面都无法和顾养民比较。男女相好,这是两厢情愿的事,而怎能像乡俗话说的“剃头担子一头热”呢? 青春激流打起的第一个浪头在内心渐渐…

Eclipse不用删除之前的项目也可以多次导入相同的项目,操作十分简单!!

问题引入 当我们在学习时,常常需要多次导入网上的同一个案例进行查看效果或者导入自己的项目、用于进行代码测试,原来的项目要继续保留,作为备份,防止代码测试对代码修改过火,一去不返。但当我们导入在Eclipse项目管理…

JavaScript蓝桥杯------学海无涯

目录 一、介绍二、准备三、目标四、代码五、完成 一、介绍 小蓝最近一直在云课平台学习,为了更好的督促自己,于是将每天的学习时间都记录了下来,但是如何更加直观的显示学习时间让小蓝很是苦恼。本题需要你使用 ECharts 帮助小蓝实现统计学习…