我正在尝试获取有关视频帧(mp4)中所有宏块的信息。 特别是我使用 ffmpeg 命令:
ffmpeg -debug mb_type -i input.mp4 out.mp4 2> macroblocks.txt
它似乎工作正常,但是......我不明白如何解析输出!
我看到在许多不感兴趣的着作之后,从
开始一组块"新框架,键入:[框架类型]"
所以我假设这些是指每个包含每个宏块类型的帧的块..但是里面的符号是什么意思?
新帧,类型:B [h264 @ 000001c0241c1cc0] d< X-<我> > > > X d d d d< < d< d> < d d> d< d d d< > < d< > X< d d> d X d< > d X d> > d d + d
从理论上我知道有内部或预测的宏块,但我不明白如何从"新框架" -blocks中解析这些信息。
通常还会有像
这样的句子nal_unit_type:1(非IDR图片的编码切片),nal_ref_idc:2
或
cur_dts无效(如果它在开始时出现一次,则无害 每个流)
我真的不明白...... 我也找不到文档 .. 任何人都可以帮助我吗?
答案 0 :(得分:2)
最好的文档似乎是源代码,目前从line 196 of libavcodec/mpegutils.c开始。我不会在这里重复所有内容,只是足以理解上面给出的示例行。
每个宏块由3个字符描述:
类型和运动矢量方向
IS_DIRECT && IS_SKIP
!USES_LIST(0)
- 对未来的参考(列表1,B切片)USES_LIST(0) && USES_LIST(1)
- 参考过去和未来(列表1& 2,B切片)!USES_LIST(1)
- 参考过去(列表0,P或B切片)分割
IS_8X8
IS_16X8
IS_8X16
IS_INTRA || IS_16X16
隔行扫描
IS_INTERLACED
此问题的另一个有趣之处是macro block type visualization built into ffmpeg itself。
对于NAL单位类型,请参阅table 7-1 here。