视频编解码技术介绍 - 基本概念篇

  • 第一章 视频编解码技术介绍 - 基本概念篇

文章目录

  • 前言
  • 1. 我的疑问
    • 1.1 什么是视频编解码技术
    • 1.2 为什么会有视频编解码技术
    • 1.3 视频编解码中有哪些核心技术
    • 1.4 作为开发者需要重点了解视频编解码中的哪些技术
  • 2. 视频编解码的历史
  • 3. 基本概念
    • 3.1 像素
    • 3.2 分辨率
    • 3.3 ppi(像素密度单位)
    • 3.4 显示宽高比
    • 3.5 像素宽高比
    • 3.6 帧
    • 3.7 FPS
    • 3.8 码流(比特率)
    • 3.9 颜色模型
      • 3.9.1 RGB
      • 3.9.2 YUV
    • 3.10 帧类型
      • 3.10.1 I帧(帧内,关键帧)
      • 3.10.2 P帧 (预测帧)
      • 3.10.2 B帧(双向预测帧)
      • 3.10.4 三者间的关系
    • 3.11 H264
    • 3.12 H265
  • 4. 参考链接


前言

由于后续的工作要接触摄像头开发,因此这里需要提前了解些视频编解码相关的知识,以及视频相关的业务。

但是工作至今由于没怎么接触过视频编解码,因此对于视频编解码中的很多东西都不是很清楚,也不知道该从哪里去学。

这里主要记录下从各方渠道了解到的一些视频编解码的基本概念,让自己和大家对视频编解码先有个初步的认识。

本文比较适合像我这种粗略了解过视频编解码技术的小白,另外这是一个学习记录文章,该文章中的很多内容借鉴自github上的开源文章《digital_video_introduction》在此表示感谢。 然后大家也可以转去此文章进行视频编解码技术的学习(讲的很好,还有各种不同语言版本的)。

1. 我的疑问

由于是初次接触视频编解码技术,因此我在想我应该如何入手呢?后来想了下不如给自己提问题,通过提问,解答再不断深挖的方式,让自己对视频编解码技术有个初步的认识。

1.1 什么是视频编解码技术

当我们观看视频时,实际上是在观看由一系列静止图像组成的连续画面。视频编解码技术就是将这些图像进行压缩和解压缩,以便更高效地存储和传输视频内容。

首先,视频编码阶段会对连续的图像进行压缩,以减小文件大小并节省存储空间或传输带宽。这一过程涉及将图像数据转换为更紧凑的表示形式,例如通过去除冗余信息、利用图像间的相似性以及采用压缩算法来实现。

常见的视频编码标准包括H.264/AVC和H.265/HEVC等。

其次,视频解码阶段则是对压缩后的视频数据进行解压缩,以便重新构建出原始的连续图像序列,使其能够在屏幕上播放。解码器会根据存储的压缩数据还原出连续的图像,并通过适当的处理和显示技术呈现给观众。

1.2 为什么会有视频编解码技术

通常视频文件都非常庞大,如果直接存储或者传输,那么对内存大小和传输速度的要求将会变的非常高,进而降低用户的体验,也不利于整个生态的发展。

因此为了解决上述问题,才有了视频编解码技术,其通过一些技巧,对视频大小进行压缩,例如删除重复信息、利用相似图片等,将视频数据压缩成更小的体积。

1.3 视频编解码中有哪些核心技术

  • 运动估计
    运动估计通过分析相邻帧之间的像素变化,来推测物体的运动方向和速度。这样在存储视频时,就可以只保存运动部分的信息,而不必每一帧都完整保存,从而节省空间。(这是帧间压缩的一种技术实现)

    可以想一下1s的跑步视频,比如有30帧,那么先分析下后续每一帧和第一帧之间的运动信息,就可以在只保存第一帧和运动数据的情况下推测出后续其它帧的画面。(当然每一帧还是需要再保留一些信息的,只是保存的信息会变得很少)

  • 变换编码
    变换编码是一种将图像数据转换成更易于压缩的形式的技术。==通过将图像数据转换到频域(不同频率的信号)进行处理,可以更有效地压缩数据,==比如利用离散余弦变换(DCT)来实现这一点。(YUV像素编码阶段时,常用到的一种技术)

  • 熵编码
    熵编码是一种通过对数据进行编码来减少信息冗余的技术。它利用信息理论中的熵概念,将出现频率高的信息用更短的编码表示,从而减小数据量,提高压缩效率。

  • 帧内预测和帧间预测
    帧内预测和帧间预测是利用视频序列中相邻帧之间的相关性来进一步减少冗余信息的技术。
    帧内预测是基于当前帧内的像素值进行预测。
    帧间预测则是利用相邻帧之间的像素值进行预测,以达到更好的压缩效果。

  • 量化
    量化是将转换后的系数映射到有限值集合的过程。通过量化,可以减少数据的精度,从而减小数据量。在视频编码中,量化是一个重要的步骤,有助于进一步压缩数据。

