FFmpeg peut capturer des images à partir de vidéos qui peuvent être utilisées comme vignettes pour représenter la vidéo. Les méthodes les plus courantes pour ce faire sont décrites dans le fichier FFmpeg Wiki .
Mais, je ne veux pas choisir des images aléatoires à certains intervalles. J'ai trouvé quelques options en utilisant des filtres sur FFmpeg pour capturer les changements de scène :
Le filtre thumbnail
essaie de trouver les images les plus représentatives de la vidéo :
ffmpeg -i input.mp4 -vf "thumbnail,scale=640:360" -frames:v 1 thumb.png
et la commande suivante sélectionne seulement les images qui ont plus de 40% de changements par rapport à la précédente (et donc probablement des changements de scène) et génère une séquence de 5 PNGs.
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.4),scale=640:360" -frames:v 5 thumb%03d.png
Crédit d'information pour les commandes ci-dessus à Fabio Sonnati . La seconde semblait meilleure car elle permettait d'obtenir n images et de choisir la meilleure. Je l'ai essayé et il a généré la même image 5 fois.
Quelques recherches supplémentaires m'ont conduit à :
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.png
-vsync vfr
vous permet d'obtenir des images différentes. Cela choisit toujours la première image de la vidéo, dans la plupart des cas, la première image est le générique/logo et n'a pas de sens, donc j'ai ajouté une option -ss
3 pour rejeter les 3 premières secondes de la vidéo.
Ma commande finale ressemble à ceci :
ffmpeg -ss 3 -i input.mp4 -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.jpg
C'était le mieux que je pouvais faire. J'ai remarqué que, puisque je n'ai choisi que 5 vidéos, elles sont toutes principalement du début de la vidéo et peuvent manquer des scènes importantes qui se produisent plus tard dans la vidéo.
J'aimerais que vous me fassiez part de toute autre meilleure option.