gpt4 book ai didi

c - 扩展 ffmpeg extract_mvs.c 示例

转载 作者:太空宇宙 更新时间:2023-11-03 23:47:03 25 4
gpt4 key购买 nike

我使用 ffmpeg 通过示例文档 extract_mvs.c 提取运动 vector 。问题是这段代码似乎只提供了一些信息:帧编号、宏 block 大小、源( future 或过去)、源(x 和 y)和目标(x 和 y)。

不幸的是,这并没有说明来源来自过去或 future 的哪个框架(它可能来自两者,来自过去或 future 的几个)。它也没有说明宏 block 类型是什么(它告诉类似有用的信息)。例如,如果源(x 和 y)等于目标(x 和 y),则无法判断该信息是否与上一帧相同,或者是否输入了全新的信息。

请参阅 extract_mvs.c 中的第 60-63 行ffmpeg 中的代码

最后一个问题是,对于 MP4,运动 vector 通常具有四分之一像素分辨率,这里给出的分辨率显然四舍五入到最接近的整数。我应该如何在四舍五入之前提取“真实”运动 vector 信息?

最佳答案

来源( future 或过去)基于方向参数给 add_mb() 的相对帧引用,但我不确定该逻辑如何构成:

mb->source = direction ? 1 : -1;

在 libavutil/motion_vector.h 中有一条评论,XXX:设置精确的相对引用帧引用而不是 +/- 1“方向”,所以它看起来像是补丁创建者 Unresolved 已知 TODO。 direction的值来自ff_print_debug_info2()调用 add_mb() 的地方。

至于四分之一像素,我认为这也在 ff_print_debug_info2() 中,但我对 motion_val 的了解还不够多,无法说明它的含义:

        const int shift = 1 + quarter_sample;
...
int mx = (motion_val[direction][xy][0]>>shift) + sx;
int my = (motion_val[direction][xy][1]>>shift) + sy;

initial commit显示了这个运动 vector 代码的所有主要部分。希望这能让您朝着正确的方向前进(没有双关语意)。

关于c - 扩展 ffmpeg extract_mvs.c 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30175222/

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