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

How to extract a fixed number of frames with ffmpeg?

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

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

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

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

因此,如果您的源视频时长为 10 分钟且帧率为 25 fps,那么它总共有 15000 帧。因此,对于 select 50 帧,您将使用

ffmpeg -i input.mp4 -vf thumbnail=300,setpts=N/TB -r 1 -vframes 50 inputframes%03d.png

这 select 是每组 300 帧中的一个代表性帧,因此 15000 帧中的 50 帧。尽管名称缩略图只是 select 帧,但它不会缩小它们以供缩略图使用. setptsr 一起设置以避免重复或丢帧。 vframes 设置为不超过 50 张图像输出。

如果您需要 select 严格每 nth 帧,请使用

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