首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展ffmpeg extract_mvs.c示例

扩展ffmpeg extract_mvs.c示例
EN

Stack Overflow用户
提问于 2015-05-11 18:41:29
回答 1查看 1.4K关注 0票数 2

我使用ffmpeg来使用示例doc extract_mvs.c提取运动矢量。问题是,这段代码似乎只提供了一些信息:帧号、宏块大小、源(未来或过去)、源(x和y)和目标(x和y)。

不幸的是,这并没有说明源源来自哪个框架(它可以来自于过去或将来的两个部分)。它也没有说明宏块类型是什么(这也说明了同样有用的信息)。例如,如果Source (x和y)等于目标(x和y),则无法判断该信息是否与最后一个帧相同,或者是否输入了全新的信息。

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

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

EN

回答 1

Stack Overflow用户

发布于 2015-05-21 02:44:15

源(将来或过去)是基于add_mb()的方向参数给出的相对帧引用,但我不知道如何处理逻辑:

代码语言:javascript
复制
mb->source = direction ? 1 : -1;

在libavutil/motion_vector.h中有一个注释XXX:设置确切的相对参考帧引用,而不是一个+/- 1的“方向”,所以它看起来就像补丁的创建者没有解决的已知TODO。方向的值来自调用info2() ()的add_mb()。

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

代码语言:javascript
复制
        const int shift = 1 + quarter_sample;
...
                      int mx = (motion_val[direction][xy][0]>>shift) + sx;
                      int my = (motion_val[direction][xy][1]>>shift) + sy;

初始提交显示了这个运动矢量代码的所有主要部分。希望这能让你朝着正确的方向前进(没有双关的意思)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30175222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档