Linux_10:编码
1.视频为什么要编码在我们做音视频产品的时候经常会把音视频数据进行网络传输而此时音视频数据就需要进行 编码(所谓编码就是指压缩)。因为在网络传输的时候网络带宽有限若此时网络传输的时候还用 原始数据进行传输的时候则会对网络带宽造成极大的负担。比方说一个分辨率为1280 * 720 帧 率为30帧的视频按照YUV420格式的计算它每秒传输的数据量就是1280* 720* 30 * 3/2 ~39.5M这个数据量是极其惊人的。所以此时我们就要引入视频编码技术来压缩视频让其体 积大小能够大幅度缩小这样在网络传输的时候就会大大降低网络负担。在音视频开发中一般 分为H264、H265这两种最常见的编码格式。H264的压缩比能够达到1100H265的压缩比能够达到1:200但是目前业内由于HEVC技术还没完全成熟所以绝大部分设备都是用H264进行压 缩处理。YUV 420 的 每像素平均字节数 1.5因为 Y 每个像素 1 字节UV 合起来平均 0.5 字节/像素帧大小1280×720×1.5921600×1.51382400 字节每秒字节数1382400×3041472000 字节/秒转换成 Mbps注意1 Mbps 1,000,000 bits/s不是 1024×102441472000 字节/秒×8 比特/字节331776000 bps331776000÷106≈331.8 Mbps331776000÷106 ≈ 331.8 Mbps2.H2641.VCL层和NALH264编码格式是目前业内最流行的视频编码格式它是MPEG-4的第十个部分。H264具有高压缩 率、高图像质量、网络适应性很强等特点。在同等的图像质量下H264的压缩比远超绝大部分编 码格式(HEVC**除外)。在H264(HEVC)编码框架中分为两大层一层是VCL(Video Coding Layer)、另外一层是NAL层(Network Abstraction Layer)。VCL层主要负责内容的表示(如下 图)NAL层主要负责对H264数据进行打包和传输2.VCL层(Video Coding Layer)VCL层包含了四个比较重要的知识点分别是帧内预测压缩、帧间预测压缩、变换量化、熵编码帧内压缩也称之为空间压缩当压缩一张图片的时候若仅仅考虑帧的数据也不考虑相邻帧和帧之间的冗 余数据这样的方式就叫帧内压缩。在H264中I帧生成的原理就是帧内压缩帧内压缩可以独立解码出一帧完整的图像而不需要参考任何帧帧内压缩表现出来的数据是最大16 x 16的宏块(它也 包括4x48x8)。帧内压缩本质上是在空间的XY轴上进行压缩它的压缩率比较小。下面9张图是9种不同的预测方式帧间压缩帧间压缩是通过对比相邻两帧之间的数据进行压缩并且进一步提高压缩量。用这种方法可以先 编码出一个完整的图像1帧紧接着2帧的数据就不编码出一张完整的图像而是只写入和1帧的不同的数据这样2帧数据的大小则会大大降低。以此类推3帧的数据参考2帧数据并且也只写入2帧不同的数据帧间压缩表现出来的数据同样也是最大16 x 16的宏块(它也包括4x4 8x8)。按照这样的方法不停地循环下去。这样的方式就是P帧、B帧的实现方法变换量化为了要让压缩的H264图像在网络传输中节省更多的码率需要采用变换编码以及量化技术来消除 图像信号中的相关性以及减小图像编码中的动态变换范围。变换编码的原理就是把图像时域信号 变换成频域信号在频域范围内绝大部分信号集中在低频区域相对时域信号码率能够大幅 度下降。而在H264中通常用下面方法进行处理H264数据经过帧内压缩(16 * 16亮度、4 * 4 亮度、8 * 8亮度)、帧间预测(4 * 4 ~ 16 * 16亮度)得到了残差值。这些残差值需要经过冗余的统 计并进行数据的变换和量化操作。注意对于H264的16 x 16的亮度块通过4x4的前向DCT变换然后对16个DC系数再进行4 x4 的 Hadmard变换最后把这16个DC系数进行量化。而对于8x8的色度块则进行4x4的DCT变换后得到4个DC和60个AC系数并对DC系数进行2x2的 Hadmard变换。变换后则对DC系数和AC系数进行量化操作。要值得注意的是由于变换块越大编码的效率越高图像的还原度越好。所以为了让其编码质量 得到更好的效果在H264的高清(HD)档次它支持8x8的DCT变换并且不需要对DC系数进行 Hadmard变换DCT变换后则对DC和AC系数进行统一处理。熵编码熵编码压缩是一种无损压缩模式其实现原理是使用的编码模式来表示输入的数据并达到压缩 效果。常用的熵编码方式分别是变长编码(CAVLC)和算术编码(CABAC)。变长编码(CAVLC)对出现概率大的符号对出现概率小的符号提供长字节二进制码。算术编码(CABAC)采用一个浮点数代替一串输入符号范围是[0,1)CABAC的编码压缩率远远大于CAVLCCABAC具有更高的编码效果。3.NAL层(Network Abstraction Layer)负责以网络所要求的方式进行打包和传送NAL层一般由三部分组成分别是StartCode(起始码必须是00 00 00 01)、NALU Header(NALU 头部)、NALU Payload(具体传输的视频内容)比方说一串H264码流的NALU00 00 00 01 68 43 A0 25 56 2E...[00 00 00 01]是StartCode也就是起始码[68] 是NAL头部[43 A0 25 56 2E...]就是NALU Payload的数据StartCode起始码起始码是所有H264码流开始时候的分隔符一般分为0x000001和 0x00000001两种NAL头部NALU头部长度为一个字节它的语法是NALU类型(5bit)、重要性位(2bit)、禁止 位(1bit)比方说NALU头部是0x68转换为二进制数据就是0110 1000.这表示禁止位为0NAL重要性为11(最重要)01000换算成HEX格式就是8也就是PPS。NALU Payload具体的视频内容4.H264重点帧1.帧的概念在视频中帧是视频传输的最小单位。一帧实际上静态图片视频本质上是由连续的静态图片组 成我们经常耳熟能详的30帧、60帧实际上指的就是静态图片的数量。比方说30帧它指的是1 秒内有30张静态图片而60帧它指的是1秒内有60张静态图片。换言之帧率越高它所生成 的静态图片就越多视频质量就越好、视频的流畅度也更好。在H264中最重要的NALU是SPS、PPS、SEI、I帧。下面是一个经典的NALU一般而言H264开头都是 以SPS、PPS为开头若SEI有数据则添加SEI数据(SEI帧可有可无)紧接着就是I帧SPSSequence Parameter Set 全称是序列参数集(它的NALU是00 00 00 01 67)它保存了一组编码视频序列的全局参数。也就是原始视频经过压缩编码后组成的序列而每一帧编码数据它所依赖的全局参数就保存到图像参数集里面。通常来说SPS和PPS都是整个NALU的起始位置。ppsPicture Parameter Set 图像参数集合(PPS它的NALU是它的NALU是00 00 00 01 68)。在一般的情况PPS经常和SPS联合在一起保存到视频文件的头部里面。SEISupplemental Enhancement Information 补充增强信息是一种用于视频流传输中的额外附加信息(它在传输的时候可有可无)SEI是H264标准的一部 分。SEI可以传输多种类型的信息如字幕、时间戳等信息。SEI信息通过H264码流传输到解码器解码器通过解析SEI对视频进行后处理操作。I帧I帧Intra-coded frame 帧内编码帧就是我们常说的关键帧(NALU00 00 00 01 65)它不需要参考任何帧就可以拥有一副完整的 画面。(帧内压缩)P帧P帧Predictive-coded frame 预测编码帧是前向预测帧它需要根据本帧和相邻的前一帧(I帧或P帧)的不同点来压缩本帧数据。从上面这张图我们可以看出来P帧(1号)的压缩数据需要参考I帧的数据进行视频的压缩而P帧(2号)需要参考P帧(1号)的数据进行视频压缩。换言之P帧它需要不停地参考前面帧的数据才能够压缩本帧数 据。B帧B帧Bi-directionally predictive-coded frame 双向预测编码帧属于双向预测的帧它需要根据相邻的前一帧数据、以及后一帧数据的不同点来压缩本帧换 言之B帧只记录本帧和前后帧的差值。B帧的压缩比是三种帧里面最高的压缩比能够达到 200:1。B帧常用在高清电影的和蓝光影响的录制。5.GOP1.GOP概念GOP(Group of Pictures中文名称是图像组)它是把一个图像序列中连续几个图像组成一个小组 它本质上是两个I帧的距离。通常来说GOP的长度越长P帧/B帧的数量就会越多压缩比更高画面质量越好所以在音视频开发中经常会用GOP的长度来改善画面质量。上面这张图是通过H264解析工具StreamEye来获取到对应H264的GOP信息可以看到每一个画矩形框的部分就是I帧。从这张图的数据来看每个I帧的间隔都是30这一点可以从下面statistcs数据的I distance参数可以看到。2.GOP类别GOP分为两种一种是闭合GOP另外一种是开放GOP闭合GOP闭合GOP是指不对外开放的GOP结构它的特点是GOP内的帧不可以参考其前后其他的帧闭合GOP一般都是以I帧开头开放GOP允许其内的帧参考其他GOP内的帧一般而言在有B帧的情况下才会出现open-gop。如下图末尾的两个B帧需要依赖下一个GOP中的I帧进行解码。3.GOP的长度设置GOP的设置一般是帧率的整数倍。比方说视频的帧率是30帧则GOP的长度最好设置为30、60等。若帧率是60则把GOP设置为60、120等

