Esiste un comando per ottenere il numero di frame in una gif?


23

Esiste un comando per ottenere il numero di frame in una gif? Ho alcune gif e voglio convertirle in matrici, ma voglio limitare l'array e la struttura dell'array in base al numero di frame in qualsiasi gif casuale che mi capita di alimentare il mio programma. Pensavo che imagemagick potesse avere una simile opzione, ma non l'ho ancora trovata.

Risposte:


23

Se hai ImageMagick installato, puoi usare il suo identifycomando come segue

identify /path/to/image.gif

Otterrai i dettagli di ogni fotogramma.

Come suggerito da Steeldriver , è possibile ottenere il numero di immagini nella sequenza direttamente utilizzando l' identificatore del %nformato di output, tuttavia sembra piuttosto fastidioso stamparlo una volta per ogni immagine. Per ottenere un singolo numero potresti farlo

identify -format "%n\n" path/to/file.gif | head -1

2
Oopsie. Sono stato il primo a pubblicare una risposta e poi l'ho aggiornato 3 volte senza vedere la tua risposta che è abbastanza simile alla mia ultima revisione ...
WinEunuuchs2Unix

18

Exiftool elencherà il conteggio dei fotogrammi come parte del suo ampio output.

Questo è un comando e un output di un file GIF animato:

$ exiftool -b -FrameCount giphy.gif
33

Uscita exiftool completa su gif:

$ exiftool giphy.gif
ExifTool Version Number         : 10.10
File Name                       : giphy.gif
Directory                       : .
File Size                       : 2.1 MB
File Modification Date/Time     : 2018:04:22 21:00:42-04:00
File Access Date/Time           : 2018:04:22 21:01:03-04:00
File Inode Change Date/Time     : 2018:04:22 21:00:52-04:00
File Permissions                : rw-rw-r--
File Type                       : GIF
File Type Extension             : gif
MIME Type                       : image/gif
GIF Version                     : 89a
Image Width                     : 500
Image Height                    : 281
Has Color Map                   : Yes
Color Resolution Depth          : 7
Bits Per Pixel                  : 7
Background Color                : 127
Animation Iterations            : Infinite
XMP Toolkit                     : Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27
Creator Tool                    : Adobe Photoshop CS6 (Macintosh)
Instance ID                     : xmp.iid:C312DB1DA6A311E5B8F5D2BA262E999D
Document ID                     : xmp.did:C312DB1EA6A311E5B8F5D2BA262E999D
Derived From Instance ID        : xmp.iid:C312DB1BA6A311E5B8F5D2BA262E999D
Derived From Document ID        : xmp.did:C312DB1CA6A311E5B8F5D2BA262E999D
Frame Count                     : 33
Duration                        : 2.31 s
Image Size                      : 500x281
Megapixels                      : 0.141

2
Non è necessario grep exiftooll'output: ogni campo può essere stampato in modo indipendente: exiftool dev/slack-emojinator/gifs/yj_batsu.gif -FrameCounte exiftool dev/slack-emojinator/gifs/yj_batsu.gif -b -FrameCountsolo per il valore
muru,

@muru Grazie per l'informazione. Riparerò la risposta.
LD James,

8

Comando one-liner

Ispirato da questo articolo , utilizzare questo comando one-liner:

$ identify drop_caches.gif | wc -l
128

Per maggiori dettagli usare:

identify -verbose filename.gif

Questo sito Web ti consente di caricare il tuo .gife analizzarlo in molti modi tra cui il numero di frame in esso:

ezgif.png


Il convertfornito da Image Magic convertirà le tue .gifin singole .pngimmagini una per ogni fotogramma:

$ convert -verbose -coalesce drop_caches.gif drop_caches.png
drop_caches.gif[0] GIF 470x940 470x940+0+0 8-bit sRGB 256c 177KB 0.090u 0:00.099
drop_caches.gif[1] GIF 13x1 470x940+398+704 8-bit sRGB 256c 177KB 0.080u 0:00.089
drop_caches.gif[2] GIF 306x620 470x940+144+130 8-bit sRGB 256c 177KB 0.080u 0:00.089
    (... SNIP ...)
drop_caches.gif=>drop_caches-125.png[125] GIF 470x940 470x940+0+0 8-bit sRGB 255c 50.3KB 27.100u 0:24.890
drop_caches.gif=>drop_caches-126.png[126] GIF 470x940 470x940+0+0 8-bit sRGB 254c 48.9KB 27.320u 0:25.089
drop_caches.gif=>drop_caches-127.png[127] GIF 470x940 470x940+0+0 8-bit sRGB 254c 48.9KB 27.480u 0:25.269

7

Modo FFmpeg:

ffprobe -v warning -show_frames qqq.gif | grep -c '\[/FRAME\]'

Il video GIF è un video, quindi anche gli strumenti di analisi video possono aiutare.


La mia esperienza è che compilare FFMPEG per soddisfare le mie esigenze è una puttana, ma apprezzo il tempo impiegato per rispondere a questa risposta. Spero che qualcuno lo trovi utile
j0h

@ j0h, FFmpeg fornito dalla distribuzione non funziona solo per questo?
Vi.

5

Puoi usare lessanche il comando se hai ImageMagickinstallato.

less +G image.gif

I frame totali sono gli ultimi #tra parentesi image.gif[#]...(a partire da 0); Oppure conta con:

less image.gif | wc -l

intrigante .......
j0h
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.