ffmpeg - 使用 -debug mb_type 命令检索视频宏块信息
ffmpeg - Retrieving video macroblock info with -debug mb_type command
我正在尝试获取有关视频帧 (mp4) 中所有 宏块 的信息。
特别是我正在使用 ffmpeg 命令:
ffmpeg -debug mb_type -i input.mp4 out.mp4 2> macroblocks.txt
它似乎工作正常,但是...我不明白如何解析输出!
看了很多无趣的写法,开始了一组
开头的block
"New frame, type: [FRAME TYPE]"
所以我假设这些是指包含每个宏块类型的每个帧的块..但是里面的符号是什么意思?
New frame, type: B [h264 @ 000001c0241c1cc0] d < X- < I > > > >
X d 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
从理论上我知道有内部或预测的宏块,但我不明白如何从 "New frame" 块中解析此信息。
- i、I、A、<、>、X、|等是什么意思?
也经常有
这样的句子
nal_unit_type: 1(Coded slice of a non-IDR picture), nal_ref_idc: 2
或
cur_dts is invalid (this is harmless if it occurs once at the start
per stream)
我真的不明白...
我找不到 文档..
谁能帮帮我?
最好的文档似乎是源代码,目前从 line 196 of libavcodec/mpegutils.c 开始。我不会在这里重复所有内容,仅足以理解上面给出的示例行。
每个宏块由 3 个字符描述:
类型和运动矢量方向
- d:
IS_DIRECT && IS_SKIP
- <:
!USES_LIST(0)
- 对未来的引用(列表 1,B 切片)
- X:
USES_LIST(0) && USES_LIST(1)
- 参考过去和未来(清单 1 和 2,B 部分)
- >:
!USES_LIST(1)
- 参考过去(列表 0、P 或 B 片段)
- 更多请看代码
分段
- +:
IS_8X8
- -:
IS_16X8
- |:
IS_8X16
- space:
IS_INTRA || IS_16X16
- ?: 否则
隔行扫描
- =:
IS_INTERLACED
- space: 非交错
在这方面也很有趣的是 macro block type visualization built into ffmpeg itself。
对于 NAL 单元类型,请参阅 table 7-1 here。
我正在尝试获取有关视频帧 (mp4) 中所有 宏块 的信息。 特别是我正在使用 ffmpeg 命令:
ffmpeg -debug mb_type -i input.mp4 out.mp4 2> macroblocks.txt
它似乎工作正常,但是...我不明白如何解析输出!
看了很多无趣的写法,开始了一组
开头的block"New frame, type: [FRAME TYPE]"
所以我假设这些是指包含每个宏块类型的每个帧的块..但是里面的符号是什么意思?
New frame, type: B [h264 @ 000001c0241c1cc0] d < X- < I > > > > X d 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
从理论上我知道有内部或预测的宏块,但我不明白如何从 "New frame" 块中解析此信息。
- i、I、A、<、>、X、|等是什么意思?
也经常有
这样的句子nal_unit_type: 1(Coded slice of a non-IDR picture), nal_ref_idc: 2
或
cur_dts is invalid (this is harmless if it occurs once at the start per stream)
我真的不明白... 我找不到 文档.. 谁能帮帮我?
最好的文档似乎是源代码,目前从 line 196 of libavcodec/mpegutils.c 开始。我不会在这里重复所有内容,仅足以理解上面给出的示例行。
每个宏块由 3 个字符描述:
类型和运动矢量方向
- d:
IS_DIRECT && IS_SKIP
- <:
!USES_LIST(0)
- 对未来的引用(列表 1,B 切片) - X:
USES_LIST(0) && USES_LIST(1)
- 参考过去和未来(清单 1 和 2,B 部分) - >:
!USES_LIST(1)
- 参考过去(列表 0、P 或 B 片段) - 更多请看代码
- d:
分段
- +:
IS_8X8
- -:
IS_16X8
- |:
IS_8X16
- space:
IS_INTRA || IS_16X16
- ?: 否则
- +:
隔行扫描
- =:
IS_INTERLACED
- space: 非交错
- =:
在这方面也很有趣的是 macro block type visualization built into ffmpeg itself。
对于 NAL 单元类型,请参阅 table 7-1 here。