相关新闻

Linux_10:码率

Linux_10:码率

1.码率的概念 视频码率是数据传输时单位时间内传输的数据位数,对于视频来说视频码率的单位是kbps(千比特率)每秒。简单说,码率就是取样率,码率越高画面质量精度越高,处理的文件或者码流就越接近原始文件。视频码率传输的大小跟分…

2026/7/13 1:05:15 阅读更多 →
视觉提示怎么用?YOLOE镜像详细操作指南来了

视觉提示怎么用?YOLOE镜像详细操作指南来了

视觉提示怎么用?YOLOE镜像详细操作指南来了 你有没有遇到过这样的场景:想让AI识别一张图里“那个穿红裙子站在咖啡馆门口的女人”,但模型只认得“person”“car”“building”这些固定类别?或者,你手头有一张产品样图…

2026/7/13 1:08:09 阅读更多 →
小白必看:YOLOv9官方版镜像保姆级入门教程

小白必看:YOLOv9官方版镜像保姆级入门教程

小白必看:YOLOv9官方版镜像保姆级入门教程 你是不是也经历过这些时刻? 下载完YOLOv9代码,配环境配到凌晨三点,CUDA版本对不上、PyTorch和torchvision版本打架、OpenCV编译失败……最后连一张图片都跑不起来。 或者好不容易装好了…

