Comme @dstob mentionné, vous pouvez utiliser ffprobe
pour obtenir les images I et leurs informations associées. ffprobe
est 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 grep
commande filtre les lignes avec I
elles et compte leur index (en utilisant l' -n
option). La cut
commande 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 ffprobe
mais en analysant la sortie différemment. Cependant, je ne sais pas comment effectuer le changement de nom.