音视频小白系统入门课-4

本系列笔记为博主学习李超老师课程的课堂笔记,仅供参阅

往期课程笔记传送门:

  • 音视频小白系统入门笔记-0
  • 音视频小白系统入门笔记-1
  • 音视频小白系统入门笔记-2
  • 音视频小白系统入门笔记-3

将mp4文件转换为yuv文件

ffmpeg -i demo.mp4   # 输入文件-an            # 禁用音频流(audio no)-c:v rawvideo  # 视频流用rawvideo处理(非编码)-pix_fmt yuv420p # 指定输出像素格式为YUV420平面demo.yuv       # 输出原始YUV数据文件

rawvideo是一个伪编码器,仅仅进行数据格式转换,不进行有损编码

yuv数据仅仅存储视频,不存储音频

ffplay -f rawvideo -video_size 640x360 # 分辨率需要根据视频内容手动指定-pixel_format yuv420p -framerate 24 # -vf extractplanes=y # 简单滤波demo.yuv #播放yuv数据

yuv没有元信息,需要手动指定分辨率等信息

ffmpeg支持filter_complex复杂滤波

ffmpeg -i demo.mp4  -c:v rawvideo # 输出yuv格式时默认rawvideo-filter_complex "extractplanes=y+u+v[y][u][v]" -map '[y]' y.yuv -map '[u]' u.yuv -map '[v]' v.yuv# 播放
ffplay -f rawvideo -video_size 640x360 -pixel_format gray -framerate 24 y.yuv
ffplay -f rawvideo -video_size 320x180 -pixel_format gray -framerate 24 u.yuv

yuv格式:https://fourcc.org/yuv.php

H264视频编码

yuv420 640x480 15 → 52Mbps

H264建议码流:500kbps,压缩比1/100

码流推荐表:https://blog.csdn.net/huapeng_guo/article/details/132625661

交互通讯码流较低,需要时延较低;直播通讯码流较高,因为用户不和主播直接交换

GOP

Group of Picture 一组帧

GOP中帧的差距较小

  • 低码率环境:减少I帧频率(延长GOP)以节省带宽,但可能降低随机访问能力。
  • 高动态内容:频繁插入I帧(如GOP=15)以应对快速运动,但会增加文件体积。

I/P/B帧

I帧(Interframe frame):关键帧,采用帧内压缩技术,不依赖其他帧。

  • 例如IDR帧(Instantaneous Decoding Refresh Frame)瞬时解码刷新帧,清空IDR帧之前的所有数据,后面的数据不会依赖IDR帧之前的数据。每当遇到IDR帧,解码器会清空解码器参考buffer中的内容
  • 每个GOP中的第一帧是IDR帧
  • 可以防止错误传播

P帧(forward Predicted frame):向前参考帧。压缩时只参考前面已经处理的帧,采用帧间压缩技术。约占I帧的 1/2 大小

B帧(Bidirectionally predicted frame):双向参考帧。压缩时,既参考前面已经处理的帧,也参考后面的帧,帧间压缩技术。它约占I帧 1/4 大小。提高B帧的数量可以提高压缩比,但是会提高编解码的耗时。实时通讯中B帧不能太多,云服务中可以很多。

/image%201.png

解码顺序:I帧是帧内压缩,不参考其他帧 → P帧依赖前面紧邻的I帧 → B帧依赖前面和后面的I/P帧

播放顺序:I → B → P → B → …

SPS (Sequence Parameter Set)序列参数集:位于GOP的头部(IDR帧之前),表征GOP中每一帧的序列特性

  • seq_parameter_set_id
  • 帧数
  • POC(picture order count)的约束
  • 参考帧数目
  • 解码图像尺寸
  • 帧长编码模式选择标识等

PPS(Picture Parameter Set)图像参数集:位于GOP的头部(IDR帧之前),表征GOP中每一帧的图片特性

  • pic_parameter_set_id
  • 熵编码模式选择标识(无损压缩)
  • 片组数目
  • 初始量化参数
  • 去方块滤波洗漱调整标识等

H264压缩技术

帧内压缩:解决空(间)域数据冗余问题

帧间压缩:解决时(间)域数据冗余问题

整数离散余弦变换(DCT),将空间上的相关性变为频域上无关的数据然后进行量化

CABAC压缩(老)

有损压缩

  • 帧内:DCT/整数DCT + 量化 + 熵编码(解决空间冗余)。
  • 帧间:运动估计 + 残差变换/量化(解决时间冗余)。

无损压缩

  • 预测编码:如DPCM、线性预测(FLAC)。
  • 熵编码:如霍夫曼、算术编码(CABAC压缩)、LZ77(ZIP/PNG)、VLC压缩

