Wie @dstob bereits erwähnt, können Sie ffprobe
die I-Frames und die zugehörigen Informationen abrufen . ffprobe
enthält einige der statischen Builds auf der Download-Seite und kann auch aus dem Quellcode erstellt werden.
Dies setzt voraus, dass Sie unter Linux / Unix arbeiten:
Frames und Frame-Typen extrahieren
ffprobe -select_streams v -show_frames \
-show_entries frame=pict_type \
-of csv bbb480.avi \
| grep -n I | cut -d ':' -f 1
Der grep
Befehl filtert die darin enthaltenen Zeilen I
und zählt deren Index (mithilfe der -n
Option). Der cut
Befehl wählt nur die erste Spalte der Ausgabe aus (den Index). Beachten Sie, dass dieser Index auf 1 und nicht auf 0 basiert.
Benennen Sie Ausgabedateien basierend auf dem Index um
Sie können diese Indizes tatsächlich an eine Liste weiterleiten:
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
Machen Sie dann auch eine Liste aller Thumbnails:
ls -1 thumbnails*.jpeg > thumbnails.txt
Dann fügen Sie diese beiden zusammen:
paste thumbnails.txt frame_indices.txt > combined.txt
Die Liste enthält nun den Namen des Thumbnails und den Index. Führen Sie eine Umbenennung basierend darauf durch:
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
Die oben genannten werden umbenannt thumbnail-01.jpeg
in thumbnail-0.jpeg
. Beachten Sie, dass der Ausgabeindex nicht mit Nullen aufgefüllt wird. Wenn Sie es auf 5 Ziffern auffüllen möchten, verwenden Sie printf
:
newIndex=$(printf '%05d' $(echo $index - 1 | bc))
Unter Windows würden Sie genau dasselbe tun, ffprobe
aber die Ausgabe anders analysieren. Keine Ahnung, wie man die Umbenennung dort vornimmt.