如何确定.gif动画的长度(以毫秒为单位)

问题描述:

是否有一种简单的方法可以计算出.gif图像在Javascript中播放一次需要多长时间?如何确定.gif动画的长度(以毫秒为单位)

+0

在什么编程语言/平台/环境? – 2012-03-21 20:48:15

+0

不太关心环境,因为我并不真正需要这个值,我只需要确定gif需要在毫秒内播放一次的大致时间。但是,我正在实现我将从javascript中获得的数字。 – j00b 2012-03-21 20:52:57

+0

如果您不关心以编程方式执行此操作,那么这个问题是无关紧要的。 – 2012-03-21 20:53:45

ImageMagick从该identify命令可以给出这样的信息:

$ 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 

印刷应该是动画的总长度的最后一行。

+1

运行三次给出已用时间:0:02.780,已用时间:0:02.840和已用时间:0:02.810。 – Prinzhorn 2016-04-11 16:48:17

接受的答案没有给出确切的结果。 Elapsed time就像一个真实的世界时钟,而ImageMagick运行动画。你想要的是每个帧的Delay字段,并总结它们。

$ 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 

其中33x100是延迟330ms。

由马克·瑟特查编辑

实际上,你可以提取延迟参数某种程度上更外科手术(比使用grep)与%T逃生:

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 

,并获得总计awk是这样的:

identify -format "%T\n" anomation.gif | awk '{t+=$0} END{print t " centiseconds"}' 
183 centiseconds 
+1

我加了一点 - 我希望你不介意。也有一票! – 2016-04-12 08:44:40

+0

@MarkSetchell谢谢。对于术语“厘秒”也是如此;) – Prinzhorn 2016-04-12 09:51:31

我试过ImageMagick identify但它没有给我正确的持续时间。

我发现使用ExifTool

exiftool -Duration image.gif

它会打印出在几秒钟时间的另一个可靠的方法:

Duration : 0.48 s