在我们的日常生活中,比如有缓存电影或者是发送视频的需求。如果没有视频压缩,一部手机只能存几分钟视频,1TB 硬盘也装不下几部电影,用 4G 网络发一段 1 分钟视频,可能需要几十分钟(甚至传不完),在线看视频更是完全不可能。所以就引入了H264这样的压缩技术。这边文章更注重如何传输(NAL)。

如何进行压缩

空间冗余:一帧图像中可能会有一片像素是相似的,就可以进行压缩

时间冗余:几帧图像之间会有一些像素部分变化较小,可以进行压缩

视频编码关键点

压缩比:压缩比越高,视频文件越小。

算法复杂度:复杂度越高,对设备性能要求越高,但可能带来更高的压缩效率或画质。

还原度:指编码后的视频与原始视频的画质接近程度。

压缩比、算法复杂度、还原度并非孤立存在,而是形成 “不可能三角”,三者相互制约

H.264的2大组成部分(NAL VCL)

VCL:负责 “压缩视频内容”,通过帧内 / 帧间预测、变换量化等技术,去除视频中的冗余信息,生成高效压缩的核心视频数据。

NAL:负责 “适配网络传输”,将 VCL 生成的压缩数据打包成符合网络传输规则的单元(加起始码、头部信息等),确保数据能在网络中稳定传输和解码。

H.264编码相关的一些概念

宏块(macroblock):宏块内的像素相似度比较高,前面讲到的空间冗余就和这个有关

片(slice):片比宏块大是组成帧的一部分

帧(frame):一幅图像

I帧:只进行帧内压缩,图像较为完整

B帧:参考前后帧得出当前帧

P帧:只参考前一帧得出当前帧

帧率(fps):单位时间内视频显示的画面帧数

以下是一段H.264的文件进行解析,此处要用到工具winhex和SpecialVH264.exe

由实验结果可知海思平台编码出来的H.264码流都是一个序列包含:1sps+1pps+1sei+1I帧+若干p帧

对应以上两个实验结果继续详细的介绍H.264的NAL部分:

序列(sequence):给视频分段,一个序列就是一个视频段(每个段都参考一个I帧减小误差)

分隔符:可以看到转二进制之后都会用一个00 00 00 01进行分割,在数据段部分有两个00就会用一个03进行分割,以免数据段和分隔符出现重复

nal_ref_idc:表示该帧数据的重要性,因为网络传输难以避免会出现丢包的情况,定义标志位防止重要的包被丢弃

NALU:分隔符后一位就是NALU,用于标识该帧的类型和其重要性,具体可以参考H264(NAL简介与I帧判断)

SPS:规定整个视频的基础属性(比如多大尺寸、每秒多少帧),解码器先看它才知道怎么 “看懂” 整个视频。

PPS:针对每帧画面的编码方式做具体说明(比如怎么压缩、怎么去噪),指导解码器处理单帧数据。

SEI:不是必要的,不直接影响画面内容,但提供与视频相关的 “额外信息”(如时间戳、版权声明、画质增强提示等),辅助解码器更好地处理或显示视频

如何通过SPS和PPS看到详细的属性呢

上面是通过SpecialVH264.exe这个工具查看到的,关于每一项的具体意思可以参考H264码流中SPS PPS详解这一篇文章

其中有几个比较重要的属性

profile:可以理解为定义了编码工具的集合,不同的profile,包含了不同的编码技术

level:主要是对码流的关键参数的取值范围作了限定,与解码器的处理能力和存储能力相关联

对于profile和level可以看h264中profile和level的含义

pic_width_in_mbs_minus1:用于计算图像的宽度 frame_width = 16 × (pic_width_in_mbs_minus1 + 1);

pic_height_in_map_units_minus1:用来度量视频中一帧图像的高度计算公式和宽度一样

关于海思平台H.264的一些知识

p帧的个数等于fps-1;
I帧越大则P帧可以越小,反之I帧越小则P帧会越大,可以理解为参考的越少,自己要做的更多;
I帧的大小取决于图像本身内容,和压缩算法的空间压缩部分;
P帧的大小取决于图像变化的剧烈程度;
CBR和VBR下P帧的大小策略会不同,CBR时P帧大小基本恒定,VBR时变化会比较剧烈;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88828.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88828.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/88828.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新手向:Python自动化办公批量重命名与整理文件系统

本文将详细介绍如何使用Python实现一个强大的文件批量重命名与整理工具,帮助开发者自动化这一繁琐过程。本教程面向Python初学者,通过一个完整的项目案例,讲解文件系统操作的核心技术。我们将构建的工具将具备以下功能:基于正则表…

C++ 左值右值、左值引用右值引用、integral_constant、integral_constant的元模板使用案例

C 左值右值、左值引用右值引用、integral_constant、integral_constant的元模板使用案例一、左值右值1.左值2.右值二、左值引用右值引用1.左值引用2.右值引用总结三、integral_constant四、integral_constant的元模板使用案例1.求最大整数2.内存对齐alignof关键字元模板计算内存…

c++算法一

1.双指针总结:1.复写0这道题,告诉我们要正难其反,我们从后向前进行重写,删除某些数字的时候,我们可以从前向后遍历,但是增加一些数字的时候会对后面的数据进行覆盖,所以要从后向前进行2.快乐数涉…

LeetCode-283. 移动零(Java)

283. 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: n…

【数据库】慢SQL优化 - MYSQL

一、数据库故障的关键点 引起数据库故障的因素有操作系统层面、存储层面,还有断电断网的基础环境层面(以下称为外部因素),以及应用程序操作数据库和人为操作数据库这两个层面(以下称内部因素)。这些故障中外…

