Comme @dstob mentionné, vous pouvez utiliser ffprobepour obtenir les images I et leurs informations associées. ffprobeest livré avec certaines des versions statiques sur la page de téléchargement et peut également être construit à partir des sources.
Cela suppose que vous êtes sous Linux / Unix:
Extraire des cadres et types de cadres
ffprobe -select_streams v -show_frames \
-show_entries frame=pict_type \
-of csv bbb480.avi \
| grep -n I | cut -d ':' -f 1
La grepcommande filtre les lignes avec Ielles et compte leur index (en utilisant l' -noption). La cutcommande sélectionne uniquement la première colonne de la sortie (l'index). Notez que cet index est basé sur 1, pas sur 0.
Renommer les fichiers de sortie en fonction de l'index
Vous pouvez réellement diriger ces index vers une liste:
ffprobe -select_streams v -show_frames \
-show_entries frame=pict_type \
-of csv bbb480.avi \
| grep -n I | cut -d ':' -f 1 > frame_indices.txt
Faites ensuite également une liste de toutes les vignettes:
ls -1 thumbnails*.jpeg > thumbnails.txt
Collez ensuite ces deux éléments ensemble:
paste thumbnails.txt frame_indices.txt > combined.txt
La liste contient maintenant le nom de la vignette et de l'index. Effectuez un changement de nom basé sur cela:
while read -r thumbnail index; do
newIndex=$(echo $index - 1 | bc) # subtract 1 from the index
mv -- "$thumbnail" "thumbnail-$newIndex.jpeg" # rename file
done < combined.txt
Ce qui précède renommera thumbnail-01.jpegà thumbnail-0.jpeg. Notez qu'il n'y a pas de remplissage nul sur l'index de sortie. Si vous voulez le mettre à zéro, disons, à 5 chiffres, utilisez printf:
newIndex=$(printf '%05d' $(echo $index - 1 | bc))
Sous Windows, vous feriez exactement la même chose ffprobemais en analysant la sortie différemment. Cependant, je ne sais pas comment effectuer le changement de nom.