1.4 作为开发者需要重点了解视频编解码中的哪些技术

  • 视频编解码基础知识
    首先需要了解视频编解码的基本概念,包括视频帧、编解码器、码率、分辨率等基本概念,以及视频编解码的工作原理和流程。

  • 编码格式
    了解常见的视频编码格式,比如H.264(AVC)、H.265(HEVC)、VP9等,以及它们的特点、优势和劣势。

  • 音视频同步
    学习如何实现音频和视频的同步播放,了解时间戳、帧率等相关概念。

  • 流媒体协议
    了解常见的流媒体传输协议,比如RTMP、HLS、MPEG-DASH等,以及它们在视频传输中的应用和特点。

  • 硬件加速
    了解如何利用GPU、专用硬件加速器等硬件资源来加速视频编解码的过程,提高性能和效率。

  • 视频质量优化
    学习视频编解码中的一些优化技巧,比如码率控制、画面质量调节、视频压缩等,以及如何在保证画面质量的情况下尽可能减小视频文件大小。

2. 视频编解码的历史

在这里插入图片描述

  • 早期视频编码
    早期的视频编码技术主要集中在模拟视频信号(以波的形式)的传输和存储上,如MPEG-1。这些技术适用于较低分辨率和较低质量的视频,而且对于网络传输和存储需求比较高。

  • MPEG-2和DVD时代:
    随着数字视频的兴起,MPEG-2标准应运而生,它是第一个被广泛采用的数字视频压缩标准,被用于DVD、数字电视等领域。MPEG-2实现了更高质量的视频压缩,适用于更高分辨率的视频。
    (注意DVD比VCD存的数据更多,不是因为模拟到数字的转变,实际DVD和VCD存储的都是数字信号,只是DVD的存储容量更大,一般是VCD的10倍左右。)

  • H.264/AVC时代:
    H.264(MPEG-4 AVC)标准的出现标志着视频压缩技术迈入了全新的阶段。H.264采用了更先进的压缩算法,能够在相同画质下实现更高的压缩比,从而适应了高清视频、视频通话和流媒体的快速发展。

  • H.265/HEVC和未来趋势:
    随着4K、8K超高清视频的普及以及虚拟现实、增强现实等新型视频应用的兴起,对视频编码技术提出了更高的要求。H.265(HEVC)作为H.264的后继者,进一步提高了压缩效率,使得超高清视频在更低的比特率下得以传输和存储。此外,未来视频编码技术的发展也将聚焦于更好的虚拟现实支持、更高的动态范围和更广的色域等方面,以满足不断增长的多样化视频应用需求。

实际上视频信号从模拟到数字是一个很大的转变,因为模拟信号是连续的,它可以采取无限数量的取样值,所以直接对模拟信号进行压缩需要处理无穷多的数据点,这不容易实现。

而数字信号是离散的,视频成了数字信号后,我们就能够应用后续所说的各种压缩算法来对视频的大小进行压缩。这样同等内存容量下存储的视频数据更多了、同时长视频数据也更小了,相应的网络传输也就更快了。

海康威视就是抓住了从模拟到数字的转变,在国内早早的将H.264的编码技术给应用了起来,从而在早期建立了一定的技术优势,为后续的发展奠定了基础。

截至目前我了解到常用的家庭摄像机用的还是H.264的编码,因为H.265的编码复杂性相较于于H.264呈几何倍增长,所以虽然能够实现更高的压缩率,但是对芯片的处理性能要求也更高。而在这个消费降级的时代,显然大家对于性价比的追求明显高过从1080P升级到4k和8K的需求,这也变相导致了各大以视频为核心技术的企业仍然是以H.264编码为基础进行产品开发,而延缓H.265系列产品的研发。

3. 基本概念

3.1 像素

像素可以理解为屏幕上的一个小点,然后不同的点就组成了一幅画面。
一个像素一般有不同的长度来表示RGB的颜色,常见的有RGB565和RGB888等。

3.2 分辨率

即一个平面内像素的数量,我们常说的1080P(1080 * 920)、2K(25601440)、4K(40962160 / 38402160)、8K(76804320)。