2026/7/12 1:01:52 阅读更多 →

最新新闻

【提示词6要素之03背景】给AI充足的上下文,它才能给你惊喜

【提示词6要素之03背景】给AI充足的上下文,它才能给你惊喜

提示词工程6要素深度拆解系列 第3篇 本文要点:上下文管理的三层模型 信息优先级排序 避免「信息过载」的黄金法则一、同样的任务,不同的背景,天壤之别 假设你让AI「写一封道歉邮件」。不提供任何背景: AI会写一封万能模板——礼…

2026/7/13 1:09:43 阅读更多 →
宣称“迪奥999同源配方”的贴牌口红靠谱吗?看丝绒与哑光底料公差

宣称“迪奥999同源配方”的贴牌口红靠谱吗?看丝绒与哑光底料公差

宣称“迪奥999同源配方”的贴牌口红靠谱吗?关键不在原料是否同源,而在于丝绒与哑光底料公差能否真正复刻大牌产线级工艺标准。在美妆尾货源头渠道的询盘里,“迪奥999同源配方”几乎成了贴牌口红的标配话术。不少B端买家第一次对接时&#xff…

2026/7/13 1:07:43 阅读更多 →
003-使用刚针测试CH348芯片IO口

003-使用刚针测试CH348芯片IO口

使用刚针测试,CH348芯片的25、27、29、33 这4个引脚视频截图:操作视频:https://v.douyin.com/lB1fIakyToA

2026/7/13 1:05:42 阅读更多 →
工业信号采集系统设计:高速光耦与STM32 ADC应用

工业信号采集系统设计:高速光耦与STM32 ADC应用

1. 工业环境信号采集的挑战与解决方案在电机控制、电力监测等工业场景中,信号采集系统常面临三大干扰源:电磁干扰(EMI)峰值可达200V/m、共模噪声范围10V、以及温度波动引起的器件参数漂移。传统的光耦隔离方案如PC817,…

2026/7/13 1:03:42 阅读更多 →
UML 2.5 实战:从10个核心图例到代码生成,提升团队设计效率50%

UML 2.5 实战:从10个核心图例到代码生成,提升团队设计效率50%

UML 2.5 实战:从10个核心图例到代码生成,提升团队设计效率50%在当今快节奏的软件开发环境中,清晰的设计沟通和高效的团队协作已成为项目成功的关键因素。作为软件工程师和架构师,我们常常面临一个核心挑战:如何将复杂的…

2026/7/13 1:01:40 阅读更多 →
Android Camera MIPI接口知识总结

Android Camera MIPI接口知识总结

1 CIS 1.1 CIS知识点 ADC数量:假如一行是720P,就需要720个ADC,每个像素ADC只采样RGB中的一种颜色,然后通过demosaic算法产生其它两种颜色,生成新的10bit or 12bit or 14bit数据,一行处理完了,72…

2026/7/13 0:59:39 阅读更多 →

日新闻

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改 【免费下载链接】palworld-save-tools Tools for converting Palworld .sav files to JSON and back 项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools 你是否曾经想要调整Palwor…

2026/7/13 0:01:19 阅读更多 →
浦东旧模块回收哪家强?专业评测带你一探究竟

浦东旧模块回收哪家强?专业评测带你一探究竟

于科技迅猛飞速迭代的当下此刻, 旧模块的回收处置, 不但关联着资源的再度利用, 而且更牵扯到数据安全以及环保合规事宜。你是不是也正为那堆积得如同山峦般的旧模块而发愁? 是不是不清楚该怎样安全且高效地去处理它们? 别忧心烦恼, 就在今日, 我会以具备权威影响力的自媒体博…

2026/7/13 0:01:19 阅读更多 →
卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

1 研究背景与现存技术痛点(提出问题)基因工程、蛋白质组学、生物制药研发流程中,蛋白质分离纯化是决定下游实验成败的关键环节。当前实验室常规蛋白质分离纯化工艺存在三类难以标准化的技术瓶颈:传统离子交换、分子筛层析无特异性…

2026/7/13 0:05:20 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/12 0:03:13 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/12 0:03:14 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/12 0:03:14 阅读更多 →

月新闻