音视频之旅 - 基础知识

图像基础知识

像素

像素是图像的基本单元,一个个像素就组成了图像。你可以认为像素就是图像中的一个点。在下面这张图中,你可以看到一个个方块,这些方块就是像素

分辨率

图像(或视频)的分辨率是指图像的大小或尺寸。我们一般用像素个数来表示图像的尺寸。比如说一张1920x1080的图像,前者1920指的是该图像的宽度方向上有1920个像素点,而后者1080指的是图像的高 度方向上有1080个像素点。

Stride

Stride也可以称之为跨距,指的是图像存储时内存中每行像素所占用的 空间。跨距为了能够快速读取一行像素,我们一般会对内存中的图像实现内存对齐,比如16字节对齐。

比如有一张RGB图像,分辨率是1278x720。我们将它存储在内存当中,一行像素需要 1278x3 = 3834个字节,3834除以16无法整除。因此,没有16字节对齐。所以如果需要对齐的话,我们需 要在3834个字节后面填充6个字节,也就是3840个字节做16字节对齐,这样这幅图像的Stride就是3840了。

图像显示格式

RGB

我们看到的彩色图像中,都有三个通道,这三个通道就是R、G、B通道,(有的时候还会有Alpha值,代表透明度) 通常R、G、B各占8个位,我们称这种图像是8bit图像。

YUV

对于图像显示器来说,它是通过RGB模型来显示图像的。而在传输图像数据时是使用YUV模型的,因为YUV模型可以节省带宽。所以就需要采集图像时将RGB模型转换到YUV模型,显示时再将YUV模型转换为RGB模型。

1. YUV解决了彩色电视机与黑白电视的兼容问题,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的。

2. YUV更方便对视频信号进行压缩,占用的带宽更低。符合人眼的视觉特性,人眼对亮度的敏感度要大于红蓝,所以我们可以保留Y原始值的基础上,降低U和V的值,而不影响观看,从而更加有效的存储图像数据。

3. YUV不像RGB那样要求三个独立的的视频信号同时传输,所以YUV方式传送占用极少的频宽。

YUV 颜色编码采用的是 明亮度 和 色度 来指定像素的颜色。其中,Y 表示明亮度(Luminance、Luma),而 U 和 V 表示色度(Chrominance、Chroma)。YUV主要分为YUV 4:4:4,YUV 4:2:2,YUV 4:2:0几种常用类型。

YUV 4:4:4采样

意味着Y、U、V三个分量的采样比例相同,所以在生成的图像里,每个像素的三个分量信息都是8bit,所以相比RGB颜色模型的图片大小一样。

YUV 4:2:2采样

UV分量是Y分量的一半,Y分量和UV分量按照2:1的比例采样,如果水平方向有10个像素点,那么采样了10个Y分量,就只采样了5个UV分量,第一个像素和第二个像素共用一个UV ,相较RGB可以节省1/3 的空间,更利于图像传输。

YUV 4:2:0采样

YUV 4:2:0 采样,并不是指只采样 U 分量而不采样 V 分量。而是指,在每一行扫描时,只扫描一种色度分量(U 或者 V),和 Y 分量按照 2 : 1 的方式采样。比如,第一行扫描时,YU 按照 2 : 1 的方式采样,那么第二行扫描时,YV 分量按照 2:1 的方式采样。对于每个色度分量来说,它的水平方向和竖直方向的采样和 Y 分量相比都是 2:1 。 相较RGB 可以节省1/2的存储空间,也是当下主流的采样方式 (Android Camera 预览流返回格式)。

音频基础知识

由物理学可知,复杂的声波由许多具有不同振幅和频率的正弦波组成。代表声音的模拟信息是个连续的量,不能由计算机直接处理,必须将其数字化。数字声音信息才能够像文字和图形信息一样进行存储、检索、编辑和其它处理。

采样:以适当的时间间隔观测模拟信号波形不连续的样本值替换原来的连续信号波形的操作,又称为取样 。为了复原波形,一次振动中,必须有2个点的采样,人耳能够感觉到的最高频率为20kHz,因此要满足人耳的听觉要求,则需要至少每秒进行40k次采样

量化:数字音频中,把表示声音强弱的模拟电压用数字表示。模拟电压的幅度,即使在某电平范围内,仍然可以有无穷多个,如1.2V,1.21V,1.215V…。而用数字来表示音频幅度时,只能把无穷多个电压幅度用有限个数字表示。即把某一幅度范围内的电压用一个数字表示,这称之为量化。

编码: 将量化后的数据转为二进制

视频基础知识

下图可以很清晰的说明决定视频画质的几个要素

分辨率

视频分辨率又可称为视频解析度、解像度,指的是视频图像在一个单位尺寸内的精密度。

帧率

在视频中,一个帧(Frame)就是指一幅静止的画面。帧率,就是指视频每秒钟包括的画面数量(FPS,Frame per second)。

码率

编码器每秒编出的数据大小,单位是kbps,比如上图的3000kbps代表编码器每秒产生 375kb 的数据

编码

