Como o @dstob mencionado, você pode usar ffprobe
para obter os quadros I e as informações associadas. ffprobe
vem 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 grep
comando filtra as linhas com I
elas e conta seu índice (usando a -n
opção). O cut
comando 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.jpeg
para 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, ffprobe
mas analisará a saída de maneira diferente. No entanto, não faço ideia de como renomear lá.