Come menzionato @dstob, è possibile utilizzare ffprobe
per ottenere gli I-frame e le informazioni ad essi associate. ffprobe
viene fornito con alcune build statiche nella pagina di download e può essere compilato anche dal sorgente.
Questo presuppone che tu sia su Linux / Unix:
Estrai frame e tipi di frame
ffprobe -select_streams v -show_frames \
-show_entries frame=pict_type \
-of csv bbb480.avi \
| grep -n I | cut -d ':' -f 1
Il grep
comando filtra le righe al I
loro interno e conta il loro indice (usando l' -n
opzione). Il cut
comando seleziona solo la prima colonna dell'output (l'indice). Si noti che questo indice è basato su 1, non su 0.
Rinomina i file di output in base all'indice
Puoi effettivamente reindirizzare questi indici a un elenco:
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
Quindi fai anche un elenco di tutte le anteprime:
ls -1 thumbnails*.jpeg > thumbnails.txt
Quindi incollali insieme:
paste thumbnails.txt frame_indices.txt > combined.txt
L'elenco ora contiene il nome della miniatura e l'indice. Eseguire una ridenominazione in base a ciò:
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
Quanto sopra verrà rinominato thumbnail-01.jpeg
in thumbnail-0.jpeg
. Si noti che non vi è alcun zero padding sull'indice di output. Se vuoi azzerarlo a, diciamo, a 5 cifre, usa printf
:
newIndex=$(printf '%05d' $(echo $index - 1 | bc))
Su Windows, faresti esattamente lo stesso con ffprobe
ma analizzi l'output in modo diverso. Non ho idea di come eseguire la ridenominazione lì però.