使用ffmpeg/libavcodec从x265(HEVC)编码视频中提取运动矢量?

使用ffmpeg/libavcodec从x265(HEVC)编码视频中提取运动矢量?,ffmpeg,h.264,libavcodec,libx265,Ffmpeg,H.264,Libavcodec,Libx265,我知道,通过首先设置标志,可以从h264编码的via中提取运动矢量 av_dict_set(&opts, "flags2", "+export_mvs", 0); 然后,您可以通过执行此操作来查询运动向量的边数据 sd = av_frame_get_side_data(frame, AV_FRAME_DATA_MOTION_VECTORS); 当我在网上查看是否可以对HEVC编码的视频执行类似操作时,我找不到任何信息。我所发现的只是“AV帧数据运动向量”的定义 某些编解码器导出的运动

我知道,通过首先设置标志,可以从h264编码的via中提取运动矢量

av_dict_set(&opts, "flags2", "+export_mvs", 0);
然后,您可以通过执行此操作来查询运动向量的边数据

sd = av_frame_get_side_data(frame, AV_FRAME_DATA_MOTION_VECTORS);
当我在网上查看是否可以对HEVC编码的视频执行类似操作时,我找不到任何信息。我所发现的只是“AV帧数据运动向量”的定义

某些编解码器导出的运动矢量(通过 导出\u在libavcodec AVCodecContext flags2选项中设置的mvs标志)

数据是中定义的AVMotionVector结构 libavutil/motion_vector.h


但并没有关于哪个编解码器输出这种运动矢量信息的确切信息。如果我没有弄错,h264是唯一一个打印运动估计矢量的编解码器,我该如何找到这个问题呢

我建议尝试一下视频过滤器


另外,如果您想更好地了解ffmpeg中发生了什么,请检查libavcodec/mpegvideo.c

中的函数ff\u print\u debug\u info2为了清楚起见,您认为我可以使用mestimate过滤器强制h265编码视频导出侧数据中的运动矢量吗?谢谢你的回复btw@JohnAllard是的,mestimate正是这样做的,它将向侧数据添加运动矢量值。我真的不知道您的解决方案的用例,但我应该告诉您,这是一个有点慢的过程。顺便说一句,mestimate是非常新的,所以使用最新的版本