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

音视频入门知识(二)、图像篇

⭐二、图像篇

视频基本要素:宽、高、帧率、编码方式、码率、分辨率

​ 其中码率的计算:码率(kbps)=文件大小(KB)*8/时间(秒),即码率和视频文件大小成正比

YUV和RGB可相互转换

★YUV(原始数据)

YUV是音视频(编解码)最常用的格式。

YUV 是一种色彩空间的编码格式,用于表述图像或视频帧中的颜色信息。它将颜色分为三个分量:

  • Y(亮度,明暗信息)
  • UV(色度,分别代表蓝色和红色的偏离度信息,用于编码色彩)

YUV420/422可通过ffmpeg/opencv直接编码成H264编码

  • YUV444YUV422YUV420

    代表 YUV 色彩格式中不同的采样模式,描述了亮度(Y)和色度(U、V)分量在空间中的采样比例。后面的数字代表y、u、v在一个像素中各自占的比例。

    ​ 444:代表每个像素都有完整的 Y、U 和 V 数据。也就是说,色度和亮度分辨率是相同的

    ​ 422:亮度(Y)仍然是逐像素采样的,但色度(U 和 V)分量是每两个像素水平采样一次,即色度分辨率在水平方向上为亮度的一半。

    ​ 420:亮度(Y)分量仍然是逐像素采样的,但色度(U 和 V)分量每两个像素水平采样一次,并在垂直方向上每两行采样一次,因此色度的水平和垂直分辨率都是亮度的一半

    640 (2)

YUV的数据格式保存有两种分类方式(视频压缩方式),即**“空间-间”和“空间-内”。“空间-间”的划分方式主要体现在Y、U、V的比例不同**;“空间-内”的划分方式主要体现在Y、U、V的比例一定,存储格式不同

空间-间编码(时空编码)

空间-间编码(也称时空编码)是指对帧之间的相关性进行压缩。视频是一系列连续的图像帧,其中相邻帧之间通常会有很高的相似度,因此通过只记录帧间的差异可以显著降低数据量,例如帧间预测(P 帧、B 帧)利用前后帧的相关性减少数据存储。此种编码方式常用于视频压缩标准(如H.264、H.265)中的**“帧间预测”**部分。

帧类型
  • I帧:帧内编码帧,只参考当前帧内容进行压缩。解码时不需要其他帧,因此是独立的,适合作为关键帧

  • P帧:预测帧,通过参考前面一个 I 帧或 P 帧进行编码仅记录与参考帧的差异信息

  • B帧:双向预测帧,通过参考前后的 I 帧或 P 帧来编码,提高了压缩效率。

空间-内编码(帧内编码)

空间内编码(也称帧内编码)是指在单帧图像内部进行压缩,不参考其他帧。利用图像内部的相似性(如色块、纹理等)来去除冗余信息,只在单个帧内进行压缩。

一般用于视频压缩中的关键帧(I帧)压缩,以确保独立解码

以下是三种不同的YUV图像存储方式。

  • Packet打包

    即先存储一个yuv,再存储下一个yuv;

    示例:YUV444 的打包格式可能是 YUV YUV YUV 的顺序;而 YUV422 则是 YYUV YYUV

    优点读取方便,因为每个像素的颜色分量是连续的。

    缺点:存储效率较低,适合在特定的硬件或视频处理中使用。

  • Planar平面(用P简写代表)

    先存储y平面,再存储u平面,再存储v平面,即 Y、U、V 分量分开存储,每个分量各占一块“平面”区域

    优点:适合对每个分量单独进行处理,常用于视频压缩和解码中的计算。

    缺点:因为色度平面的数据较少,处理可能会较复杂,但节省空间。

  • Semi-Planner半平面(用NV简写代表)

    先存储y平面,再存储uv平面;即Y 平面独立存储,而 U 和 V 分量共享一个平面

    优点节省存储空间,读取较为方便,因此广泛用于现代视频编解码中。

    缺点:虽然节省了空间,但比完全的平面格式稍难以单独处理 U 和 V。

示例:(12代表一个像素点占的bit位数)

640 (3)

★H.264(编码格式)

广泛应用的视频压缩标准

数据格式

NAL 层(Network Abstraction Layer) + VCL 层(Video Coding Layer)

◆ VCL:H264编码/压缩的核心,主要负责将视频数据编码/压缩,再切分。