3.3 ppi(像素密度单位)

理论上来说视频编解码技术中应该是不需要讨论ppi的,它属于一种概念,但是考虑到它在我们的生活中无形的影响着我们,因此这里还是介绍一下。

ppi(像素密度单位)所表示的是每英寸长度所能够排列的像素(pixel)的数目。因此PPI数值越高,即代表显示屏能够以更高的密度显示图像。当然,显示的密度越高,拟真度就越高。

视网膜屏
说到这里再和大家说一下视网膜屏。

视网膜屏其实最早是苹果乔布斯提出来的或者说发扬光大的,视网膜屏并不是说是一种特殊的屏幕,而是指PPI很高的一种屏幕。

乔帮主如此形容视网膜屏:“当你所拿的东西距离你10-12英寸(约25-30厘米)时,它的分辨率只要达到300ppi这个‘神奇数字’(每英寸300个像素点)以上,你的视网膜就无法分辨出像素点了。”

智能手机的早期时代,iphone4和其它手机最明显的一个差别之一
就是ipone的屏幕画面看起来很清晰很细腻,而其它厂商的手机的屏幕画面看起来很粗糙。

之所以造成这种现场的原因就是苹果最早在手机上使用了视网膜屏(即同等大小的屏幕具备更多的像素点)。不得不说优秀的产品,真的是体现在很多地方。

如下两张图,假如都是同样尺寸的屏幕,第一张图代表的是ppi比较低的(可以理解为咱们平时看到的点阵屏)。第二张图是ppid比较高的,其同样尺寸下看到的内容更多,同时也更加细腻。
在这里插入图片描述
在这里插入图片描述

3.4 显示宽高比

在这里插入图片描述
显示高宽比是我们常说的,屏幕的宽高比例(即宽像素个数:高像素个数)

3.5 像素宽高比

在这里插入图片描述
像素宽高比,就是一个像素的宽和高之比

3.6 帧

一帧一般就是一个画面,我们常看到的视频是由一帧帧播放形成的。

3.7 FPS

每秒播放的帧数。
就是我们打王者荣耀的时候,右上方那个60FPS、120FPS,如果手机性能不好的话,一到打团的时候就会卡,这个时候你看下右上方的FPS,很可能已经掉到了30帧以下。

3.8 码流(比特率)

播放一段视频所需要的数据量
码率= 宽 * 高 * 颜色深度 * 帧每秒

例如,一段每秒 30 帧,每像素 24 bits,分辨率是 480x240 的视频,如果我们不做任何压缩,它将需要 82,944,000 比特每秒或 82.944 Mbps (30x480x240x24)。

3.9 颜色模型

3.9.1 RGB

R(red):红色、G(green):绿色、B(blue):蓝色

为什么颜色都是由RGB三色组成的?

这是因为人类视觉系统对于光的感知主要由三类锥细胞负责,它们分别对应红、绿、蓝三个颜色通道。通过调节这三种颜色的亮度和混合比例,我们可以模拟出人类眼睛所能感知到的几乎所有可见颜色

3.9.2 YUV

Y(luma)表示亮度
在这里插入图片描述
U(chroma blue) 蓝色色度
在这里插入图片描述
V(chroma red)红色色度
在这里插入图片描述
YUV组合
在这里插入图片描述

对比RGB我们可以发现YUV没有了Green(绿色),那它到底是怎么把颜色都表示出来的呢?

人体的眼睛大约有1.2亿个视杆细胞(负责亮度)和6百万个视锥细胞(负责颜色),因此人类对于亮度实际比颜色更加敏感。
同时亮度和颜色组合起来才是构成我们所看到这个世界五光十色的主要因素。

==所以尽管YUV中没有绿色通道,但通过亮度(Y)和色度(U、V)的组合,还是可以很好地表示出各种颜色的。==这是因为人类视觉系统对颜色感知的方式并不是简单地通过RGB三原色的组合来实现的,而是更侧重于亮度和色度的变化。

最终的转换公式为:

	R = Y + 1.402V
	B = Y + 1.772U
	G = Y - 0.344U - 0.714V

3.10 帧类型

3.10.1 I帧(帧内,关键帧)

I帧是一种关键帧,它是完整帧的编码,不依赖于其他帧。I帧包含了图像的所有信息,类似于视频序列中的一个独立图片。

当播放视频时,解码器可以通过解码单独的I帧来显示完整的画面,因此I帧也被称为关键点。

