当前位置: 首页 > news >正文

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

🌈前言🌈

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

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

📁 音视频录制和播放原理

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

📁 视频

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

 📂 图像

        一般是指静态图像。图像是指一种在二维平面上通过排列像素(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♪(・ω・)ノ

相关文章:

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

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

游戏引擎学习第120天

仓库:https://gitee.com/mrxiao_com/2d_game_3 上次回顾:周期计数代码 我们正在进行一个项目的代码优化工作,目标是提高性能。当前正在优化某个特定的代码片段,已经将其执行周期减少到48个周期。为了实现这一目标,我们设计了一个…...

【Qt之QQuickWidget】QML嵌入QWidget中

由于我项目开始使用Widgets,换公司后直接使用QML开发,没有了解过如何实现widget到qml过渡,恰逢面试时遇到一家公司希望从widget迁移到qml开发,询问相关实现,一时语塞,很尴尬,粗略研究并总结下。 对qwidget嵌…...

Vue 3 + Vite 项目中配置代理解决开发环境中跨域请求问题

在 Vue 3 Vite 项目中,配置代理是解决开发环境中跨域请求问题的常见方法。通过在 Vite 的配置文件中设置代理,可以将前端请求转发到后端服务器,从而避免浏览器的同源策略限制。 1. 创建 Vue 3 Vite 项目 首先,确保你已经安装了…...

Eureka、ZooKeeper 和 Nacos 之间的对比

Eureka、ZooKeeper 和 Nacos 都是分布式系统中常用的服务注册与发现工具,但它们的定位、功能和适用场景有所不同。作为一名开发者,理解它们之间的对比有助于选择合适的技术栈。以下从多个维度进行详细比较: 1. 基本概述 Eureka 来源&#xff…...

CSS中padding和margin属性的使用

在 HTML 中,padding 和 margin 是用于控制元素布局和间距的重要属性。 一、Padding(内边距) 定义:Padding 是指元素内容与元素边框之间的距离。它可以在元素内部创造出空白区域,使得内容不会紧贴着边框。 作用 增加元…...

【Python爬虫(49)】分布式爬虫:在新兴技术浪潮下的蜕变与展望

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取&#xff…...

网络安全-系统层攻击流程及防御措施

系统层攻击流程涉及多个阶段,攻击者通过逐步渗透以获取控制权或窃取数据。以下是详细的流程及防御措施: 1. 侦察(Reconnaissance) 信息收集: 主动扫描:使用工具如Nmap、Masscan扫描目标IP、开放端口、服务…...

centos 7 安装python3 及pycharm远程连接方法

安装openssl 使用pip3安装 virtualenv的时候会提示WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. 这是因为缺少openssl 2.0以上版本 解决办法: 一、先确认版本 openssl version 二、安…...

【llm对话系统】如何快速开发一个支持openai接口的llm server呢

核心思路:使用轻量级 Web 框架,将 OpenAI API 请求转换为你现有推理脚本的输入格式,并将推理脚本的输出转换为 OpenAI API 的响应格式。 快速开发步骤列表: 选择合适的 Web 框架 (快速 & 简单): FastAPI: Python 最佳选择&am…...

跟着柳叶刀数字健康,学习如何通过病理切片预测分子分类对预后的影响|项目复现

小罗碎碎念 项目复现 今天和大家分享一个非常具有参考价值的项目,手把手带着大家复现一篇发表在柳叶刀数字健康的文章。 花了六个小时才完成的这篇推送,信息量非常大,遇到了很多报错问题,但是解决以后的感觉是非常爽的,先给大家展示一下最终的成果——在同一张切片上,通…...

deepseek_清华大学指导手册_pdf_1-5

deepseek_清华大学指导手册_pdf_1-5 无套路,无需关注,无需登录,无需app,直接下载: 下载地址 文件列表: 001_清华大学_DeepSeek从入门到精通.pdf 002_清华大学_DeepSeek如何赋能职场应用.pdf 003_清华大学…...

数据库(MySQL)二

MySQL 六、MySQL索引视图6.1 索引底层原理6.1.1 索引hash算法6.1.2 索引二叉树算法6.1.3 索引平衡二叉树算法6.1.4 索引BTREE树算法6.1.5 普通SQL全表扫描过程 6.2 索引分类6.2.1 按数据结构层次分类6.2.2 按字段数量层次分类6.2.3 按功能逻辑层次分类(面试题&#…...

第15届 蓝桥杯 C++编程青少组中/高级选拔赛 202401 真题答案及解析

第 1 题 【 单选题 】 表达式117 % 16 的结果是( )。 A:0 B:5 C:7 D:10 解析: % 是取模运算符,用于计算两个数相除后的余数。 计算 117 / 16,结果是 7,余数是 5。因此,117 % 16 = 5。答案: B 第 2 题 【 单选题 】 下列选项中,字符数组定义正确的是( …...

《AI大模型趣味实战》第10集:开发一个基于Mermaid的AI绘图网站

《AI大模型趣味实战》第10集:开发一个基于Mermaid的AI绘图网站 抱歉不按顺序出牌,先出一个第10集,第1到第9集慢慢来,后续也不会按顺序,总之凑满36集,可能或补充12集。 AI大模型趣味实战专栏 所有36个主题预…...

androidstudio 运行项目加载很慢,优化方法

一、Android Studio 运行项目加载缓慢可能由多种原因引起,以下是一些优化建议: 1. 升级硬件配置 内存:建议至少 8GB,16GB 或以上更佳。 SSD:使用 SSD 替代 HDD 以加快读写速度。 CPU:多核处理器有助于提…...

python脚本实现接入企微机器人

企业微信中的群聊机器人在日常办公中无处不在,对提升工作效率、保证消息及时送达提供了重要的技术保障。例如:DevOps助手、JIRA、构建通知等;还常常使用在运维服务器中配合Prometheus监控体系及时发送告警信息等 文章目录 源码示例Demo源码处…...

《论面向对象的建模及应用》审题技巧 - 系统架构设计师

论面向对象的建模及应用写作框架 一、考点概述 本论题“论面向对象的建模及应用”主要考察软件测试工程师对面向对象建模技术的理解和应用能力。具体涵盖以下几个方面: 面向对象建模的基本概念 :这包括理解面向对象编程(OOP)的基…...

【Godot4.3】自定义圆角容器

概述 Godot控件想要完全实现现代UI风格,需要进行大量的自定义组件设计。本篇就依托于笔者自己对现代UI设计中的圆角面板元素模仿来制作圆角容器组件。 圆角容器 圆角元素在现代的扁平UI设计中非常常见,在Godot中可以通过改进PanelContainer来或者自定…...

开源RAG主流框架有哪些?如何选型?

开源RAG主流框架有哪些?如何选型? 一、开源RAG框架全景图 (一)核心框架类型对比 类型典型工具技术特征适用场景传统RAGLangChain, Haystack线性流程(检索→生成)通用问答、知识库检索增强型RAGRAGFlow, AutoRAG支持重排序、多路召回优化高精度问答、复杂文档处理轻量级…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...