如何在不解码整个视频的情况下提取运动矢量数据

如何在不解码整个视频的情况下提取运动矢量数据

我想从编码的 h264 流中提取运动矢量,而不对帧进行完整的解码。

我正在使用 FFmpeg 库,并且知道使用 av_frame_get_side_data 提取信息。不幸的是,它在提供 AV_FRAME_DATA_MOTION_VECTORS 之前对帧进行了完整解码。

是否可以解析 h264 以仅提取运动矢量,而忽略所有其他数据。

答案1

FFmpeg 提供示例文件 提取_mvs.c,需要编译才能使用。

编译完成后,使用此命令:

./extract_mvs input.mp4 > output.txt

这会将运动矢量提取到文本文件中。


现成的工具是MV-束状体

该工具将为您提供每一帧的 JSON 形式的运动矢量。


一个较新的工具是 mv-提取器, 被形容为 :

该工具从 H.264 和 MPEG-4 Part 2 编码视频中提取帧、运动矢量、帧类型和时间戳。

答案2

[...] 我想做的是在解码包之前提取运动矢量来计算运动百分比,以节省一些 CPU 使用率,[...]

与计算运动矢量并对其进行后处理相比,有一种更简单(可能更快)的方法来从未解码的流中计算运动百分比:

ffprobe -show_frames file.mp4 | grep pkt_size

P 帧的大小与这些矢量中包含的信息量直接相关。

我希望这有帮助!

更多参考信息请见这里

相关内容