I帧通常是一段视频中的第一帧

3.10.2 P帧 (预测帧)

P帧是预测帧,它压缩存储了与之前的一个或多个帧之间的差异。
P帧通过参考前面的一个或多个帧来进行预测编码,从而实现视频数据的压缩。在播放时,解码器会使用已解码的I帧和P帧来恢复视频序列。

P帧一般都是在I帧后面的,基于I帧的完整图像,通过进行各种预测可以实现只记录部分数据(P帧内保存的数据),然后借助I帧来恢复P帧画面的功能。

3.10.2 B帧(双向预测帧)

B帧是双向预测帧,它压缩存储了前后相邻帧之间的差异。B帧不仅可以参考前面的帧(P帧或I帧),还可以参考后面的帧(P帧或I帧),因此具有更高的压缩效率。
在解码时,需要根据前后帧的信息来恢复B帧的内容。

3.10.4 三者间的关系

在这里插入图片描述在这里插入图片描述

3.11 H264

H.264,又称为MPEG-4 AVC(Advanced Video Coding),是一种视频压缩标准,它被广泛应用于数字视频的压缩、传输和存储。

H.264标准之所以出现,是因为人们对视频压缩技术的需求不断增加。随着高清视频、视频通话和流媒体等应用的普及,传统的视频压缩标准已经无法满足对高画质、低码率的需求。因此,H.264标准应运而生,它采用了先进的压缩算法和编码技术,能够显著提高视频压缩的效率,同时保持较高的视觉质量。

3.12 H265

H.265,也被称为HEVC(High Efficiency Video Coding),是一种视频压缩标准,用于提供更高效的视频压缩和更好的视频质量。它是H.264的继任者,旨在进一步提升视频压缩效率。

4. 参考链接

【从零开始】理解视频编解码技术

视网膜屏幕的由来

视频编码中常见的I,P,B帧,一次弄明白~

流媒体服务器播放H.265编码格式为什么不普及?

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

详细讲解Xilinx DDR3 的MIG IP生成步骤及参数含义

前几篇文章讲解了SDRAM到DDR3各自的变化,本文讲解如何使用DDR3,在Altera的Cyclone IV开发板上一般会使用SDRAM作为存储数据的芯片,而Xilinx的S6和7000系列一般使用DDR3作为存储数据的芯片。 从SDRAM芯片内部结构分析其原理,从内部…

腾讯云8核16g服务器性能好不好?亲测并发数支持人数

腾讯云8核16G轻量服务器CPU性能如何?18M带宽支持多少人在线?轻量应用服务器具有100%CPU性能,18M带宽下载速度2304KB/秒,折合2.25M/s,系统盘为270GB SSD盘,月流量3500GB,折合每天116.6GB流量&…

AHU 人工智能实验-CCA

神经网络覆盖算法——CCA(基于Ling Zhang 和Bo Zhang论文) Abstract 在这篇文章中我将介绍基于张铃和张钹学者提出的CCA算法,并实现代码复现,给出使用的数据集,以及实验结果对比。 1. Introduction 1.1 Background 我们知道自…

外包干了6天后悔了,技术明显进步。。。。。

先说一下自己的情况,本科生,19年通过校招进入广州某软件公司,干了接近3年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

[虚拟机保护逆向] [HGAME 2023 week4]vm

[虚拟机保护逆向] [HGAME 2023 week4]vm 虚拟机逆向的注意点:具体每个函数的功能,和其对应的硬件编码的*长度* 和 *含义*,都分析出来后就可以编写脚本将题目的opcode转化位vm实际执行的指令 :分析完成函数功能后就可以编写脚本输出…

跑马灯样式

这里的公告是要做成&#xff0c;跑马灯的样式&#xff0c;文字是会移动并且隐藏掉的。 HTML&#xff1a; <div class"notice"><div class"yrr"><img src"./img/ia_100000018.png" alt"" /></div><div …

循序渐进丨MogDB 数据库特性之动态数据脱敏机制

数据脱敏是行之有效的数据库隐私保护方案之一&#xff0c;可以在一定程度上限制非授权用户对隐私数据的窥探。动态数据脱敏机制是一种通过定制化脱敏策略来实现对隐私数据保护的技术&#xff0c;可以在保留原始数据的前提下有效地解决非授权用户对敏感信息访问的问题。当管理员…

Fastjson 1.2.24 反序列化导致任意命令执行漏洞复现(CVE-2017-18349)

