是否有命令获取gif中的帧数?


23

是否有命令获取gif中的帧数?我有一些gif,我想将它们转换成数组,但我想根据碰巧要喂入程序的任何随机gif中的帧数来限制数组和数组的结构。我以为imagemagick可能有这样的选择,但我还没有找到。

Answers:


24

如果安装了ImageMagick,则可以identify按以下方式使用其命令

identify /path/to/image.gif

您将获得每个帧的详细信息。

正如steeldriver建议的那样,您可以使用%n输出格式说明符直接获取序列中的图像数量,但是令人讨厌的是,它似乎为每个图像打印一次。要获得一个号码,您可以做

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

2
哎呀 我是第一个发布答案的人,然后对其进行了3次更新,而没有看到您的答案,这与我的最新修订非常相似...
WinEunuuchs2Unix

18

Exiftool将列出帧计数作为其广泛输出的一部分。

这是Animated Gif文件的命令和输出:

$ exiftool -b -FrameCount giphy.gif
33

在gif上完整的exiftool输出:

$ 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
你并不需要grep exiftool的输出:每场可以独立打印:exiftool dev/slack-emojinator/gifs/yj_batsu.gif -FrameCount并且exiftool dev/slack-emojinator/gifs/yj_batsu.gif -b -FrameCount只是价值
穆鲁

@muru感谢您提供信息。我会解决问题的答案。
LD詹姆斯

8

单线命令

本文的启发,请使用此单线命令:

$ identify drop_caches.gif | wc -l
128

有关更多详细信息,请使用:

identify -verbose filename.gif

网站可让您上载.gif并进行多种分析,包括其中的帧数:

ezgif.png


convert所提供的图像魔术将您转换.gif成单个.png图像为每个帧:

$ 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

FFmpeg方式:

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

Gif视频是视频,因此视频分析工具也可能会有所帮助。


我的经验是,编译FFMPEG以满足我的需求是很艰难的,但是我确实感谢您花时间做出这个答案。我希望有人觉得它有用
j0h

@ j0h,不是由Distro提供的FFmpeg才可以使用吗?
六。

5

less如果已ImageMagick安装,也可以使用命令。

less +G image.gif

总帧数是#括号中 的最后一个image.gif[#]...(从0开始);或计算:

less image.gif | wc -l

耐人寻味.......
j0h
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.