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

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

文章目录

  • 前言
  • 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.402VB = Y + 1.772UG = 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.mzph.cn/news/731877.shtml

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

相关文章

CorelDRAW下载2024最新版专业的平面设计软件,专注于矢量图形编辑与排版

CorelDRAW是一款功能强大的矢量图形设计软件,广泛应用于标志设计、插画绘制、排版印刷、VI设计、包装设计、网页制作等众多领域。它提供了丰富的绘图工具和特效,使用户能够轻松地创建和编辑复杂的矢量图形。CorelDRAW还支持导入和导出多种文件格式&#…

RabbitMQ 安装使用

文章目录 RabbitMQ 安装使用安装下载 Erlang下载 RabbitMQ 的服务安装好后看是否有 RabbitMQ 的服务开启管理 UIRabbitMQ 端口使用一览图 使用输出最简单的 Hello World!生产者定义消费者消费消息小拓展 RabbitMQ 安装使用 安装 下载 Erlang RabbitMQ 是用这个语…

【机器学习300问】30、准确率的局限性在哪里?

一、什么是准确率? 在解答这个问题之前,我们首先得先回顾一下准确率的定义,准确率是机器学习分类问题中一个很直观的指标,它告诉我们模型正确预测的比例,即 还是用我最喜欢的方式,举例子来解释一下&#xf…

倒计时35天

dp预备(来源:b站acm刘春英老师) 1. 2. 3. 4. 5. 6. 7.

13:大数据与Hadoop|分布式文件系统|分布式Hadoop集群

大数据与Hadoop|分布式文件系统|分布式Hadoop集群 Hadoop部署Hadoop HDFS分布式文件系统HDFS部署步骤一:环境准备HDFS配置文件 查官方手册配置Hadoop集群 日志与排错 mapreduce 分布式离线计算框架YARN集群资源管理系统步骤一:安装…

spring boot 集成 mysql ,mybatisplus多数据源

1、需要的依赖&#xff0c;版本自行控制 <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId> </dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java<…

初阶数据结构之---二叉树的顺序结构-堆

引言 今天要讲的堆&#xff0c;不是操作系统虚拟进程地址空间中&#xff08;malloc&#xff0c;realloc等开空间的位置&#xff09;的那个堆&#xff0c;而是数据结构中的堆&#xff0c;它们虽然名字相同&#xff0c;却是截然不同的两个概念。堆的底层其实是完全二叉树&#x…

【spark operator】spark operator动态分配executor

背景&#xff1a; 之前在使用spark operator的时候必须指定executor的个数&#xff0c;在将任务发布到spark operator后&#xff0c;k8s会根据指定的个数启动executor&#xff0c;但是对于某些spark sql可能并不需要用到那么多executor&#xff0c;在此时executor的数量就不好…

Python快速入门系列-1

Python快速入门系列 第一章: Python简介1.1 Python的历史与发展1.2 Python的优势与特点1.2.1 易学易用1.2.2 动态类型1.2.3 丰富的标准库与第三方库1.2.4 面向对象与函数式编程1.2.5 广泛应用领域 1.3 Python的应用领域 第一章: Python简介 1.1 Python的历史与发展 Python是一…

sizeof和strlen的详细万字解读

sizeof和strlen的对比 sizeof不是函数 侧面证明sizeof不是函数 如果是函数 应该需要有括号 不能落下来 strlen 只针对字符串 包含头文件 string.h 并且这个是个函数 随机数值 sizeof里面有表达式的话 表达式里面是不参与计算的 下面的s求出的是4 就是因为是不参与计算的 不…

AI绘画StableDiffusion实操教程:冰霜旗袍美女

前几天分享了StableDiffusion的入门到精通教程&#xff1a;AI绘画&#xff1a;Stable Diffusion 终极炼丹宝典&#xff1a;从入门到精通 但是还有人就问&#xff1a;安装是安装好了&#xff0c;可是为什么生成的图片和你生成的图片差距那么远呢&#xff1f; 怎么真实感和质感…

pytorch CV入门3-预训练模型与迁移学习

专栏链接&#xff1a;https://blog.csdn.net/qq_33345365/category_12578430.html 初次编辑&#xff1a;2024/3/7&#xff1b;最后编辑&#xff1a;2024/3/8 参考网站-微软教程&#xff1a;https://learn.microsoft.com/en-us/training/modules/intro-computer-vision-pytorc…

GitHub会员充值

GitHub是一个基于Web的代码托管平台&#xff0c;为开发者提供了协作、版本控制和代码管理的工具。它允许个人和团队共同协作开发软件项目&#xff0c;并提供了许多功能&#xff0c;使得代码的管理和维护更加容易 版本控制系统&#xff1a; GitHub使用Git作为其版本控制系统。Gi…

基于Springboot的高校宣讲会管理系统。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的高校宣讲会管理系统。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring Spri…

基于Java的开放实验室管理系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实验管理模块2.4 实验设备模块2.5 实验订单模块 三、系统设计3.1 用例设计3.2 数据库设计 四、系统展示五、样例代码5.1 查询实验室设备5.2 实验放号5.3 实验预定 六、免责说明 一、摘…

Charles抓包工具使用

Charles简介 Charles是一款基于HTTP协议的代理服务器和HTTP监视器&#xff0c;通过将自己设置为电脑或浏览器的网络访问代理&#xff0c;能够截取请求和请求结果&#xff0c;从而达到分析抓包的目的。它允许开发者查看所有连接互联网的HTTP通信&#xff0c;包括请求、响应和HTT…

人工智能|机器学习——Canopy聚类算法(密度聚类)

1.简介 Canopy聚类算法是一个将对象分组到类的简单、快速、精确地方法。每个对象用多维特征空间里的一个点来表示。这个算法使用一个快速近似距离度量和两个距离阈值T1 > T2 处理。 Canopy聚类很少单独使用&#xff0c; 一般是作为k-means前不知道要指定k为何值的时候&#…

专题一 - 双指针 - leetcode 202. 快乐数 | 简单难度

leetcode 202. 快乐数 leetcode 202. 快乐数 | 简单难度1. 题目详情1. 原题链接2. 基础框架 2. 解题思路1. 题目分析2. 算法原理3. 时间复杂度 3. 代码实现4. 知识与收获 leetcode 202. 快乐数 | 简单难度 1. 题目详情 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」…

简单BFF架构设计

又到周五了有了一个小时的闲暇时间简单写点东西&#xff0c;介绍一个简单的BFF的架构。BFF:Backends For Frontends,其实现在是个比较常见的前端架构设计的方案&#xff0c;其最大的优势便在于前端可以高度自由的在Node层做一些server端才可以做的东西&#xff0c;比如SSR、登录…

SSH安全协议介绍

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; SSH&#xff08;Secure Shell&#xff0c;安全外壳&#xff09;是一种网络安全协议&#xff0c;通过加密和认证机制实现安全的访问和文件传输等业…