FFmpeg 4.3 音视频-多路H265监控录放C++开发十三:将AVFrame转换成AVPacket。视频编码,AVPacket 重要函数,结构体成员学习

前提:

从前面的学习我们知道 AVFrame中是最原始的 视频数据,这一节开始我们需要将这个最原始的视频数据 压缩成 AVPacket数据,

我们前面,将YUV数据或者 RGBA 数据装进入了 AVFrame里面,并且在SDL中显示。

也就是说:对于安防项目来说,我们将原始从摄像头数据(YUV,RGB)转换成 AVFrame后,可以直接显示出来。但是如果我们将要数据存储,则要将 AVFrame转成 AVPacket.

视频编码 以及原理

从摄像头得到原始数据 ---- > 像素格式转换---->编码------>封装

编码的原因很好理解,YUV数据太大了,我们要编码成 h264,h265 等较小的格式

背后的原理是这样,一个YUV视频是由一张一张YUV图片组成的。

帧内压缩:

我们将一张YUV图片,假设是 1280x728大小的,我们将其划分成16x16的大小,总有一些像素点是一样的,或者接近的,例如下图:

帧间压缩:

假设上述图片是YUV 的第一张图片,第二帧图片是师爷 在讲话,那么第二帧图片可能只是嘴巴变化了一下,那么我们参考第一张图片,去存储第二张图片,就只用存储第二章图片 和 第一张图片不同的地方就好。。在还原的时候,参考第一张图片和差异,通过算法还原,这就叫做帧间压缩

我们这一节将 AVFrame转成 AVPacket,实际上就是编码的过程,

AVPacket 重要函数以及重要结构体成员

https://blog.csdn.net/hunandede/article/details/143625317?sharetype=blogdetail&sharerId=143625317&sharerefer=PC&sharesource=hunandede&spm=1011.2480.3001.8118

相关推荐
天赐学c语言12 分钟前
12.20 - 反转链表II && 传值和传地址的区别
数据结构·c++·算法·链表·leecode
_OP_CHEN14 分钟前
【算法基础篇】(三十六)图论基础之拓扑排序:从原理到实战,搞定 DAG 图的 “先后次序” 难题
c++·算法·蓝桥杯·图论·拓扑排序·算法竞赛·acm/icpc
郝学胜-神的一滴24 分钟前
使用EBO绘制图形:解锁高效渲染与内存节省之道
c++·qt·游戏·设计模式·系统架构·图形渲染
!停27 分钟前
数据在内存中的存储(2)
开发语言·c++·算法
量子炒饭大师32 分钟前
Cyber骇客的LIFO深渊与FIFO管道 ——【初阶数据结构与算法】栈与队列
c语言·数据结构·c++·链表
程序猿追1 小时前
在昇腾NPU上实战部署LongCat-Video:从环境配置到长视频生成的完整指南
python·大模型·华为云·音视频
Joy-鬼魅1 小时前
vs调试器设置解决创建共享内存返回错误码5的问题
c++·microsoft·createfilemap·vc
Yutengii1 小时前
小红书的视频怎么下载到本地,实测6款下载工具
音视频
Emilia486.1 小时前
C++ 类与对象:解锁面向对象编程的核心密码(中)
开发语言·c++
非凡ghost1 小时前
Topaz Video(人工智能视频增强软件)
人工智能·windows·学习·音视频·软件需求