◆ NALU = NALU header + NALU payload

  • NAL层

    NAL 层是 H.264 编码数据的封装层,用于将编码后的视频数据封装成独立的单元,以便传输和存储。

    每一个 NAL 单元(NAL Unit)包含一个NAL 头负载数据

    NAL单元的起始码(Start Code) 常见为 0x0000010x00000001

    • NAL 头(1B):用于描述当前 NAL 单元的类型(如I帧、P帧等)

      ◆ F(forbidden_zero_bit):1 位,初始为0。当网络识别此单元存在比特错误时,可将其设为 1,以便接收方丢掉该单元。

      ◆ NRI(nal_ref_idc):2 位,用来指示该NALU 的重要性等级。

      ◆ Type(nal_unit_type):5 位,指出NALU 的类型

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    常见的NAL单元类型

    • IDR 帧(NAL Type 5):关键帧,独立解码的 I 帧,用于随机访问。

    • 非 IDR 帧(NAL Type 1):用于 P 帧或 B 帧等非关键帧。

    • 序列参数集(SPS,NAL Type 7):包含视频序列的全局参数,如分辨率、帧率等

    • 图像参数集(PPS,NAL Type 8):包含单个或多个图片的参数,如预测模式、量化参数等。

    • 负载数据:存储实际的视频编码数据,如帧内预测、帧间预测的数据等。

  • VCL层

    负责实际的视频数据编码,它将视频图像压缩成基本的编码单元(如宏块、块等),并使用 H.264 的压缩算法生成相应的数据

    压缩:预测(帧内预测和帧间预测)-> DCT变化和量化 -> 比特流编码;

    切分数据,主要为了第三步。“切片(slice)”、“宏块(macroblock)"是在VCL中的概念,一方面提高编码效率和降低误码率、另一方面提高网络传输的灵活性。

    包装成『NAL』。

    • Slice(片):每一帧可以由一个或多个 Slice 组成,便于错误恢复。Slice 是一组连续的宏块,每个 Slice 可以独立解码。
    • 宏块(Macroblock):H.264 中基本的编码单元,每个宏块包含 16x16 的像素区域,并根据帧内或帧间模式进行编码。
    • 块(Block):宏块可以细分为 8x8 或 4x4 的块,用于 DCT 变换和预测。
  • H.264文件封装格式

    H.264 编码的数据可以封装在不同的文件格式中,以便在各种应用场景中使用

    • 裸流(.264 或 .h264):直接存储 H.264 编码后的 NAL 单元数据,常用于调试和测试。
    • MP4 / MOV:一种常见的容器格式,用于存储音视频流,包含更多的元数据(如时间戳、索引等),便于流式播放和快进。
    • MPEG-TS(.ts):传输流格式,常用于广播和网络传输,有较好的错误恢复能力。
    • MKV:一种开源的多媒体封装格式,支持多种编码格式和多音轨,广泛用于高质量视频存储。
      参考文献:https://www.cnblogs.com/say-Hai/articles/18630636

相关文章:

音视频入门知识(二)、图像篇

