Como o @dstob mencionado, você pode usar ffprobepara obter os quadros I e as informações associadas. ffprobevem com algumas das compilações estáticas na página de download e também pode ser criada a partir da fonte.
Isso pressupõe que você esteja no Linux / Unix:
Extrair quadros e tipos de quadros
ffprobe -select_streams v -show_frames \
-show_entries frame=pict_type \
-of csv bbb480.avi \
| grep -n I | cut -d ':' -f 1
O grepcomando filtra as linhas com Ielas e conta seu índice (usando a -nopção). O cutcomando seleciona apenas a primeira coluna da saída (o índice). Observe que esse índice é baseado em 1, não em 0.
Renomear arquivos de saída com base no índice
Na verdade, você pode canalizar esses índices para uma 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
Em seguida, faça uma lista de todas as miniaturas:
ls -1 thumbnails*.jpeg > thumbnails.txt
Em seguida, cole os dois juntos:
paste thumbnails.txt frame_indices.txt > combined.txt
A lista agora contém o nome da miniatura e o índice. Execute uma renomeação com base nisso:
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
O acima será renomeado thumbnail-01.jpegpara thumbnail-0.jpeg. Observe que não há preenchimento zero no índice de saída. Se você deseja zerar com, digamos, 5 dígitos, use printf:
newIndex=$(printf '%05d' $(echo $index - 1 | bc))
No Windows, você faria exatamente o mesmo com, ffprobemas analisará a saída de maneira diferente. No entanto, não faço ideia de como renomear lá.