【入门音视频】音视频基础知识

news/2025/2/25 7:46:52

🌈前言🌈

        这个系列在我学习过程中,对音视频知识归纳总结的笔记。因为音视频相关讲解非常稀少,所以我希望通过这个音视频系列,跟大家一起学习音视频,希望减少初学者在学习上的压力。同时希望也欢迎指出文章的不足。

        本期内容主要讲解音视频基础知识,包含了音视频是如何保存成文件,以及如何通过文件播放的,通过这个流程讲解音视频编解码,封装解封装相关的协议

📁 音视频录制和播放原理

        上图是音视频录制和播放整体的流程,通过这个流程,我们对音视频的格式和协议进行整体的了解。

📁 视频

        一个连续播放的视频文件就是有一串连续的,前后存在相关关系的图像构成的,通过图像中的内存和它们之间的相互关闭表达整个视频文件所包含的消息。

 📂 图像

        一般是指静态图像。图像是指一种在二维平面上通过排列像素(pix)来表达信息的数据组织格式。

1. 位深(度)

        色位深度可以简单理解为表示一个像素的二进制位数,决定了每个像素可以呈现的颜色数量。位深度越高,表示的颜色种类就越多。常用的位深度有 8bit 或 10bit两种。

        ● 8 bit:即用8bit / 1 Byte 表示一个像素值,取值范围是 [0,255]。

        ● 10 bit:用10个bit表示一个像素值,取值范围是[0,1023]。

        上面场景只是单个颜色分量,即灰度图像;如果是彩色图像,每个像素可能包含多个颜色分量(通道)。例如RGB格式的彩色图像,一个完整的图像被分割成蓝绿红三个基色的单色图。

        每个通道位深是8 bit,则RGB格式图像中每个像素需要24 bit (8 bit * 3)表示。

确定颜色位深后,根据图像的宽高尺寸确定图像数据体积。        

        例如1920px * 1080px的RGB图像,位深是8 bit,则数据体积 = 192 * 1080 * 3 约等于 6.22MB左右。

2. 颜色空间

        彩色图像在实际应用场景下发挥了广泛作用,如图像显示和处理等,针对不同的场景,对图像色彩的表达方式有不同的要求。针对不同场景有不同的颜色数据表达方式,即颜色空间。

        颜色空间是一种利用整数区间来表示颜色的模型,其维度可以分为一维,二维,三维等。三维空阿金应用最为广泛,常见的三维颜色空间有RGB格式,YUV格式。本文重点讲解YUV格式。

        YUV格式是一种用于表示图像或视频颜色的色彩空间,它将颜色分为三个分量:亮度(Y)和两个色度(U和V)。这种格式广泛应用于视频压缩和视频传输,因为它与人眼对亮度和色彩的感知特性更为契合。

        y:明度;u:蓝色色度与亮度的差;v:红色色度与亮度的差,图像的每个像素点由yuv三个值来确定。

3. 压缩算法

        无算压缩方法:压缩率比较低,压缩后体积较大,没有信息损失,可通过压缩信息完全恢复原始信息。

        有损压缩方法:压缩率较高,压缩后体积较小,存在信息缺失,压缩后只能近似逼近原始信息,无法完全还原原始信息。

 📂 YUV格式

        组成视频的基本单元图像称为帧,本质与普通静态图没有任何区别。视频中每秒内容所包含的视频帧的数量称为帧率,单位是fps(frame per seoncd)。在各帧图像质量相近的情况下,帧率越高的视频播放越流畅,但是体积,码率也会更高。

        在视频压缩编码中,图像颜色空间通常使用YUV颜色空间。

        YUV采样格式的有:4:4:4、4:2:2、4:2:0。

1. 4:4:4        

        每个亮度像素Y对应一个色度像素U和V,色度分量图的尺寸与亮度分量图的相同。

2. 4:2:2

        每两个亮度像素Y对应一个色度像素U和V,色度分量图的尺寸为亮度分量图的1/2。

3. 4:2:0

        每四个亮度像素Y对应一个色度像素U和V,色度分量图的尺寸为亮度分量图的1/4。

YUV排列格式

1. packet:打包格式,先存储一个yuv,在存储下一个yuv。

2. planar:平面格式,先存储y平面,再存储u平面,在存储v平面。

3. semi-planar:先存储y平面,在存储uv平面。

📂 H.264协议

        应用较为广范的视频编码格式。通过之前我们了解如何计算图像大小,视频就是有一连串的图像组成的,因此如果不对视频进行压缩,那么视频文件就会很大,因此需要对音视频进行编解码。

📂 IBP帧  

I帧(帧内编码图像帧):表示关键帧,不需要其他的画面而生成,解码靠自己就能重构完整的图像。

P帧(前向预测编码图像帧):表示跟前一个关键帧或P帧的差别,P帧是参考帧,利用与前一帧不同点压缩本帧数据,利用空间和时间上的相关性。

B帧(双向预测编码图像帧):本帧与前后帧(I帧、P帧)的差别,B帧压缩率更高,但解码耗费CPU。

GOP(图像序列):两个I帧之间一个图像序列,一个GOP中包含一个I帧。

📂 解码时间戳和显示时间戳

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

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

音视频同步方式:

        Audio Master:同步视频到音频。

        Video Master:同步音频到视频。

        External Clock Master:同步音频和视频到外部时钟。

📂 视频主要概念补充

视频码率:kb/s,是指视频文件在单位时间内使用的数据流量,也叫码流率。码率越大,说明单位时间内取样率越大,数据流精度就越高。

视频帧率:fps,通常说一个视频的25帧,指的就是这个视频帧率,即1秒中会显示25帧。帧率越高,给人的视觉就越流畅。

