【问题标题】:ffmpeg - Retrieving video macroblock info with -debug mb_type commandffmpeg - 使用 -debug mb_type 命令检索视频宏块信息
【发布时间】:2018-11-24 14:34:13
【问题描述】:

我正在尝试获取有关视频 (mp4) 帧中所有 宏块 的信息。 特别是我正在使用 ffmpeg 命令:

ffmpeg -debug mb_type -i input.mp4 out.mp4 2> macroblocks.txt

似乎工作正常,但是...我不明白如何解析输出

我看到在写了很多无趣的文章之后,开始了一组以

开头的block

“新框架,类型:[FRAME TYPE]”

所以我假设这些块是指包含每个宏块类型的每个帧的块。但是里面的符号是什么意思?

新建框架,输入:B [h264@000001c0241c1cc0] d > > X d d d d d d X d X d d X d > > d d+ d

从理论上我知道存在帧内或预测宏块,但我不明白如何从“新帧”块中解析这些信息。

  • i、I、A、、X、|等是什么意思?

也经常有像

这样的句子

nal_unit_type:1(非IDR图片的编码切片),nal_ref_idc:2

cur_dts 无效(如果在开始时出现一次,这是无害的 每个流)

我真的不明白... 我也找不到文档.. 谁能帮帮我?

【问题讨论】:

    标签: video ffmpeg frame mpeg ffprobe


    【解决方案1】:

    最好的文档似乎是源代码,目前从line 196 of libavcodec/mpegutils.c 开始。我不会在这里复制所有内容,仅足以理解上面给出的示例行。

    每个宏块由 3 个字符描述:

    1. 类型和运动矢量方向

      • d:IS_DIRECT && IS_SKIP
      • <:>!USES_LIST(0) - 对未来的引用(列表 1,B 切片)
      • X:USES_LIST(0) &amp;&amp; USES_LIST(1) - 参考过去和未来(列表 1 和 2,B 切片)
      • >: !USES_LIST(1) - 引用过去(列表 0、P 或 B 切片)
      • 更多内容见代码
    2. 细分

      • +:IS_8X8
      • -:IS_16X8
      • |:IS_8X16
      • 空格:IS_INTRA || IS_16X16
      • ?: 否则
    3. 交错

      • =: IS_INTERLACED
      • 空格:不交错

    macro block type visualization built into ffmpeg itselfmacro block type visualization built into ffmpeg itself.

    有关 NAL 单元类型,请参阅 table 7-1 here

    【讨论】:

    • 好的,我会阅读代码。另一个问题:你知道为什么在 ffmpeg 返回的报告中,每一帧都有不同数量的关联“字符”(就像它们有不同数量的宏块,但我相信这应该是不可能的)
    • @fabridigua 一些块被细分为 8x8 甚至 4x4 块,因此可能有更多基于此的字符,也许?
    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 2019-09-03
    • 2022-12-28
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    相关资源
    最近更新 更多