FFmpeg可以从视频中捕获图像,这些图像可用作缩略图来表示视频。FFmpeg Wiki中捕获了最常用的方法。
但是,我不想每隔一段时间选择随机帧。我发现在FFmpeg上使用过滤器捕获场景更改的一些选项:
过滤器thumbnail
尝试查找视频中最具代表性的帧:
ffmpeg -i input.mp4 -vf "thumbnail,scale=640:360" -frames:v 1 thumb.png
并且以下命令仅选择与前一个相比变化超过40%(可能是场景变化)的帧,并生成5个PNG序列。
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.4),scale=640:360" -frames:v 5 thumb%03d.png
以上命令的信息提供给Fabio Sonnati。第二个似乎更好,因为我可以得到n张图像并选择最佳图像。我尝试了一下,并生成了5次相同的图像。
经过更多调查,我得出以下结论:
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.png
-vsync vfr
确保您获得不同的图像。这仍然总是选择视频的第一帧,在大多数情况下,第一帧是点数/徽标,并且没有意义,因此我添加了-ss
3来丢弃视频的前3秒。
我的最终命令如下所示:
ffmpeg -ss 3 -i input.mp4 -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.jpg
这是我能做的最好的。我注意到,由于我只选择了5个视频,所以它们大多数都是从视频开头开始的,因此可能会错过视频稍后出现的重要场景
我想为其他更好的选择而绞尽脑汁。
libopenjpeg
.. 进行编译,不确定是否会有所不同。