视频分辨率:分辨率就是我们常说的640x480分辨率、1920x1080分辨率,分辨率影响视频图像的大小。

📁 音频

        在音频中,有两个概念比较重要,一个是采集到的原始音频数据PCM,和压缩后的音频数据AAC。

 📂 PCM格式

        为了将模拟信号(声音)数字化,需要进行 采样,量化,编码三个过程。

        根据Nyguist采样定律,要从采样中完全恢复原始信号波形,采样频率必须至少是信号中最高频率的两倍。 前面提到人耳能听到的频率范围是[20H~20kHz],所以采样频率一般为44.1Khz,这样就能保证声音到达20Khz也能被数字化,从而使得经过数字化处理之后,人耳听到的声音质量不会被降低。

        采样是在离散的时间点上进行的,采样值本身在计算机中也是离散的;采样值的精度取决于它的的多少位表示,即量化。

 📂 AAC协议

        高级音频编码,是一种声音数据的文件压缩格式,分为ADIF和ADTS两种文件格式。

        ADIF:高级数据交换格式,特征是可以确定找到的这个音频的开始,不需要进行音频数据流中间开始的解码,即解码必须在明确定义的开始处进行,常用在磁盘文件中。

        ADTS: 音频数据传输流,特征是有一个同步字的比特流,解码可以再流的任何位置开始。流媒体更常使用的。

 📂 音频主要概念补充

采样频率:每秒钟采样点的个数,常用的采样频率有:

        22000(22kHz): 无线广播。 44100(44.1kHz):CD音质。 48000(48kHz): 数字电视,DVD。 96000(96kHz): 蓝光,高清DVD。 192000(192kHz): 蓝光,高清DVD。

采样精度(采样位深):每个样本点的大小,常用大小为 8bit,24bit。

通道数:单声道,双声道,四声道,5.1声道。

比特率:每秒传输的bit数,单位为:bps(Bit Per Second) 间接衡量声音质量的一个标准。

码率: 压缩后的音频数据的比特率。码率越大,压缩效率越低,音质越好,压缩后数据越大。 码率 = 音频文件大小/时长。

:每次编码的采样单元数,比如MP3通常是1152个采样点作为一个编码单元,AAC通常是1024个采样点作为一个编码单元。

交错模式:数字音频信号存储的方式。数据以连续帧的方式存放,即首先记录帧1的左声道样本和右声道样本,再开始帧2的记录...

非交错模式:首先记录的是一个周期内所有帧的左声道样本,在记录所有右声道的样本。

📁 封装格式

        就是将已经编码压缩好的视频流、音频流及字幕按照一定的方案放到一个文件中,便于播放软件播放。

        H264+AAC封装为FLV或MP4是最为流行的模式。

📁 总结

        以上,就是本期内容,主要讲解了视频图像的YUV格式和H264编码,以及音频的PCM格式和AAC编码。

        如果感觉本期内容对你有帮助,欢迎点赞,关注,收藏Thanks♪(・ω・)ノ


http://www.niftyadmin.cn/n/5865198.html

相关文章

【C++11】 并发⽀持库

🌈 个人主页:Zfox_ 🔥 系列专栏:C从入门到精通 目录 前言:🚀 并发⽀持库一:🔥 thread库 二:🔥 this_thread 三:🔥 mutex 四&#xff1…

【Gin-Web】Bluebell社区项目梳理6:限流策略-漏桶与令牌桶

本文目录 一、限流二、漏桶三、令牌桶算法四、Gin框架中实现令牌桶限流 一、限流 限流又称为流量控制,也就是流控,通常是指限制到达系统的并发请求数。 限流虽然会影响部分用户的使用体验,但是能一定程度上保证系统的稳定性,不至…

从零开始用react + tailwindcs + express + mongodb实现一个聊天程序(二)

1.安装mogondb数据库 参考MongoDB安装配置教程(详细版)_mongodb安装详细步骤-CSDN博客 安装mondbcompass数据库连接工具 参考https://www.mongodb.com/zh-cn/docs/compass/current/connect/ 2.后端服务 1.创建src文件夹 并在src文件夹下创建 index…

DIP的实际举例

SOLID原则。 依赖倒置原则(DIP)的核心是高层模块不应该依赖于低层模块,二者都应该依赖于抽象(接口或抽象类) 例如,随着业务的发展,订单总金额的计算规则可能需要根据不同的客户类型或促销活动…

毕业离校管理系统的开发与需求分析

在当今信息化的时代背景下,高校的毕业生离校管理工作也逐渐向数字化转型。为了提高工作效率,减少人为错误,增强信息透明度,毕业离校管理系统应运而生。该系统旨在为学校提供一个高效、准确的毕业生离校管理平台,从而提…

python类型转换深浅拷贝

1.类型转换 1.1 int(x):转化为一个整数&#xff0c;只能转换由纯数字组成的字符串 float->int 浮点型强转整形会去掉小数点后面的数&#xff0c;只保留整数部分 a 1.2 print(type(a)) #<class float> b int(a) print(type(b)) #<class int>print(int…

flutter项目构建常见问题

最近在研究一个验证码转发的app&#xff0c;原理是尝试读取手机中对应应用的验证码进行自动转发。本次尝试用flutter开发&#xff0c;因为之前没有flutter开发的经验&#xff0c;遇到了诸多环境方面的问题&#xff0c;汇总一些常见的问题如下。希望帮助到入门的flutter开发者&a…

【cv】vs2022配置opencv

release下配置包含目录和库目录 E:\sdk\sdk_cuda12.3\opencv490\include E:\sdk\sdk_cuda12.3\opencv490\include\opencv2 E:\sdk\sdk_cuda12.3\opencv490\lib release下配置包含链接器输入的依附依赖项 opencv_world490.lib release编译文件夹下需手动复制opencv_world49…