如何从视频片段中提取所有关键帧?

如何从视频片段中提取所有关键帧?

我正在尝试从视频剪辑中提取关键帧。我尝试了以下命令,但它提取了所有帧。

ffmpeg -vf select="eq(pict_type\,PICT_TYPE_I)" -i 2.flv -vsync 2 -s 73x41 -r 30 -f image2 thumbnails-%%02d.jpeg

答案1

-skip_frame您可以使用无需select视频过滤器的方法使此操作更简单:

ffmpeg -skip_frame nokey -i 2.flv -vsync 0 -r 30 -f image2 thumbnails-%02d.jpeg

答案2

示例使用selectscale过滤器:

ffmpeg -i 2.flv -vf "select=eq(pict_type\,I),scale=73x41" \
-vsync vfr -qscale:v 2 thumbnails-%02d.jpeg

一些提示:

  • 过滤器不应位于-i选项之前,因为它们是输出选项。我不知道您从哪里获得该命令,但PICT_TYPE_I不存在 - 它应该是I

  • scale滤镜中,您可以替换73或 ,41让滤镜自动计算宽度或高度以保持纵横比:例如scale=73:-1scale=-1:41。这可以防止因“强制”缩放而导致的拉伸或挤压。

  • -qscale:v输出质量可以通过(或别名)来控制-q:v。有效范围是 2 到 31 的线性刻度,值越低,质量越高。

  • ffmpeg允许在输入之前进行过滤,告诉我输入的内容可能已过时。下载最近的静态构建适用于您的操作系统,或者根据汇编指南如果上述方法不起作用。

答案3

如果出现这个错误:

选项 vf(设置视频过滤器)无法应用于输入 URL 1508.mp4 - 您正尝试将输入选项应用于输出文件或反之亦然。将此选项移到其所属的文件之前。解析输入文件 1508.mp4 的选项时出错。打开输入文件时出错:参数无效

你可以这样做:

ffmpeg -i 263.mp4 -vf select=eq(pict_type\,PICT_TYPE_I)  -vsync 2 -s 480x320 -r 24 -f image2 thumbnails-%05d.jpeg

“-i” 参数提前

相关内容