2015-07-22 149 views
5

我正在寻找一种开源工具/代码或一些指导来提取H.264编码比特序列的运动矢量(MV)。我已经知道,运动向量可使用的ffmpeg用下面的命令被可视化:从H.264比特流提取运动矢量

ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv=pf+bf+bb

然而,我希望产生其中P和B帧的MV是由帧列出帧的日志文件。我从libavutil/motion_vector.h中检出了MV的结构,但是我找不到一个例子显示它们是如何被ffplay提取并放置在原始序列上的。我认为,如果我能找到答案,我可能会重新安排代码以将MV提取到文本文件。

我也试过在this answer给出的代码,但它似乎并没有与ffmpeg的较新版本的工作:

我将不胜感激任何例子代码或提示。

+0

寻求教程,工具和库对于Stack Overflow而言是无关紧要的(参见[help])。另请注意,[ffplay源代码](https://www.ffmpeg.org/doxygen/trunk/ffplay_8c-source.html)已获得LGPL许可,并且可用。 –

+2

他还要求提供代码/指导,所以更有用的操作应该是提供一些代码示例。 – Luca

回答

8

codecview视频过滤器的源代码是here,那是你在找什么?

对不起,我猜这不是非常有帮助。您正在寻找的功能是filter_frame(),它向您展示了如何从给定的AVFrame中读取AVMotionVectors(作为边数据),这是您的命令行示例中使用的代码。这个例子调用draw_arrow(),但你可以简单地用printf()或一些自定义函数来替换它,这些函数会将MV信息记录到你选择的日志文件中。

+0

嗨,请给我一些关于如何在MATLAB中使用AVMotionVectors的更多细节。您的答案确实提供了一些提示,但我被阻止使用。如何在Matlab中得到这个。关于这方面的信息很少。 –

+0

我会问一个更详细的新问题,我不知道你想如何在matlab中输入数据,或者你准确地阻止了什么。 –