ffmpeg编码器编码元数据的过程以及编码前后的差异

编码方式为avcodec_send_frame:将原始帧发送到编码器进行编码

编码过程完成于avcodec_receive_packet:从编码器接收编码后的压缩数据,也就是说已经编码压缩完成了,并存储到avpacket中,此时元数据被分割成多个NALU单元,并按照H.264规范封装成码流,码流可以用AVPacket *pkt的指针进行访问,如pkt->data

在H.264编码中,编码器会将一帧图像分割成若干宏块,符号每个宏块进行帧间/帧内预测、变换、量化等操作,最终生成编码数据。这些编码数据通常会被分割成多个NALU单元,并按照H.264规范封装成码流。因此,一个像素点数据不会单独编码成一个NALU,而是被整合到宏块中,并与其他宏块一起编码成多个NALU单元。

cpp 复制代码
编码前数据;

Y平面
0 1 2 3 1 2 3 4 2 3 4 5 3 4 5 6 分别对应1~16号像素点的Y数值

U平面
128 129  
129 130
//128对应左上角四个像素点的U值,同理

V平面
64 69
65 70


编码后数据(H.264 NALU结构):
00 00 00 01 67 ... 00 00 00 01 68 ... 00 00 00 01 65 ...

由此可见,十六个像素点被划分成了三个NALU ,宏块怎么划分是不固定的有大有小,一帧图片被划分为多个宏块.

相关推荐
Android系统攻城狮8 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
小豆庄2 天前
测试视频里的人脸车牌敏感信息自动化脱敏方案
计算机视觉·目标跟踪·ffmpeg·音视频·边缘计算·视频·敏捷流程
Android系统攻城狮3 天前
Linux FFmpeg深度解析之avcodec_default_get_encode_buffer调用流程与实战(二十八)
linux·运维·服务器·ffmpeg·车载音视频·ffmpeg音视频
小豆庄4 天前
监控视频脱敏的追踪漂移与ID撞号陷阱
目标跟踪·ffmpeg·音视频·视频·敏捷流程
Android系统攻城狮4 天前
Linux FFmpeg深度解析之avcodec_parameters_copy调用流程与实战(二十五)
linux·运维·服务器·ffmpeg·音视频·车载音频
FlightYe5 天前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频
Android系统攻城狮5 天前
Linux FFmpeg深度解析之avcodec_default_get_buffer2调用流程与实战(二十)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
Android系统攻城狮5 天前
Linux FFmpeg深度解析之av_parser_init调用流程与实战(二十一)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
Android系统攻城狮6 天前
Linux FFmpeg深度解析之avcodec_flush_buffers调用流程与实战(十九)
linux·运维·服务器·ffmpeg·车载音视频·ffmpeg音视频进阶
重生之我是萧炎6 天前
ffmpeg官方下载安装教程(提供安装包)
ffmpeg