如何使用ffmpeg提取固定数量的帧?

W. *_*Han 5 video ffmpeg frame extraction

我试图从一堆视频中统一提取固定数量的帧(比如每个视频 50 帧,总共 10,000 个视频)。

由于时长不同,我计算了每个视频的理想输出fps,并将其作为ffmpeg提取的参数,但未能获得所需的帧数。

有谁知道如何使用 ffmpeg 或其他工具提取固定数量的帧?谢谢!

Gya*_*yan 5

您可以使用缩略图过滤器。它从每组帧中选择一个代表n帧(默认为 100)

因此,如果您的源视频时长为 10 分钟,帧率为 25 fps,则它总共有 15000 帧。因此,要选择 50 帧,您将使用

ffmpeg -i input.mp4 -vf thumbnail=300,setpts=N/TB -r 1 -vframes 50 inputframes%03d.png
Run Code Online (Sandbox Code Playgroud)

这将从每组 300 帧中选择一个代表性帧,因此从 15000 帧中选择 50 帧。尽管名称如此,thumbnail 只是选择帧,它不会缩小它们以供缩略图使用。该setptsr的结合设置,以避免重复或丢帧现象。在vframes被设定成不超过50倍的图像被输出。

如果您需要严格选择每一nth帧,请使用

ffmpeg -i input.mp4 -vf select='not(mod(n\,300))',setpts=N/TB -r 1 -vframes 50 inputframes%03d.png
Run Code Online (Sandbox Code Playgroud)