gpt4 book ai didi

video - ffmpeg - 使用 -debug mb_type 命令检索视频宏 block 信息

转载 作者:行者123 更新时间:2023-12-04 22:46:17 27 4
gpt4 key购买 nike

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

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

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

我看到在许多无趣的写作之后,开始了一组以

开头的 block

"New frame, type: [FRAME TYPE]"

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

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

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

  • 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 开始。我不会在这里重复所有内容,足以理解上面给出的示例行。

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

  1. 类型和运动矢量方向

    • d:IS_DIRECT && IS_SKIP
    • <: !USES_LIST(0) - 对 future 的引用(列表 1,B 切片)
    • X:USES_LIST(0) && USES_LIST(1) - 引用过去和 future (列表 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 itself .

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

关于video - ffmpeg - 使用 -debug mb_type 命令检索视频宏 block 信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50863852/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com