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

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

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

编码前数据;

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

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-06 20:52:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-06 20:52:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-06 20:52:03       87 阅读
  4. Python语言-面向对象

    2024-06-06 20:52:03       96 阅读

热门阅读

  1. 从list的模拟实现中了解迭代器的设计方式

    2024-06-06 20:52:03       38 阅读
  2. PHP面向对象编程总结

    2024-06-06 20:52:03       29 阅读
  3. 【ES】docker安装ES7.14.0+es-head

    2024-06-06 20:52:03       28 阅读
  4. 22data-脚本 6.18-6.21

    2024-06-06 20:52:03       29 阅读
  5. 分享一款提取抖音小店商家电话的软件使用教程

    2024-06-06 20:52:03       117 阅读
  6. Elasticsearch REST API 初探:索引与搜索文档的奥秘

    2024-06-06 20:52:03       27 阅读
  7. C++ Primer Chapter 7 Classes

    2024-06-06 20:52:03       32 阅读
  8. c++序列化和反序列化简单demo

    2024-06-06 20:52:03       33 阅读
  9. 我的名字叫大数据:第5章 我如何思考?

    2024-06-06 20:52:03       25 阅读
  10. 代码随想三刷数组篇

    2024-06-06 20:52:03       28 阅读
  11. C++知识点总结(36):二分进阶练习

    2024-06-06 20:52:03       28 阅读
  12. python中的requirements.txt文件用法

    2024-06-06 20:52:03       28 阅读