How to determine the length of a .gif animation in

2019-02-15 13:53发布

Is there an easy way to figure out approximately how long a .gif image takes to play one time in Javascript?

3条回答
三岁会撩人
2楼-- · 2019-02-15 14:38

The identify command from ImageMagick can give this information:

$ identify -verbose file.gif | grep 'Elapsed time'

  Elapsed time: 0:01.080
  Elapsed time: 0:01.150
  Elapsed time: 0:01.230

...

  Elapsed time: 0:04.250
  Elapsed time: 0:04.330
  Elapsed time: 0:04.399
  Elapsed time: 0:04.480

The last line printed should be the total length of the animation.

查看更多
等我变得足够好
3楼-- · 2019-02-15 14:38

I tried ImageMagick identify but it didn't give me the correct duration.

I found another reliable way using ExifTool

exiftool -Duration image.gif

It will print out the duration in seconds:

Duration : 0.48 s

查看更多
Deceive 欺骗
4楼-- · 2019-02-15 14:40

The accepted answer doesn't give the exact result. Elapsed time is like a real world clock while ImageMagick runs the animation. What you want is the Delay field for each frame and sum them up.

$ identify -verbose fail.gif  | grep Delay

Delay: 10x100
Delay: 10x100
Delay: 10x100
Delay: 10x100
Delay: 15x100
Delay: 10x100
Delay: 10x100
Delay: 10x100
Delay: 10x100
Delay: 10x100
Delay: 10x100
Delay: 10x100
Delay: 10x100
Delay: 10x100
Delay: 10x100
Delay: 10x100
Delay: 10x100
Delay: 10x100
Delay: 10x100
Delay: 10x100
Delay: 10x100
Delay: 33x100
Delay: 10x100
Delay: 10x100
Delay: 10x100

Where 33x100 is a delay of 330ms.

Edited by Mark Setchell

You can actually extract the delay parameter somewhat more surgically (than by using grep) with the %T escape:

enter image description here

identify -format "%T\n" animation.gif 

8
8
8
8
8
8
8
8
8
8
11
11
11
11
11
11
11
26

And get the total with awk like this:

identify -format "%T\n" anomation.gif | awk '{t+=$0} END{print t " centiseconds"}'
183 centiseconds
查看更多
登录 后发表回答