编码的终极目的,就是为了压缩。各种视频编码方式,都是为了让视频变得体积更小,有利于存储和传输。

要实现压缩,就要设计各种算法,将视频数据中的冗余信息去除。

如果一幅图,全是红色的,我有没有必要说2073600次[255,0,0] ,还是我只要说一次[255,0,0],然后再说2073599次“同上”?

如果一段视频,大部分画面是不动的,或者,有80%的图像面积,整个过程都是不变的。那么,是不是这块存储开销,就可以节约掉了?

基本原理:

空间冗余:图像相邻像素之间有较强的相关性;

时间冗余:视频序列的相邻图像之间内容相似;

编码冗余:不同像素值出现的概率不同;

视觉冗余:人的视觉系统对某些细节不敏感;

知识冗余:规律性的结构可由先验知识和背景知识得到。

宏块

每一帧图像,又是划分成一个个块来进行编码的,这一个个块在H264中叫做宏块,而在VP9、AV1 中称之为超级块,其实概念是一样的。宏块大小一般是16x16 (H264、VP8) , 32x32 (H265、VP9), 64x64 (H265、VP9、AV1) , 128x128 (AV1)这几种。这里提到的H264、H265、VP8、VP9和AV1都是市面上常见的编码标准。

帧类型

帧间预测需要参考已经编码的帧,帧间编码帧可以分为只参考前面帧的前向编码帧和前后都可以参考的双向编码帧。

I帧:是自带全部信息的独立帧,是最完整的画面(占用的空间最大),无需参考其它图像便可独立进行解码。视频序列中的第一个帧,始终都是I帧。

P帧:“帧间预测编码帧”,需要参考前面的I帧和/或P帧的不同部分,才进行编码。P帧对前面的P和I参考帧有依赖性。

B帧:“双向预测编码帧”,以前帧后帧作为参考帧。不仅参考前面,还参考后面的帧,所以,它的压缩率最高,可以达到200:1。

如图,箭头是从参考帧指向编码帧

GOP(序列)和IDR

在H264中图像以序列为单位进行组织,一个序列是一段图像编码后的数据流。

一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I 帧图像。H.264 引入 IDR 图像是为了解码的重同步,当解码器解码到 IDR 图像时,立即将参考帧队列清空,将已解码的数据输出或抛弃,重新查找参数集,开始一个新的序列。如果前一个序列出现重大错误,在这里可以获得重新同步的机会。IDR图像之后的图像永远不会使用IDR之前的图像的数据来解码。

一个序列就是一段内容差异不大的图像编码后生成的一串数据流。当运动变化比较少时,一个序列可以很长,所可以编一个I帧,然后一直P帧、B帧了。当运动变化多时,可能一个序列就比较短了,比如就包含一个I帧和1、2个P帧。

在视频编码序列中,GOP即Group of picture(图像组),指两个I帧之间的距离,Reference(参考周期)指两个P帧之间的距离。两个I帧之间形成一组图片,就是GOP(Group Of Picture)。

PTS和DTS

如果IBP数据流并非有序返回,存在先到的B、P帧等I帧的情况,就需要引入 PTS和DTS概念

DTS(Decoding Time Stamp):即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。

PTS(Presentation Time Stamp):即显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。

假设编码器采集到的帧是这个样子的:I B B P B B P   1 2 3 4 5 6 7

假设 编码器的编码顺序是:  I P B B P B B     1 4 2 3 7 5 6

接收端 根据PTS 显示对应的数据

参考链接

https://blog.csdn.net/u012124438/article/details/123385424

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

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

相关文章

家庭医生上门预约小程序源码系统 附带完整的搭建教程

在当前的医疗服务市场中,患者往往需要前往医院或诊所进行就诊,这不仅浪费了时间和精力,还可能增加交叉感染的风险。因此,开发一款家庭医生上门预约小程序源码系统,可以让患者在家中方便快捷地预约医生上门服务&#xf…

让我们向您介绍葡萄酒中的皮诺家族

对于那些喜欢浏览商店里的葡萄酒通道或餐厅的葡萄酒菜单的人来说,你可能也注意到了类似名称的葡萄酒,即灰皮诺和黑皮诺葡萄酒。这葡萄酒有什么区别?他们有任何相似之处吗?今天,我们将一探究竟!让我们了解一…

Python设计模式之创建型-单例模式(Singleton)

目录 作用 适用场景 使用模块 使用装饰器 使用元类 __new__方法单例模式 总结 更多关于Python的相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。 注意:本代码示例环境Python版本使用最新的Python3…

网络安全缓冲区溢出实验

