Générer un aperçu image des plans d’une vidéo -FFmpeg inside-

Oui,le titre n’est pas des plus digeste, désolé.

Il arrive que pour des besoins de préparations ou d’études on ait besoin d’analyser des vidéos. Une des premières choses qu’on peut faire dans ce cas c’est de regarder la vidéo une fois, deux fois,etc… C’est souvent ce que je fais d’ailleurs avec généralement un premier passage en visionnage simple et les passages suivants avec une étude plus approfondie (et souvent des prises de notes et des pauses dans la lecture). On extrait ainsi quelques données clés des images, comme…des valeurs de plans, des détails, une ambiance, des couleurs, des mouvements, etc… Et dans ce cas, on en arrive parfois à vouloir garder des images en référence. Jusque là, pas de soucis : extraire quelques images précises d’une séquence vidéo n’est pas bien compliqué. Mais comment faire lorsqu’on veut un découpage  des plans de la séquence ? Selon la durée de la séquence et le nombre de coupes, ça peut très vite devenir fastidieux. La solution au problème se trouve du côté de FFmpeg.

FFmpeg est un programme de traitements de fichiers audio et vidéo. C’est un outil puissant notamment connu pour ses possibilités en lecture et en conversion de fichiers. C’est d’ailleurs comme ça qu’il m’arrivait de l’utiliser jusqu’à présent. Son principal défaut…c’est qu’il n’a pas d’interface graphique: de base tout se fait en ligne de commande (heureusement il existe plusieurs interfaces développés par des programmeurs tiers).

Ce que j’ignorais par contre c’est que, dans toute les fonctions incluses dans FFmpeg, il y a une combinaison qui répond à mon problème.

1
ffmpeg -i input.mp4 -vf  "select=gt(scene\,0.2)",scale=320:-1,tile=4x5 -frames:v 6 -vsync vfr thumb%02d.jpg

Prenons un exemple avec une vidéo : 

Après avoir récupéré le fichier, on lance le terminal et on lui rentre la commande. Une fois terminé, il ne reste plus qu’à récupérer les fichiers images obtenus.

Ce diaporama nécessite JavaScript.

Décryptons un peu la commande :

ffmpeg : indique le chemin vers l’exécutable ffmpeg

-i input.mp4 : indique le chemin vers votre fichier source (ici un fichier mp4)

-vf  « select=gt(scene\,0.2) »,scale=320:-1,tile=4×5 : ensemble des filtres vidéos

« select=gt(scene\,0.2) » détecte les changements de plans (pour plus ou moins de précisions, faire varier la valeur entre 0 et 1 – entre 0,3 et 0,5 est souvent suffisant)

scale=320:-1 effectue une mise à l’échelle, avec ici une largeur de 320 pixels. On peut spécifier une hauteur, mais en mettant « -1 » on laisse ffmpeg conserver le ratio de l’image entrante

tile=4×5 Il s’agit ici d’une fonction qui assemble les images ainsi obtenue en mosaïque. 4×5 représente ici les colonnes qu’il y aura (4 en largeur – 5 en hauteur)

-frames:v 6 -vsync vfr thumb%02d.jpg : spécifie les fichiers en sortie.

-frames:v 6 : limite le nombre de fichiers en sortie (ici à 6)

-vsync vfr : force la synchronisation video en vfr (variable frame rate). Bizarrement, sans ce paramètre les fichiers en sortie sont identiques.

thumb%02d.jpg : spécifie le nom et le format des fichiers de sortie ici thumb et le format jpeg. Le « %02d » indique le nombre de chiffre à adjoindre au nom pour ainsi obtenir des fichiers numérotés : thumb01.jpg – thumb02.jpg – thumb03.jpg – thumb04.jpg – thumb05.jpg et thumb06.jpg

Et voilà. Bon, c’est loin de faire de moi un expert de la ligne de commande et de toutes les options de ffmpeg, mais cette ligne là, je la garde au chaud.

Source : SuperUser et Fabio Sonnati – La vidéo est évidemment Happy de Pharell Williams, utilisée uniquement à titre d’exemple.