我正在尝试使用 ffmpeg 从视频关键帧中提取缩略图,我的命令行是:
ffmpeg -i video.mp4 -vframes 1 -s 200x200 -vf select="eq(pict_type\,PICT_TYPE_I)" -vsync 0 -f image2 video.jpg
但是它提取的关键帧完全是黑色的(我猜视频以黑色帧开头)......有没有办法从视频中自动提取第一个非黑色关键帧,而无需寻找特定时间(我必须管理多个许多持续时间的视频)?
谢谢
我想不出单独使用 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 脚本混合以找到灰度值高于给定阈值的第一张图像并将其用作缩略图。
使用选项 thumbnail=num_frame 您可以选择何时提取帧,但我不知道是否可以提取第一个非黑色关键帧。http://ffmpeg.org/ffmpeg.html#thumbnail