2

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

av_dict_set(&opts, "flags2", "+export_mvs", 0);

然后您可以通过执行此操作来查询运动矢量的侧面数据

sd = av_frame_get_side_data(frame, AV_FRAME_DATA_MOTION_VECTORS);

当我在网上查看是否可以对 HEVC 编码的视频做类似的事情时,我找不到任何信息。我发现的只是“AV_FRAME_DATA_MOTION_VECTORS”的定义

某些编解码器导出的运动矢量(根据需要通过 libavcodec AVCodecContext flags2 选项中设置的 export_mvs 标志)。

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

但没有关于究竟是哪些编解码器导出此运动矢量信息的信息。我将如何去发现这个?

4

1 回答 1

1

如果我没记错的话,h264 是唯一可以打印运动估计向量的编解码器。

我建议尝试使用视频过滤器mestimate

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

于 2017-11-16T21:59:49.500 回答