FFMPEG 提取帧内 I、P、B 帧

ndm*_*web 6 video ffmpeg

有没有办法从 FFMPEG 或类似程序中提取帧内并按原样保留它们?我知道您可以使用-f image2. 但这些是每个帧的完整图像。我只想导出运动变化的图像,所以我会让 P 和 B 帧只显示运动变化,排除或掩盖图像的未变化区域。

这可能吗?

我正在使用的基本帧导出命令。这为我提供了每帧的全帧图像,以指定的 FPS。

ffmpeg -i input.mp4 -r 12 -an -b 1024k -y -f image2 frame%4d.jpg

我希望导出帧,以便我有一个帧文件夹,其中第一帧将是完整图像,下一帧将仅是需要重绘图像的图像数据。暴露两个帧之间的时间冗余(这不是 I、P、B 帧所做的吗?)

小智 7

要提取 certin 类型的框架,请使用select过滤器

select=eq(pict_type\,<x>)

其中<x>是下列之一:pict_type (video only) the type of the filtered frame, can assume one of the following values: I, P, B, S, SI, SP, BI

例如:

ffmpeg -i <inputfile> -vf '[in]select=eq(pict_type\,B)[out]' b.frames.mp4

要了解有关输出的更多信息,请添加showinfo过滤器

ffmpeg -i <inputfile> -vf '[in]select=eq(pict_type\,B),showinfo[out]' b.frames.mp4

  • @ndmweb 您不能“按原样”导出非帧内帧。没有有效的图片信息——一个 P 或 B 宏块/帧,简单地说,只存储下一张图片之间的差异。恐怕为了做您想做的事,您必须考虑使用 MATLAB 或类似工具对其进行编码。至少我不知道任何现有的解决方案。 (2认同)