Как определить длину анимации .gif в миллисекундах - PullRequest
3 голосов
/ 22 марта 2012

Существует ли простой способ приблизительно определить, сколько времени требуется изображение .gif для однократного воспроизведения в Javascript?

Ответы [ 3 ]

4 голосов
/ 22 марта 2012

Команда identify из ImageMagick может предоставить эту информацию:

$ 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

Последняя напечатанная строка должна быть общей длиной анимации.

2 голосов
/ 11 апреля 2016

Принятый ответ не дает точного результата. 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 - задержка в 330 мс.

Под редакцией Марка Сетчелла

На самом деле вы можете извлечь параметр задержки несколько более хирургически (чем при использовании 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 голос
/ 01 сентября 2016

Я попробовал ImageMagick identify, но он не дал мне правильную продолжительность.

Я нашел другой надежный способ, используя ExifTool

exiftool -Duration image.gif

Будет распечатана длительность в секундах:

Duration : 0.48 s

...