宏块

宏块是视频压缩操作的基本单元

H.265/HEVC:用编码树单元(CTU)替代宏块,支持更大块(如64×64)和更灵活的划分

16x16 8x16 16x8 8x8

宏块大 → 运动预测和数据头开销减少 → 压缩比提升,但细节丢失风险增加

宏块小 → 运动预测更精确且残差数据更少 → 细节保留更好,但压缩比可能降低(因运动向量增多)

帧内压缩

针对I帧

理论基础:

  • 相邻像素差别不大,所以可以进行宏块预测
  • 人眼对亮度的敏感度超过色度
  • YUV很容易将亮度和色度分开

帧内预测:H264 9种模式,将亮度块和色度块分开预测

/image%202.png

预测模式信息+残差值压缩

帧间压缩

运动估计:宏块匹配 → 运动矢量

运动补偿:残差值 Residual

宏块匹配算法:

  • 三步搜索、四步搜索
  • 二维对数搜索
  • 钻石搜索

花屏:部分帧丢失

卡顿:当有帧丢失时,丢失GOP内所有帧,显示前一个I帧,直到下一个IDR帧

/image%203.png

H264标准支持:https://en.wikipedia.org/wiki/Advanced_Video_Coding

H264码流

码流分层

  • NAL层:Netword Abstraction Layer,视频数据网络抽象层。

    NAL层是视频编码与网络传输之间的适配层,即使底层用TCP,仍需NAL解决视频特有的问题(如帧划分、参数集管理)。而在UDP场景下,NAL层的设计更是不可或缺。

VLC层:Video Coding Layer,视频数据编码层

/image%204.png

一般情况下:一个slice对应一个图像

SODB(String of Data Bits):原始数据比特流,二进制数据,不一定是8的倍数,由VCL层产生的,需要补齐。

RBSP(Raw Byte Sequence Payload)

补齐为8的倍数,补1和多个0

NALU

NAL Header(1 Byte) + RBSP

/image%205.png

/image%206.png

Annexb格式:用于本地文件存储

RTP格式:用于直播推流

/image%207.png

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

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

相关文章

6.2 内容生成与营销:个性化内容创作与营销策略优化

随着消费者对个性化体验的需求日益增长,传统的内容创作与营销方式已难以满足市场竞争的需要。基于大语言模型(LLM)与智能代理(Agent)的技术为企业提供了全新的解决方案,能够实现高效、精准、规模化的内容生…

kafka课后总结

Kafka是由LinkedIn开发的分布式发布 - 订阅消息系统,具备高吞吐量、低延迟、可扩展性、持久性、可靠性、容错性和高并发等特性。其主要角色包括Broker、Topic、Partition、Producer、Consumer、Consumer Group、replica、leader、follower和controller。消息系统中存…

DataStreamAPI实践原理——计算模型

引入 通过前面我们对于Flink的理解,我们知道它吸收了 Dataflow 的理念,以及此前已有的流处理系统(如 S4、Storm、MillWheel)的经验,实现了批流一体化的高效数据处理,并且通过灵活的窗口机制、事件时间与水…

项目笔记1:通用 Service的常见方法

通用 Service 通常封装了常见的业务逻辑操作,以提高代码的复用性和可维护性。不同的框架和业务场景下,通用 Service 的方法会有所差异,但一般都会包含一些基本的增删改查(CRUD)操作,以下为你详细介绍&#…

阿里云99机器总是宕机,实测还是磁盘性能差

阿里云99计划总是宕机,经过反复排查,最终确认还是磁盘性能差。 阿里云99机器使用的磁盘类型是Entry云盘40GiB (2120 IOPS) 按照官方的一些数据,这个磁盘最小iops是1800最大是6000,实际使用中发现,这个6000值很虚,这个…

Fedora 43 计划移除所有 GNOME X11 相关软件包

Fedora 43 计划移除所有 GNOME X11 相关软件包,这是 Fedora 项目团队为全面拥抱 Wayland 所做的重要决策。以下是关于此计划的详细介绍: 提案内容:4 月 23 日,Neal Gompa 提交提案,建议从 Fedora 软件仓库中移除所有 G…

魔幻预言手游》:职业介绍!

在《魔幻预言》手游中,共有武玄、魔魅、剑仙三大核心职业,各具特色且定位鲜明,以下为具体介绍: 一、武玄(战士) 核心定位:近战物理输出与团队增益担当,兼具控制与防御能力。 战斗风…

精益数据分析(27/126):剖析用户价值与商业模式拼图