实验要求实验步骤函数 f00()函数 f01()函数 f02() 实验要求 C 程序 homework08.c 的主函数如下: int main(int argc, char * argv[]) { init_buf(Lbuffer, LEN);switch(argc) {case 1: f00(); break;case 2: f01(); break;case 3: f02(); break; default: f00(); …

STM32F407-14.3.13-01发生外部事件时清除 OCxREF 信号

发生外部事件时清除 OCxREF 信号 对于给定通道,在 ETRF⑧ 输入施加高电平(相应 TIMx_CCMRx 寄存器中的 OCxCE⑦ 使能位置“1”),可使 OCxREF⑨ 信号变为低电平。OCxREF⑨ 信号将保持低电平,直到发生下一更新事件 (UEV)…

LT8668SXC HDMI转edp1.4/VBO 最高支持8k60hz

HDMI2.1 Receiver ▪ Compliant with HDMI2.1, HDMI2.0b, HDMI1.4 and DVI1.0 ▪ Data rate up to 8Gbps ▪ Support HDCP 1.4/2.3 ▪ Support HDCP repeater ▪ Support RGB 8/10/12 bpc, YCbCr4:4:4/ YCbCr4:2:2/ YCbCr4:2:0 /8/10/12 bpc ▪ Support up to 8K3…

【电路笔记】-电位差

电位差 文章目录 电位差1、概述2、电位差示例13、分压网络4、电位差示例2 电路中任意两点之间的电压差称为电位差,正是这种电位差使电流流动。 1、概述 与以电荷形式围绕闭合电路流动的电流不同,施加的电势差不会移动或流动。 两点之间产生的电势差的单…

生成测试数据的4种方法、5种工具介绍

在软件测试中,测试数据是测试用例的基础,对测试结果的准确性和全面性有着至关重要的影响。 因此,在进行软件测试时,需要生成测试数据以满足测试场景和要求。本文将介绍什么情况下需要生成测试数据,如何生成测试数据&a…

MOS管加三个元件就组成BUCK电路,为何说难点在于电感?

只要是电子产品就需要供电,就离不开电源,那什么是电源:小到手表中的电子,遥控器的电源,大到220V家庭用电,都可以看做是电源。然而在我们的电路设计中,会用到各种芯片,各种芯片所需要…

【算法问题】N 皇后问题

目录 1.问题定义2.思路分析2.1.基于数组的回溯2.2.基于集合的回溯2.3.基于位运算的回溯 3.代码实现 (Java)3.1.基于数组的回溯3.2.基于数组的回溯3.3.基于位运算的回溯 4.扩展 参考:52.N 皇后 II 1.问题定义 (1)在国际象棋的规则中&#xff…

操作教程|JumpServer搭载RD Client App,让你的移动办公更轻松

随着信息技术的普及和发展,移动办公逐渐成为新的时代趋势。移动办公又被称为3A办公,即办公人员可在任何时间(Anytime)、任何地点 (Anywhere)处理与业务相关的任何事情(Anything)。 …

2024年软件测试面试八股文

前言 (第一个就刷掉一大批人) 有很多“会自动化”的同学来咨询技术问题,他总会问到我一些元素定位的问题。元素定位其实都不算自动化面试的问题。 一般我都会问:你是定位不到吗?通常结果都是说确实定位不到。 做自…

本地启动tomcat,打印的日志中中文乱码

修改配置文件 /conf/logging.properties 修改配置项 java.util.logging.ConsoleHandler.encoding 从UTF-8改成GBK

solidity案例详解(六)服务评价合约

有服务提供商和用户两类实体,其中服务提供商部署合约,默认诚信为true,用户负责使用智能合约接受服务及评价,服务提供商的评价信息存储在一个映射中,可以根据服务提 供商的地址来查找评价信息。用户评价信息&#xff0c…

今天刷basic

一 在kali里边链接这个服务器 ssh -p 25199 rootnode4.buuoj.cn 然后回车 yes 输入密码123456 ls查看发现什么都没有,cd ..返回上一级目录 ls 发现有flag.txt 查看文件得到flag flag{477f20d3-acd3-46e1-b50a-633e58b769c7}

【Vue3从入门到项目实现】RuoYi-Vue3若依框架前端学习——登录页面

若依官方的前后端分离版中,前端用的Vue2,这个有人改了Vue3的前端出来。刚好用来学习: https://gitee.com/weifengze/RuoYi-Vue3 运行前后端项目 首先运行项目 启动前端,npm install、npm run dev 启动后端,按教程配置…

35亿元!开源类ChatGPT平台Mistral AI,再获巨额融资

12月6日,彭博消息,开源类ChatGPT平台Mistral AI获得4.5亿欧元(近35亿元)融资,估值近20亿美元(142亿元)。本次由英伟达、 Salesforce等投资。 Mistral AI的开源大语言模型Mistral 7B主打参数小、…

Apache Doris 详细教程(一)

1、Doris简介 1.1、doris概述 Apache Doris 由百度大数据部研发(之前叫百度 Palo,2018 年贡献到 Apache 社区后, 更名为 Doris ),在百度内部,有超过 200 个产品线在使用,部署机器超过 1000 台…

PIKA,一个神奇的AI工具

随着人工智能技术的不断发展,越来越多的创新性工具开始涌现,为各行各业带来了巨大的变革。其中,视频生成AI工具PIKA,以其独特的功能和广泛的应用领域,吸引了众多用户的关注。本文将详细介绍PIKA的功能、特点以及应用前…

学习设计模式的网站

Refactoring and Design Patternshttps://refactoring.guru/