使用FFMPEG提取第一个非黑色关键帧

时间:2012-03-12 13:32:41

标签: ffmpeg keyframe

我正在尝试使用ffmpeg从视频关键帧中提取缩略图,我的命令行是:

ffmpeg -i video.mp4 -vframes 1 -s 200x200 -vf select="eq(pict_type\,PICT_TYPE_I)" -vsync 0 -f image2 video.jpg

但是它提取的关键帧是全黑的(视频以黑帧开始,我猜)...有没有办法自动从视频中提取第一个非黑色关键帧没有寻求特定时间(我必须管理多个持续时间的多个视频)?

由于

2 个答案:

答案 0 :(得分:1)

我无法想到单独使用ffmpeg的解决方案。但是如果你提取前几个关键帧(例如通过调用-vframes 20),那么可以使用ImageMagic对它们进行分析。将图像缩小为一种灰度颜色将选择图片中的平均灰度值。像

这样的命令行
convert avatar.jpeg -colors 1 -type grayscale -format '%c' histogram:info:

将产生类似

的输出
16384: ( 80, 80, 80) #505050 gray(80)

(我用Simone的头像图片作为例子。)最后一个数字对你的情况最有趣。它表示图像的暗度,理想黑色为0,纯白色为255。 sed脚本可以轻松提取它

convert ... | sed 's/^.*(\(.*\))$/\1/'

将其与一些shell脚本混合,以找到灰度值高于给定阈值的第一个图像,并将其用作缩略图。

答案 1 :(得分:0)

使用选项thumbnail = num_frame,您可以选择何时提取帧,但我不知道是否可以提取第一个非balck关键帧。 http://ffmpeg.org/ffmpeg.html#thumbnail