精益数据分析(27/126):剖析用户价值与商业模式拼图 在创业和数据分析的领域中,每一次深入学习都是一次成长的契机。今天,我们继续秉持共同进步的理念,深入研读《精益数据分析》,剖析用户价值的…

【SwitchyOmega安装教程】

目录 一、插件安装 1. 下载安装文件 2. 打开浏览器扩展安装页面 3. 安装插件 二、界面详情 三、配置信息 3.1 设置IP 1、查看IP地址信息 2、批量测试IP是否有效 3、点击扩展程序,选择 Proxy SwitchyOmega 4、 点击选项进行配置 5、配置页面 一、插件安装 1…

矫平机终极指南:特殊材料处理、工艺链协同与全球供应链管理

一、特殊材料矫平:挑战与创新解决方案 1. 高温合金(如Inconel 718)处理 技术难点: 屈服强度高达1100 MPa,传统矫平力不足 高温下易氧化,需惰性气体保护环境 解决方案: 采用双伺服电机驱动&a…

反事实——AI与思维模型【82】

一、定义 反事实思维模型是一种心理认知模型,它指的是人们在头脑中对已经发生的事件进行否定,然后构建出一种可能性假设的思维活动。简单来说,就是思考“如果当时……,那么就会……”的情景。这种思维方式让我们能够超越现实的限制,设想不同的可能性和结果,从而对过去的…

Nginx:支持 HTTPS

文章目录 Nginx 开启 ssl 以支持 HTTPS1 生成本地证书2 开启 ssl 以支持 HTTPS3 将 https 的请求转发给 http 最终的 nginx.conf 如下 Nginx 开启 ssl 以支持 HTTPS [!IMPORTANT] 在下文中,将采用如下定义。 HTTP端口: 80 HTTPS端口: 443 服务…

[计算机科学#2]:从继电器到晶体管的电子计算机发展史(庞然大物的进化)

【核知坊】:释放青春想象,码动全新视野。 我们希望使用精简的信息传达知识的骨架,启发创造者开启创造之路!!! 内容摘要:本文讲述了20世纪初至1950年代计算机技术的发展历程…

【ESP32S3】Cache 框图和操作

ESP32-S3 采用双核共享 ICache (指令缓存) 和 DCache (数据缓存) 结构,如下图所示。以便当 CPU 的指令总线和数据总线同时发起请求时,也可以迅速响应: Cache 的存储空间与内部存储空间可以复用。具体为 Internal SRAM0…

wireshark从HEX转储导入使用方法

官方资料: https://www.wireshark.org/docs/wsug_html_chunked/ChIOImportSection.html 方法1: 文本文件,纯内容导入: ff ff ff ff ff ff 00 00 00 00 5f 0f 08 06 00 01 08 00 06 04 00 01 00 00 00 00 5f 0f 64 01 60 10 00 00 00 00 00 00 64 01 01…

【Android】四大组件之Activity

目录 一、什么是Activity 二、如何创建和配置Activity 三、Activity 跳转与数据传递 四、数据保存与恢复 五、Activity 启动模式 六、自定义返回行为 七、复杂界面布局 你可以把Activity想象成手机屏幕上的一个“页面”。比如,当你打开一个App时,…

uml类关系(实现、继承,聚合、组合,依赖、关联)

drawio和EA是架构设计时经常使用的画图工具。 drawio学习门槛低,使用灵活,但是功能仅仅限于画图。 EA学习门槛高,但是功能更加的丰富: ①在画图方面,EA严格满足UML标准,EA中的图和类是关联的&#xff0c…

C++如何设计线程池(thread pool)来提高线程的复用率,减少线程创建和销毁的开销

线程池的基本概念与多线程编程中的角色 线程池,顾名思义,是一种管理和复用线程的资源池。它的核心思想在于预先创建一定数量的线程,并将这些线程保持在空闲状态,等待任务的分配。一旦有任务需要执行,线程池会从池中取出…

React.memo 和 useMemo

现象 React 中,通常父组件的某个state发生改变,会引起父组件的重新渲染(和其他state的重新计算),从而会导致子组件的重新渲染(和其他非相关属性的重新计算) 问题一:如何避免因为某个…

防火墙技术深度解析:从包过滤到云原生防火墙的部署与实战

防火墙技术深度解析:从包过滤到云原生防火墙的部署与实战 在网络安全防御体系中,防火墙是第一道物理屏障,承担着“网络流量守门人”的核心角色。从早期基于IP地址的包过滤设备到如今集成AI威胁检测的云原生防火墙,其技术演进始终…