桶排序算法深度剖析

🔍 桶排序算法深度剖析 🎯 核心原理图解⚙️ 完整算法流程 #mermaid-svg-LyB6SpaZ132X4Wtn {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-LyB6SpaZ132X4Wtn .error-icon{fill:#552222;}#mer…

对S32K144做的BMS安装快速开发Simulink库及BMS例程介绍

前言 本章介绍BMS硬件功能及SimuLink库为主,捎带介绍一些例程内容 注意:例程所用的协议均是自定义的 自做的SimuLink库也会不定期更新 BMS例程的内容不定期维护添加 当前的BMS没有主动均衡功能,这个有考虑后期加上,当前还处于…

urlencode、html实体编码、unicode

目录 urlencode html实体编码 Unicode编码 urlencode URL编码也称为百分号编码,用于将URL中的特殊字符转换为安全传输的格式。英文数字一般不编码 特点: 使用%后跟两个十六进制数字表示字符 空格编码为或%20 保留字符(; / ? : & …

【HarmonyOS】元服务概念详解

【HarmonyOS】元服务概念详解 最近几年,我们手里的设备越来越多——手机、平板、手表、车机……光是管理这些设备上的APP就够头疼了:下载要流量、安装占内存、换个设备又得重新弄一遍。有没有更简单的方式?HarmonyOS推出的“元服务”&#xf…

vscode/cursor怎么自定义文字、行高、颜色

JetBrains Mono: A free and open source typeface for developers | JetBrains: Developer Tools for Professionals and Teams 首先下载上面的文字,然后右键全选,安装 然后重启cursor 下载插件Apc Customize UI 点击设置 把下面的代码复制进去&…

JavaScript 与 C语言基础知识差别

一, 变量声明对比 C语言: int age 20; // 必须指定类型 float price 9.99; char grade A; const double PI 3.14; // 常量JavaScript: let age 20; // 数字 var price 9.99; // 现在不用,有缺点 co…

无缝矩阵支持音频分离带画面分割功能的全面解析

一、技术原理与实现方式1. 音频分离技术核心功能:HDMI无缝矩阵通过硬件或软件实现音频加嵌与分离功能,支持多设备音频的独立处理与增强。实现方式:音频加嵌:将外部音频信号(如麦克风、调音台)嵌入HDMI信号中…

AI创作系列第18篇:海狸IM移动端UI统一大升级 - 从混乱到规范的技术重构之路

AI创作系列第18篇:海狸IM移动端UI统一大升级 - 从混乱到规范的技术重构之路本文是海狸IM AI创作系列的第18篇文章,记录7月11日-13日周末期间对移动端的UI统一升级工作。这次重构不是功能性的,而是架构性的 - 我们重新设计了整个UI架构&#x…

八、nginx搭建,实现vue跳转nginx跳转gateway

基本的调用链路: vue调用nginx,nginx反向代理gateway,gateway看用户是否登录,没有登录的话,就创建验证码并先输入密码后获取token。 截止现在我们创建了两个项目能够通过feign调用,并且创建好了gateway,且能调用对应的项目。 这一章节,我们搭建好nginx,通过反向代理,…

C++ 中常见的字符串定义方式及其用法

引言 最近在学习C&#xff0c;下面将从基础到进阶的顺序&#xff0c;列出一些 C 中常见的字符串定义方式及其用法&#xff0c;包含完整代码和详细注释&#xff0c;加深对代码的理解。 C 风格字符串&#xff08;char*或 char[]&#xff09; 定义方式 #include <iostream>i…

下一代防火墙-防范DOS攻击、IPS防护、web防护实验

一、实验拓扑二、实验设备1.山石网科系列下一代防火墙2.三层交换机一台3.windows两台4.各种工具&#xff0c;如hyenae、小旋风服务器、永恒之蓝等等三、实验目的1.掌握网络攻击防护策略配置2.通过下一代防火墙来防护服务器免受DOS攻击四、防范Dos攻击实验1.将一台windows配置为…

【人工智能】通过 Dify 构建智能助手

通过 Dify 构建智能助手1.定义2.如何使用智能助手3.添加助手需要的工具4.配置 Agent5.配置对话开场白6.添加文件上传7.调试与预览8.应用发布1.定义 智能助手&#xff08;Agent Assistant&#xff09;&#xff0c;利用大语言模型的推理能力&#xff0c;能够自主对复杂的人类任务…

破局与重构:文心大模型开源的产业变革密码

——从技术垄断到生态共享的战略转型深度解析 引言&#xff1a;一场静悄悄的革命 2024年&#xff0c;当百度宣布文心大模型4.5系列全面开源时&#xff0c;这不仅仅是一次技术发布&#xff0c;更是一场关于AI产业未来走向的战略博弈。在全球AI竞争白热化的当下&#xff0c;开源意…

7.15 窗口函数 | 二分 | 位运算

05.071.位运算2.位图class Solution { public:int exchangeBits(int num) {bitset<33> bitNum(num);for (int i 0; i < 16; i){bitNum[32] bitNum[2*i];bitNum[2*i] bitNum[2*i1];bitNum[2*i1] bitNum[32];}return (int)bitNum.to_ulong();} };577.员工奖金select…

Windows 安装配置Claude Code

文章目录1.安装node.js2.安装 Claude Code3.测试claude1.安装node.js https://nodejs.org/en/download/ 一路回车即可顺利安装完成。 再键盘按下Win R快捷键&#xff0c;输入cmd&#xff0c;然后回车启动命令行窗口。分别输入node -v和npm -v来查看node.js版本和npm版本。 环…