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 ,宏块怎么划分是不固定的有大有小,一帧图片被划分为多个宏块.

相关推荐
zslefour2 小时前
使用ffmpeg遍历获取音频文件相关信息
ffmpeg
Android系统攻城狮5 小时前
Linux FFmpeg深度解析之avcodec_parameters_from_context调用流程与实战(十六)
linux·运维·ffmpeg·音视频进阶·ffmpeg音视频·车载音视频进阶
Android系统攻城狮6 小时前
Linux FFmpeg深度解析之avcodec_alloc_context3调用流程与实战(十四)
linux·运维·ffmpeg·车载音视频·音视频进阶·ffmpeg音视频进阶
菜鸟小芯7 小时前
【Quectel Pi M2 实战】Day3 USB 摄像头图像采集:拍照、录像与踩坑记录(V4L2 + FFmpeg)
ffmpeg·嵌入式
Android系统攻城狮1 天前
Linux FFmpeg深度解析之av_dump_format调用流程与实战(十一)
linux·运维·服务器·ffmpeg·1024程序员节·音视频进阶
Android系统攻城狮1 天前
Linux FFmpeg深度解析之avcodec_find_decoder调用流程与实战(十二)
linux·运维·服务器·ffmpeg·1024程序员节·音视频进阶
Hommy881 天前
【直播切片工作台】第23章:媒体探测与转码:ffprobe 与 ffmpeg 封装
人工智能·ffmpeg·直播切片
码匠许师傅1 天前
【C++三方组件】FFmpeg:音视频处理的瑞士军刀
c++·ffmpeg·音视频
全栈探索者2 天前
从素材到成片:ffmpeg 拼接、转码与字幕,一条流水线交付
macos·ffmpeg·aigc·comfyui·视频剪辑
扶尔魔ocy2 天前
【QT+FFmpeg】知识点编目及传送门
qt·ffmpeg