利用FFmpeg简单分析帧类型

本文介绍如何利用FFmpeg分析H264文件中的帧类型,包括I帧、P帧和B帧。内容涉及网络抽象层、视频编码层的概念,以及通过av_read_frame方法获取帧数据,通过NAL单元类型和Slice Header的Slice_type确定帧类型。
摘要由CSDN通过智能技术生成

原因:由于看了一个区分帧类型的博客,故在此编写测试程序进行验证。

概述:H264文件包含网络抽象层和视频编码层(VCL),网络抽象层负责按照特定格式化数据用于传输,视频编码层主要包含视频数据的内容,而视频编码层中又可以包含VCL类型(如I,P,B)和非VCL类型(如pps,sps),VCL类型中包含slice切片,而每个slice切片都包含head和body,通过head可以得知帧类型。

分析:通过FFmpeg提供的av_read_frame方法可知,每次调用都会获取一个完整帧,比如:第一次读取将会获得数据包含sps,pps和i帧,由于I帧数据一般较大故有可能存放在多个nalu中,故可以看到第一帧数据中将会包含多个起始字节(00 00 00 01)。此

通过上图可知根据nal_unit_type获得NAL类型,该类型分为(1-5)编码层和非编码层.如下:

通过判断是编码层数据则可以通过Slice Header中的Slice_type获取出对应的帧类型,帧类型验证流程如下:

利用FFmpeg命令行创建一个既包含IDR也包含I帧的264文件命令行如下:


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值