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

news2025/1/11 0:12:20
  • 第一章 视频编解码技术介绍 - 基本概念篇

文章目录

  • 前言
  • 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编码格式为什么不普及?

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

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

相关文章

二叉搜索树(BST)的创建及增,删,查,改(详解)

目录 初识二叉搜索树(BST): 二叉搜索树查找元素: 二叉搜索树修改元素: 二叉搜索树中的增加元素: 二叉搜索树中的删除元素: 初识二叉搜索树(BST): 一张图简要概括二…

关于阿里云服务器地域的选择方法,看这一篇就够了

阿里云服务器地域和可用区怎么选择?地域是指云服务器所在物理数据中心的位置,地域选择就近选择,访客距离地域所在城市越近网络延迟越低,速度就越快;可用区是指同一个地域下,网络和电力相互独立的区域&#…

NTP协议介绍

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系! 网络时间协议NTP(Network Time Protocol)是TCP/IP协议族里面的一个应用层协议,用来使客户端和服务器之间进行时…

去电脑维修店修电脑需要注意什么呢?装机之家晓龙

每当电脑出现故障时,你无疑会感到非常沮丧。 如果计算机已过了保修期,您将无法享受制造商的免费保修服务。 这意味着您必须自费找到一家电脑维修店。 去电脑维修店并不容易。 大家一定要知道,电脑维修非常困难,尤其是笔记本电脑维…

【深度学习笔记】稠密连接网络(DenseNet)

注:本文为《动手学深度学习》开源内容,部分标注了个人理解,仅为个人学习记录,无抄袭搬运意图 5.12 稠密连接网络(DenseNet) ResNet中的跨层连接设计引申出了数个后续工作。本节我们介绍其中的一个&#xf…

WiFi模块助力少儿编程:创新学习与实践体验

随着科技的飞速发展,少儿编程已经成为培养孩子们创造力和问题解决能力的重要途径之一。在这个过程中,WiFi模块的应用为少儿编程领域注入了新的活力,使得学习编程不再是单一的代码教学,而是一个充满创新与实践的综合性体验。 物联网…

E4991A 射频阻抗/材料分析仪

新利通 E4991A 射频阻抗/材料分析仪 —— 1 MHz到 3 GHz —— 简述 E4991A 射频阻抗/材料分析提供极限阻抗测量性能和功能强大的内置分析功能。它将为元器件和电路设计人员测量 3 GHz 以内的元器件提供创新功能,帮助他们进行研发工作。与反射测量技术不同&#x…

Java对接腾讯云直播示例

首先是官网的文档地址 云直播 新手指南 可以发现它这个主要是按流量和功能收费的 价格总览 流量这里还只收下行的费用,就是只收观看消耗的流量费 其它的收费就是一些增值业务费 (包括直播转码、直播录制、直播截图、直播审核、智能鉴黄、实时监播、移动直…

软件测试面试200问(附100W字文档)

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 软件测试面试题:项目 1、简单介绍下最近做过的项目…

centos7 python3.12.1 报错 No module named _ssl

https://blog.csdn.net/Amio_/article/details/126716818 安装python cd /usr/local/src wget https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tgz tar -zxvf Python-3.12.1.tgz cd Python-3.12.1/ ./configure -C --enable-shared --with-openssl/usr/local/opens…

问题解决 | vscode无法连接服务器而ssh和sftp可以

解决步骤 进入家目录删除.vscode-server rm -rf .vscode-server 然后再次用vscode连接服务器时,会重新安装,这时可能报出一些缺少依赖的错 需要联系管理员安装相关依赖,比如 sudo apt-get install libstdc6 至此问题解决

Vulnhub内网渗透Jangow01靶场通关

详细请见个人博客 靶场下载地址。 下载下来后是 .vmdk 格式,vm直接导入。 M1请使用UTM进行搭建,教程见此。该靶场可能出现网络问题,解决方案见此 信息搜集 arp-scan -l # 主机发现ip为 192.168.168.15 nmap -sV -A -p- 192.168.168.15 # 端…

多功能线缆光纤验证器-AEM CV-100

TestPro CV100 多功能电缆验证器 屡获殊荣的 TestPro CV100 多功能电缆验证器专为当今的现代智能建筑网络基础设施而设计。 它提供了当今可用的功能最丰富的测试平台,以及允许定制所需的确切测试套件的基于模块化的平台。 智能建筑测试套件(K60 和 K61…

BUUCTF-Misc3

LSB1 1.打开附件 得到一张图片,像是某个大学的校徽 2.Stegsolve工具 根据标题LSB,可能是LSB隐写 放到Stegsolve中,点Analyse在点Data Extract 数据提取 因为是LSB隐写,发现含以.png结尾的图片 3.保存图片 4.得到flag 扫描二维…

蓝桥杯-最长递增

思路及代码详解:(此题为容易题) #include <iostream> using namespace std; int main() {int a[1000]{0};int n,temp;int num0;int count0;cin>>n;for(int i0;i<n;i){cin>>a[i];}//输入数据tempa[0];//设置一个临时比较的存储变量for(int i1;i<n;i){i…

性别和年龄的视频实时监测项目

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 性别和年龄检测 Python 项目 首先介绍性别和年龄检测的高级Python项目中使用的专业术语 什么是计算机视觉&#xff1f; 计算机视觉是使计算机能…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:DataPanel)

数据面板组件&#xff0c;用于将多个数据占比情况使用占比图进行展示。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 DataPanel(options: DataPanelOptions) 从API version …

MySQL基础-----约束

目录 前言 一、概述 二、约束演示 三、外键约束 1.介绍 2.语法 四、删除/更新行为 1.CASCADE 2.SET NULL 前言 本期我们开始MySQL约束的学习&#xff0c;约束一般是只数据键对本条数据的约束&#xff0c;通过约束我们可以保证数据库中数据的正确、有效性和完整性。 下面…

仿牛客项目Day1

SpringMVC 架构 spring的前端控制器是DispatcherServlet 模板引擎Thymeleaf 这个还不知道干嘛的 mvc演示 get请求 RequestMapping&#xff1a;声明访问路径和http方法get或set什么的 ResponseBody&#xff1a;java对象转为json格式的数据&#xff0c;表示该方法的返回结…

原创+顶级SCI优化!23年新算法PSA优化CNN-LSTM-Attention一键实现多变量回归预测!

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 效果展示 数据介绍 创新点 模型流程 部…