⭐二、图像篇 视频基本要素:宽、高、帧率、编码方式、码率、分辨率 ​ 其中码率的计算:码率(kbps)=文件大小(KB)*8/时间(秒),即码率和视频文件大小成正比 YUV和RGB可相互转换 ★YUV(原始数据&am…...

v-if 和 v-show 的区别

一、原理区别 1. v-if 这是一个指令,用于条件性地渲染一个元素块。当v-if表达式的值为true时,元素及其包含的子元素才会被渲染到 DOM 中;当表达式的值为false时,元素及其子元素会被完全移除。这意味着在切换v-if的条件时&#x…...

解密MQTT协议:从QOS到消息传递的全方位解析

1、QoS介绍 1.1、QoS简介 使用MQTT协议的设备大部分都是运行在网络受限的环境下,而只依靠底层的TCP传输协议,并不 能完全保证消息的可靠到达。 MQTT提供了QoS机制,其核心是设计了多种消息交互机制来提供不同的服务质量,来满足…...

Java-02 深入浅出 MyBatis - MyBatis 快速入门(无 Spring) POM Mapper 核心文件 增删改查

点一下关注吧!!!非常感谢!!持续更新!!! 大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了: MyBatis&#xff…...

Unity功能模块一对话系统(4)实现个性文本标签

本期我们将了解如何在TMPro中自定义我们的标签样式&#xff0c;并实现两种有趣的效果。 一.需求描述 1.定义<float>格式的标签&#xff0c;实现标签处延迟打印功能 2.定义<r" "></r>格式的标签&#xff0c;实现标签区间内文本片段的注释显示功能…...

git在idea中操作频繁出现让输入token或用户密码,可以使用凭证助手(使用git命令时输入的用户密码即可) use credential helper

1、打开 idea 设置&#xff0c;找到 git 路径 File | Settings | Version Control | Git 2、勾选 Use credential helper 即可...

毫米波雷达技术:(九)快时间窗和慢时间窗的概念

&#xff08;一&#xff09;快时间窗&#xff1a; 快时间窗通常指的是在雷达脉冲周期内&#xff0c;对每个脉冲回波进行采样的时间段。这个时间段非常短&#xff0c;通常在 0 − 100 n s 0-100ns 0−100ns 。在快时间窗内&#xff0c;雷达系统会对接收到的回波信号进行高分辨…...

宠物行业的出路:在爱与陪伴中寻找增长新机遇

在当下的消费市场中&#xff0c;如果说有什么领域能够逆势而上&#xff0c;宠物行业无疑是一个亮点。当人们越来越注重生活品质和精神寄托时&#xff0c;宠物成为了许多人的重要伴侣。它们不仅仅是家庭的一员&#xff0c;更是情感的寄托和生活的调剂。然而&#xff0c;随着行业…...

Android MQTT关于断开连接disconnect报错原因

最近项目遇到一个需求&#xff0c;就是在登录状态的时候。才能接收到消息。所有我在上线&#xff0c;下线状态的时候。做了MQTT断开和连接的动作。然后就是发生了。我们标题的这关键点了。直接报错了。报错的内容如下&#xff1a; MqttAndroidClient unregisterRecevicer afte…...

Unity3D中Huatuo可行性的思维实验详解

引言 Unity3D作为一款功能强大的跨平台游戏引擎&#xff0c;在游戏开发领域具有举足轻重的地位。它不仅支持2D和3D游戏开发&#xff0c;还广泛应用于虚拟现实、建筑可视化等领域。其中&#xff0c;Huatuo作为一个强大的热更新解决方案&#xff0c;通过扩展Unity的IL2CPP运行时…...

ES-聚合分析

ES的聚合分析 什么是ES的聚合分析 ElasticSearch除搜索意外&#xff0c;提供的针对ES数据进行统计分析的功能通过聚合&#xff0c;我们会得到一个数据的概览&#xff0c;是分析和总结全套的数据&#xff0c;而不是寻找单独的文档高性能&#xff0c;只要一条语句就可以得到分析…...

【CSS in Depth 2 精译_093】16.2:CSS 变换在动效中的应用(上)—— 图标的放大和过渡效果的设置

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第五部分 添加动效 ✔️【第 16 章 变换】 ✔️ 16.1 旋转、平移、缩放与倾斜 16.1.1 变换原点的更改16.1.2 多重变换的设置16.1.3 单个变换属性的设置 16.2 变换在动效中的应用 ✔️ 16.2.1 放大图…...

Linux Debian安装ClamAV和命令行扫描病毒方法,以及用Linux Shell编写了一个批量扫描病毒的脚本

ClamAV是一个开源的跨平台病毒扫描引擎&#xff0c;用于检测恶意软件、病毒、木马等安全威胁。 一、Linux Debian安装ClamAV 在Linux Debian系统上安装ClamAV&#xff0c;你可以按照以下步骤进行&#xff1a; 更新软件包列表&#xff1a; 打开终端并更新你的软件包列表&#…...

Spring创建异步线程,使用@Async注解时不指定value可以吗?

在Spring中使用Async注解时&#xff0c;不指定value是可以的。如果没有指定value&#xff08;即线程池的名称&#xff09;&#xff0c;Spring会默认使用名称为taskExecutor的线程池。如果没有定义taskExecutor线程池&#xff0c;则Spring会自动创建一个默认的线程池。 默认行为…...

二分和离散化

为什么把二分和离散化放一起&#xff1a;因为离散化其实是一种二分整数的过程。 二分 相信大家都接触过二分查找&#xff08;折半查找&#xff09;&#xff0c;这就是二分的思想。 二分通过每次舍弃一半并不存在答案的区间&#xff0c;进而快速锁定要求的答案&#xff08;二…...

深度学习实战102-基于深度学习的网络入侵检测系统,利用各种AI模型和pytorch框架实现网络入侵检测

大家好,我是微学AI,今天给大家介绍一下深度学习实战102-基于深度学习的网络入侵检测系统,利用各种AI模型和pytorch框架实现网络入侵检测。近年来,网络安全威胁日益严峻,传统基于规则的方法难以应对复杂多变的入侵手段。 深度学习技术凭借其强大的特征学习能力和自适应性,…...

vue3使用element-plus,解决 el-table 多选框,选中后翻页再回来选中失效问题

问题&#xff1a;勾选的数据分页再回来回消失 1.在el-table中加 :row-key"getRowKey" const getRowKey (row) > { return row.id; // id必须是唯一的 }; 2.给type为selection的el-table-column添加上reserve-selection属性 <el-tableref"multipleTab…...

网络的类型

BMA---广播型多路访问--在一个网段内可以放置多个物理节点,同时该范围内可以实施广播洪泛机制 【1】以太网-->共享型 属性典型的 BMA类型;以太网技术的核心为频分一在同一物理介质上&#xff0c;使用多个相互不干涉的频率电波来共同传输数据&#xff0c;实现带宽的不断提升…...

实现类似gpt 打字效果

1. css的动画&#xff08;animation) css中实现动画有两种方式&#xff1a;transition过渡动画、 animation自定义动画。 具体的可以看MDN链接&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/CSS/animation 使用keyframes自定义关键帧动画并未其命名使用自定义动…...

项目需求分析流程

项目需求分析是软件开发或任何工程项目中至关重要的第一步。它帮助确保团队理解客户的需求&#xff0c;并为后续的设计、开发和测试工作提供指导。以下是一个详细的需求分析流程&#xff1a; 一、确定项目目标 与利益相关者沟通&#xff1a;包括但不限于客户、最终用户、销售…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...