Gibt es einen Befehl, um die Anzahl der Frames in einem GIF zu ermitteln?

23

Gibt es einen Befehl, um die Anzahl der Frames in einem GIF zu ermitteln? Ich habe einige GIFs und möchte sie in Arrays konvertieren, aber ich möchte das Array und die Struktur des Arrays basierend auf der Anzahl der Frames in einem zufälligen GIF, das ich meinem Programm zuführe, begrenzen. Ich dachte, imagemagick könnte eine solche Option haben, aber ich habe sie noch nicht gefunden.

j0h
quelle

Antworten:

24

Wenn Sie ImageMagick installiert haben, können Sie den identifyBefehl wie folgt verwenden

identify /path/to/image.gif

Sie erhalten Details zu jedem Frame.

Wie von steeldriver vorgeschlagen , können Sie die Anzahl der Bilder in der Sequenz direkt über den %nAusgabeformat- Bezeichner ermitteln. Es ist jedoch ziemlich ärgerlich, wenn es für jedes Bild einmal gedruckt wird. Um eine einzelne Nummer zu bekommen, könnten Sie tun

identify -format "%n\n" path/to/file.gif | head -1
Pomsky
quelle
2
Oopsie. Ich war der erste, der eine Antwort
gepostet hat
18

Exiftool listet die Frame- Anzahl als Teil seiner umfangreichen Ausgabe auf.

Dies ist ein Befehl und eine Ausgabe einer animierten Gif-Datei:

$ exiftool -b -FrameCount giphy.gif
33

Volle exiftool Ausgabe auf dem 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
quelle
2
Sie müssen nicht grep exiftoolausgeben: Jedes Feld kann einzeln gedruckt werden: exiftool dev/slack-emojinator/gifs/yj_batsu.gif -FrameCountund exiftool dev/slack-emojinator/gifs/yj_batsu.gif -b -FrameCountnur für den Wert
muru 23.04.18
@muru Danke für die Information. Ich werde die Antwort reparieren.
LD James
8

Einzeiliger Befehl

Verwenden Sie diesen einzeiligen Befehl, der von diesem Artikel inspiriert wurde :

$ identify drop_caches.gif | wc -l
128

Für weitere Details verwenden Sie:

identify -verbose filename.gif

Auf dieser Website können Sie Ihre .gifBilder hochladen und auf viele Arten analysieren, einschließlich der Anzahl der darin enthaltenen Frames:

ezgif.png


Das convertvon Image Magic bereitgestellte konvertiert Ihre Bilder .gifin einzelne .pngBilder für jeden Frame:

$ 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
quelle
7

FFmpeg Weg:

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

Gif-Video ist ein Video, daher können Videoanalyse-Tools ebenfalls hilfreich sein.

Vi.
quelle
Meine Erfahrung ist , dass die Erstellung FFMPEG meine Bedürfnisse zu erfüllen ist eine Schlampe, aber ich schätze die Zeit, dieses jemand findet answer.I zu machen nahm , um Hoffnung es nützlich
J0H
@ j0h, Funktioniert das von der Distribution bereitgestellte FFmpeg nicht nur dafür?
Vi.
5

Sie können den lessBefehl auch verwenden, wenn Sie ihn ImageMagickinstalliert haben.

less +G image.gif

Die Gesamtzahl der Frames ist die letzte #in Klammern image.gif[#]...(beginnend mit 0). Oder rechnen Sie mit:

less image.gif | wc -l
αғsнιη
quelle
faszinierend .......
j0h