Existe-t-il une commande pour obtenir le nombre d'images dans un gif?

23

Existe-t-il une commande pour obtenir le nombre d'images dans un gif? J'ai quelques gifs, et je veux les convertir en tableaux, mais je veux limiter le tableau et la structure du tableau en fonction du nombre d'images dans n'importe quel gif aléatoire que j'arrive à nourrir mon programme. Je pensais qu'imagemagick pourrait avoir une telle option, mais je ne l'ai pas encore trouvée.

j0h
la source

Réponses:

23

Si ImageMagick est installé, vous pouvez utiliser sa identifycommande comme suit

identify /path/to/image.gif

Vous obtiendrez des détails sur chaque image.

Comme suggéré par steeldriver , vous pouvez obtenir le nombre d'images dans la séquence directement en utilisant le %nspécificateur de format de sortie, mais il semble plutôt ennuyeux de l'imprimer une fois pour chaque image. Pour obtenir un seul numéro, vous pouvez le faire

identify -format "%n\n" path/to/file.gif | head -1
pomsky
la source
2
Oopsie. J'ai été le premier à poster une réponse, puis à la mettre à jour 3 fois sans voir votre réponse qui est assez similaire à ma dernière révision ...
WinEunuuchs2Unix
18

Exiftool répertoriera le nombre d' images dans le cadre de sa sortie étendue.

Il s'agit d'une commande et de la sortie d'un fichier Gif animé:

$ exiftool -b -FrameCount giphy.gif
33

Sortie exiftool complète sur le 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
LD James
la source
2
Vous n'avez pas besoin de grep exiftoolla sortie: chaque champ peut être imprimé indépendamment: exiftool dev/slack-emojinator/gifs/yj_batsu.gif -FrameCountet exiftool dev/slack-emojinator/gifs/yj_batsu.gif -b -FrameCountpour juste la valeur
muru
@muru Merci pour l'information. Je vais fixer la réponse.
LD James
8

Commande à une ligne

Inspiré par cet article , utilisez cette commande à une ligne:

$ identify drop_caches.gif | wc -l
128

Pour plus de détails, utilisez:

identify -verbose filename.gif

Ce site Web vous permet de télécharger votre fichier .gifet de l'analyser de nombreuses façons, y compris le nombre d'images qu'il contient:

ezgif.png


Le convertfourni par Image Magic convertira votre .gifen .pngimages individuelles une pour chaque image:

$ 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
WinEunuuchs2Unix
la source
7

Façon FFmpeg:

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

La vidéo Gif est une vidéo, donc les outils d'analyse vidéo peuvent également aider.

Vi.
la source
Mon expérience est que la compilation de FFMPEG pour répondre à mes besoins est une chienne, mais j'apprécie le temps qu'il a fallu pour faire cette réponse.J'espère que quelqu'un la trouvera utile
j0h
@ j0h, FFmpeg fourni par distro ne fonctionne-t-il pas uniquement pour cela?
Vi.
5

Vous pouvez également utiliser la lesscommande si vous avez ImageMagickinstallé.

less +G image.gif

Le nombre total d'images est le dernier #entre parenthèses image.gif[#]...(à partir de 0); Ou comptez avec:

less image.gif | wc -l
αғsнιη
la source
intrigant .......
j0h