¿Hay un comando para obtener el número de fotogramas en un gif?


23

¿Hay un comando para obtener el número de fotogramas en un gif? Tengo algunos gifs y quiero convertirlos en matrices, pero quiero limitar la matriz y la estructura de la matriz en función del número de cuadros en cualquier gif aleatorio que alimente mi programa. Estaba pensando que imagemagick podría tener esa opción, pero aún no la he encontrado.

Respuestas:


23

Si tiene instalado ImageMagick, puede usar su identifycomando de la siguiente manera

identify /path/to/image.gif

Obtendrá detalles de cada cuadro.

Según lo sugerido por steeldriver , puede obtener el número de imágenes en la secuencia directamente usando el %nespecificador de formato de salida, sin embargo, de manera bastante molesta, parece imprimirlo una vez para cada imagen. Para obtener un solo número que podrías hacer

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

2
Oopsie Yo era el primero en publicar una respuesta y luego se actualiza 3 veces sin ver su respuesta que es bastante similar a mi última revisión ...
WinEunuuchs2Unix

18

Exiftool enumerará el Conteo de cuadros como parte de su extensa producción.

Este es un comando y salida de un archivo GIF animado:

$ exiftool -b -FrameCount giphy.gif
33

Salida completa de exiftool en el 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
No necesita grep exiftoolla salida: todos los campos se pueden imprimir de forma independiente: exiftool dev/slack-emojinator/gifs/yj_batsu.gif -FrameCounty exiftool dev/slack-emojinator/gifs/yj_batsu.gif -b -FrameCountsolo por el valor
muru

@muru Gracias por la información. Arreglaré la respuesta.
LD James

8

Comando de una línea

Inspirado en este artículo , use este comando de una línea:

$ identify drop_caches.gif | wc -l
128

Para más detalles use:

identify -verbose filename.gif

Este sitio web le permite cargar su contenido .gify analizarlo de muchas maneras, incluida la cantidad de fotogramas que contiene:

ezgif.png


El convertproporcionado por Image Magic convertirá sus imágenes .gifindividuales en .pnguna para cada cuadro:

$ 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

Forma FFmpeg:

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

El video GIF es un video, por lo que las herramientas de análisis de video también pueden ayudar.


Mi experiencia es que compilar FFMPEG para satisfacer mis necesidades es una perra, pero aprecio el tiempo que tardó en dar esta respuesta. Espero que alguien lo encuentre útil
j0h

@ j0h, ¿FFmpeg provisto por la distribución no funciona para esto?
Vi.

5

También puede usar el lesscomando si lo ha ImageMagickinstalado.

less +G image.gif

El total de cuadros es el último #entre paréntesis image.gif[#]...(a partir de 0); O cuenta con:

less image.gif | wc -l

intrigante .......
j0h
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.