我正在寻找一个开源工具/代码或一些指导来提取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:
我很感激任何示例代码或提示。
答案 0 :(得分:8)
codecview视频过滤器的源代码是here,这是您正在寻找的内容吗?
[编辑]抱歉,我认为这并不是非常有用。您正在寻找的功能是filter_frame(),它向您展示如何从给定的AVFrame中读取AVMotionVectors(作为旁边数据),这是您的命令行示例中使用的代码。这个例子调用draw_arrow(),但你可以简单地用printf()调用或者将MV信息记录到你选择的日志文件中的一些自定义函数来替换它。