Como mencionó @dstob, puede usar ffprobe
para obtener los I-frames y su información asociada. ffprobe
viene con algunas de las compilaciones estáticas en la página de descarga y también se puede construir desde la fuente.
Esto supone que estás en Linux / Unix:
Extraer cuadros y tipos de cuadros
ffprobe -select_streams v -show_frames \
-show_entries frame=pict_type \
-of csv bbb480.avi \
| grep -n I | cut -d ':' -f 1
El grep
comando filtra las líneas con I
ellas y cuenta su índice (usando la -n
opción). El cut
comando selecciona solo la primera columna de la salida (el índice). Tenga en cuenta que este índice se basa en 1, no en 0.
Cambiar el nombre de los archivos de salida según el índice
En realidad, puede canalizar estos índices a una lista:
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
Luego haga una lista de todas las miniaturas también:
ls -1 thumbnails*.jpeg > thumbnails.txt
Luego pegue esos dos juntos:
paste thumbnails.txt frame_indices.txt > combined.txt
La lista ahora contiene el nombre de la miniatura y el índice. Realice un cambio de nombre basado en eso:
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
Lo anterior cambiará el nombre thumbnail-01.jpeg
a thumbnail-0.jpeg
. Tenga en cuenta que no hay relleno de cero en el índice de salida. Si desea ponerlo a cero, digamos, 5 dígitos, use printf
:
newIndex=$(printf '%05d' $(echo $index - 1 | bc))
En Windows, haría exactamente lo mismo ffprobe
pero analizaría la salida de manera diferente. Sin embargo, no tengo idea de cómo realizar el cambio de nombre allí.