FFmpeg может получить изображения от видео, которые могут использоваться в качестве миниатюр для представления видео. Наиболее распространенные способы выполнения, которые получены в Wiki FFmpeg.
Но, я не хочу выбирать случайные кадры в некоторых интервалах. Я нашел некоторые опции с помощью фильтров на FFmpeg для получения изменений сцены:
Фильтр thumbnail
попытки найти самые представительные кадры в видео:
ffmpeg -i input.mp4 -vf "thumbnail,scale=640:360" -frames:v 1 thumb.png
и следующая команда выбирает только кадры, которые имеют больше чем 40% изменений по сравнению с предыдущим (и так вероятно, изменения сцены), и генерирует последовательность 5 PNGs.
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
гарантирует, чтобы Вы получили различные изображения. Это все еще всегда выбирает первый кадр видео, в большинстве случаев первый кадр является кредитами/логотипом и не значимый, таким образом, я добавил a -ss
3 для отбрасывания сначала 3 секунд видео.
Моя заключительная команда похожа на это:
ffmpeg -ss 3 -i input.mp4 -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.jpg
Это было лучшим, я мог сделать. Я заметил, что, так как я выбираю только 5 видео, все они главным образом с начала видео и могут пропустить важные сцены, которые происходят позже в видео
Я хотел бы выбрать Ваши мозги для любых других более оптимальных вариантов.