写在前面 CVE-2017-18349 指的是 fastjson 1.2.24 及之前版本存在的反序列化漏洞&#xff0c;fastjson 于 1.2.24 版本后增加了反序列化白名单&#xff1b; 而在 2019 年&#xff0c;fastjson 又被爆出在 fastjson< 1.2.47 的版本中&#xff0c;攻击者可以利用特殊构造的 …

js【详解】async await

为什么要使用 async await async await 实现了使用同步的语法实现异步&#xff0c;不再需要借助回调函数&#xff0c;让代码更加易于理解和维护。 (async function () {// await 必须放在 async 函数中try {// 加载第一张图片const img1 await loadImg1()// 加载第二张图片co…

xss.haozi.me靶机 通关

0x00 没有任何过滤可以直接注入<img srcx οnerrοralert(1)> 0x01 使用了testarea标签将我们的输入内容以普通的字符串进行展示 但是我们可以将标签进行闭合 </textarea><img srcx οnerrοralert(1)> 0x02 我们依然可以先闭合之后添加属性a" οncl…

Arcgis小技巧【20】——属性表有东西,缩放至图层却看不到?

一、问题分析 这是一个看似正常的要素类数据&#xff0c;打开它的属性表&#xff0c;里面有一行要素&#xff1a; 说明这不是空数据。 回到地图界面&#xff0c;在图层列表中&#xff0c;右键单击&#xff0c;点击【缩放至图层】。 使用过这个功能的应该知道&#xff0c;点击…

数据结构奇妙旅程之二叉平衡树

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

数据结构入门篇 之 【单链表】的实现讲解(附单链表的完整实现代码以及用单链表完成通讯录的实现代码)

虽然封面是顶针&#xff0c;但是我们还是要好好学习❀ 一.单链表 1.单链表的概念 2.单链表的结构 3.单链表的实现 1&#xff09;.尾插函数 SLTPushBack 2&#xff09;.打印函数 SLPrint 3&#xff09;. 头插函数 SLTPushFront 4&#xff09;.尾删函数 SLTPopBack 5&am…

docker容器的数据卷

1配置数据卷 docker run --namen01 -d --restartalways -p 80:80 -v /qy172/data/nginx/html:/usr/share/nginx/html nginx 2Docker应用部署 1搜索mysql镜像 docker search mysql 2拉取mysql镜像 docker pull mysql:5.6 3创建容器&#xff0c; 设置端口映射、目录映射 d…

Pycharm安装,环境初次配置与运行第一个简单程序

一、Pycharm安装 1.在PyCharm官网中&#xff0c;找到社区版下载链接&#xff0c;下载Pycharm社区版&#xff0c;社区版免费 2.下载成功后&#xff0c;双击下载好的安装包&#xff0c;点击下一步后&#xff0c;点击“浏览”更改安装路径到C盘以外其他硬盘&#xff0c;点击“下…

6 种 卷积神经网络压缩方法

文章目录 前言 1、低秩近似 2、剪枝与稀疏约束 3、参数量化 4、二值化网络 &#xff08;1&#xff09;二值网络的梯度下降 &#xff08;2&#xff09;两个问题 &#xff08;3&#xff09;二值连接算法改进 &#xff08;4&#xff09;二值网络设计注意事项 5、知识蒸馏 6、浅层 …

Pulsar 社区周报 | No.2024.03.08 Pulsar-Spark Connector 助力实时计算

关于 Apache Pulsar Apache Pulsar 是 Apache 软件基金会顶级项目&#xff0c;是下一代云原生分布式消息流平台&#xff0c;集消息、存储、轻量化函数式计算为一体&#xff0c;采用计算与存储分离架构设计&#xff0c;支持多租户、持久化存储、多机房跨区域数据复制&#xff0c…

SpringCloudGateway理论与实践

文章目录 网关介绍为什么需要网关Gateway 使用gateway pom依赖yml 配置重启测试总结 断言过滤器工厂路由过滤器的种类请求头过滤器默认过滤器全局过滤器总结 Gateway解决跨域 网关介绍 Spring Cloud Gateway 是一个基于Spring Framework 5&#xff0c;由Spring Cloud团队开发的…

定制repo(不再切换python和google源)

文章目录 定制repo&#xff08;不再切换python和google源&#xff09;前言各用各的repo定制repo2/repo3源码自动识别repo2/repo3项目完整解决方案&#xff1a; 定制repo&#xff08;不再切换python和google源&#xff09; 众知&#xff0c;Android/AOSP/ROM系统开发&#xff0c…

垃圾回收:JavaScript内存管理的利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…