音视频之旅 - 基础知识
图像基础知识
像素
像素是图像的基本单元,一个个像素就组成了图像。你可以认为像素就是图像中的一个点。在下面这张图中,你可以看到一个个方块,这些方块就是像素

分辨率
图像(或视频)的分辨率是指图像的大小或尺寸。我们一般用像素个数来表示图像的尺寸。比如说一张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
相关文章:
音视频之旅 - 基础知识
图像基础知识 像素 像素是图像的基本单元,一个个像素就组成了图像。你可以认为像素就是图像中的一个点。在下面这张图中,你可以看到一个个方块,这些方块就是像素 分辨率 图像(或视频)的分辨率是指图像的大小或尺寸。…...
分类预测 | SSA-HKELM-Adaboost麻雀算法优化混合核极限学习机的数据分类预测
分类预测 | SSA-HKELM-Adaboost麻雀算法优化混合核极限学习机的数据分类预测 目录 分类预测 | SSA-HKELM-Adaboost麻雀算法优化混合核极限学习机的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.SSA-HKELM-Adaboost麻雀算法优化混合核极限学习机的数据分类…...
如何使用 Zotero 导出所选条目的 PDF 文件
如何使用 Zotero 导出所选条目的 PDF 文件 Zotero 是一款强大的参考文献管理工具,但它并不直接提供将整个文件夹导出为 PDF 的选项。不过,您可以使用以下步骤来导出您所选的 Zotero 条目中的 PDF 文件,无需额外的插件。 选择所需的 Zotero 条…...
minio的k8s的单机部署
minio的k8s的单机部署 apiVersion: apps/v1 kind: Deployment metadata:name: minionamespace: itshare spec:replicas: 1selector:matchLabels:app: miniotemplate:metadata:labels:app: miniospec:containers:- name: minioimage: minio/minio:RELEASE.2022-10-15T19-57-03Z…...
Git 更改remote repo 地址
Git 更改remote repo 地址 我们想更换远程 repo 地址, 因为我们仓库更换了名称. git remote rename origin 查看现在的 romote 地址 # 查看 remote 地址 git remote -v origin gitgitee.com:changyubiao/attrdict.git (fetch) origin gitgitee.com:changyubiao/attrdict.gi…...
24、文件上传漏洞——Apache文件解析漏洞
文章目录 一、环境简介一、Apache与php三种结合方法二、Apache解析文件的方法三、Apache解析php的方法四、漏洞原理五、修复方法 一、环境简介 Apache文件解析漏洞与用户配置有密切关系。严格来说,属于用户配置问题,这里使用ubantu的docker来复现漏洞&am…...
使用Go快速开发TCP公共服务
使用Go快速开发TCP公共服务 文章目录 使用Go快速开发TCP公共服务一、前言二、实现思路三、源码四、测试使用五、最后 一、前言 之前使用的公共TCP服务无法使用了,想了一下整个实现原理不是很复杂,就利用Go快速开发了一个,利用公网服务器可以…...
QEMU环境调试方法
目录 1.如何查看makefile构建过程执行的命令? 2.如何使用GCC生成C程序的宏展开文件? 3.如何在qemu中执行特定的可执行程序? 4.如何在qemu中直接运行可执行程序? 5.如何在qemu中调试某个可执行程序? 本文从调试的角…...
京东数据运营(京东API接口):10月投影仪店铺数据分析
鲸参谋监测的京东平台10月份投影仪市场销售数据已出炉! 10月份,环同比来看,投影仪市场销售均上涨。鲸参谋数据显示,今年10月,京东平台投影仪的销量为16万,环比增长约22%,同比增长约8%࿱…...
Aloha 机械臂的学习记录2——AWE:AWE + ACT
继续下一个阶段: Train policy python act/imitate_episodes.py \ --task_name [TASK] \ --ckpt_dir data/outputs/act_ckpt/[TASK]_waypoint \ --policy_class ACT --kl_weight 10 --chunk_size 50 --hidden_dim 512 --batch_size 8 --dim_feedforward 3200 \ --n…...
Spring Boot 项目的创建、配置文件、日志
文章目录 Spring Boot 优点创建 Spring Boot 项目创建项目认识目录网页创建(了解) 约定大于配置Spring Boot 配置文件配置文件格式读取配置项properties 配置文件yml 配置文件基本语法进阶语法配置对象配置集合yml 设置不同环境的配置文件 Spring Boot 日…...
MySQL:drop、delete与truncate区别
一、用法不同 1、drop(丢弃数据): drop table 表名 ,直接将表都删除掉,在删除表的时候使用。 2、truncate (清空数据) : truncate table 表名 ,只删除表中的数据,再插入数据的时候自增长 id 又从 1 开始,在清空表中数…...
2024年顶级的9个 Android 数据恢复工具(免费和付费)
不同的事情可能会损坏您的Android手机并导致您丢失数据。但大多数时候,您可以使用取证工具恢复部分或全部文件。 问题可能来自手机的物理损坏、磁盘的逻辑故障、完整的系统擦除,或者只是简单的粗心大意。 但是,无论数据丢失的原因是什么&am…...
c# Aspose.Cells 导出Excel表格 使用随记
/// <summary>/// 导出Excel表格/// </summary>/// <param name"list">数据集合</param>/// <param name"header">数据表头</param>/// <param name"sumColumn">求和列</param>/// <param n…...
SAP UI5 walkthrough step3 Controls
在上一步,我们是直接用index.html 中的body 里面的DIVision去输出 hello world, 在这个章节,我们将用SAP UI5 的标准控件 sap/m/Text 首先,我们去修改 webapp/index.html <!DOCTYPE html> <html> <head><…...
【分布式微服务专题】从单体到分布式(一、SpringCloud项目初步升级)
目录 前言阅读对象阅读导航前置知识笔记正文一、单体服务介绍二、服务拆分三、分布式微服务升级前的思考3.1 关于SpringBoot/SpringCloud的思考【有点门槛】 四、SpringCloud升级整合4.1 新建父子项目 学习总结感谢 前言 从本节课开始,我将自己手写一个基于SpringC…...
python安装与工具PyCharm
摘要: 周末闲来无事学习一下python!不是你菜鸡,只不过是对手太强了!所以你要不断努力,去追求更高的未来!下面先了解python与环境的安装与工具的配置! python安装: 官网 进入官网下载…...
Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像高速保存到电脑内存(C#)
Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像高速保存到电脑内存(C#) Baumer工业相机Baumer工业相机图像保存到电脑内存的技术背景代码分析注册SDK回调函数BufferEvent声明可以存储相机图像的内存序列和名称在图像回调函数中将图像保存在内存序…...
iOS 防截屏方法(一)
利用UITextField的安全输入secureTextEntry来实现防截屏效果,上代码: // 将 textField 添加到父视图UITextField *textField [[UITextField alloc] init];textField.backgroundColor [UIColor whiteColor];textField.secureTextEntry YES;[self.view …...
【SpringBoot篇】5种类型参数传递json数据传参的操作
🎊专栏【SpringBoot】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 文章目录 🌺普通参数🌺POJO参数🌺嵌套…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
