Извлечь все ключевые кадры из видео и сохранить их в виде скринлиста с помощью ffmpeg

Извлечь все ключевые кадры из видео, сохранить в PNG-файлы
ffmpeg -i video.mp4 -vf "select=eq(pict_type\,I)" -vsync vfr frame-%05d.png

Извлечь все ключевые кадры из каждого видео видео и сохранить их в виде большого изображения для каждого видео в текущей папке
for i in *.mp4; do echo "$i"; ffmpeg -i "$i" -vf "select=eq(pict_type\,I)" -vsync vfr "$i"-%05d.png; montage "$i"*.png -tile 7x155 -geometry +0+0 -quality 85 "$i".jpg; rm "$i"*.png; done;

for i in *.mp4; do echo "$i"; ffmpeg -i "$i" -vf "select=eq(pict_type\,I)" -vsync vfr "$i"-%05d.png; montage "$i"*.png -tile 7x155 -geometry +0+0 -quality 85 "$i".jpg; rm "$i"*.png; done;

Тоже, но использует временную папку для png-файлов
mkdir temppng; for i in *.mp4; do echo "$i"; ffmpeg -i "$i" -vf "select=eq(pict_type\,I)" -vsync vfr temppng/%05d.png; echo "Montage $i..."; montage temppng/*.png -tile 7x155 -geometry +0+0 -quality 85 "$i".jpg; echo "rm temppng for $i"; rm temppng/*.png; done;

  • mkdir temppng; — Создадим папку для временных файлов
  • for i in *.mp4; do echo «$i»; Цикл по всем mp4 файлам в текущем каталоге
  • ffmpeg -i «$i» — Передадим файл на вход в ffmpeg
  • -vf «select=eq(pict_type\,I)» — возьмём только ключевой кадр (количество ключевых кадров в видео зависит от видео-кодека)
  • -vsync vfr temppng/%05d.png; — Сохраним каждый ключевой в png-файл
  • echo «Montage $i…»; montage temppng/*.png — используем утилиту ImageMagick Montage для того, чтобы соединить вместе все файлы с ключевыми кадрами
  • -tile 7×155 — Используем мозаику размером 7×155 кадров 7 по ширине, 155 по высоте
  • -geometry +0+0 — прикреплять кадры один к другому слева направо, сверху вниз (как направление текста в кириллице)
  • -quality 85 «$i».jpg; — сохранить результата в jpeg с качеством 85%
  • echo «rm temppng for $i»; rm temppng/*.png; — удалим временные файлы ключевых кадров
  • done; — завершим цикл