从 H.264 比特流中提取运动矢量 [关闭]

Posted

技术标签:

【中文标题】从 H.264 比特流中提取运动矢量 [关闭]【英文标题】:Extraction motion vectors from H.264 bitstream [closed] 【发布时间】:2015-07-22 07:21:57 【问题描述】:

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

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:

如果有任何示例代码或提示,我将不胜感激。

【问题讨论】:

寻求教程、工具和库对于 Stack Overflow 来说是题外话(请参阅 help center)。另请注意,ffplay source code 已获得 LGPL 许可,并且可用。 他还要求提供代码/指导,因此提供一些代码示例会更有帮助。 【参考方案1】:

codecview 视频过滤器的源代码是here,是你要找的吗?

[编辑] 抱歉,我想这不是很有帮助。您正在寻找的函数是filter_frame(),它向您展示了如何从给定的 AVFrame 读取 AVMotionVectors(作为辅助数据),这是您的命令行示例中使用的代码。此示例调用 draw_arrow(),但您可以简单地将其替换为调用 printf() 或一些将 MV 信息记录到您选择的日志文件的自定义函数。

【讨论】:

您好,您能否提供更多关于我们如何在 MATLAB 中使用 AVMotionVectors 的详细信息。您的回答确实给出了一些提示,但我被阻止使用。如何在 Matlab 中得到这个。网上关于这方面的信息很少。 我想问一个更详细的新问题,我不知道你想如何在 matlab 中输入数据,或者你到底被什么阻止了。

以上是关于从 H.264 比特流中提取运动矢量 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

H.264码流打包分析

在ffmpeg H.264解码器中修改运动向量

H.264码流与帧结构

x264 里面的sps pps 是啥意思

从通用视频编码中提取运动矢量

Codecs系列H.264 Direct与H.265 Merge的前世今生