Есть ли команда для получения количества кадров в gif?

Есть ли команда для получения количества кадров в gif? У меня есть несколько gif, и я хочу преобразовать их в массивы, но я хочу ограничить массив и структуру массива на основе количества кадров в любом случайном gif, который, как мне представляется, подает мою программу. Я думал, что у imagemagick может быть такой вариант, но я еще не нашел его.

18
задан 23 April 2018 в 04:56

15 ответов

Если у вас установлен ImageMagick, вы можете использовать его команду identify следующим образом

identify /path/to/image.gif

Вы получите детали каждого кадра.

Как было предложено steeldriver, вы можете получить количество изображений в последовательности напрямую, используя спецификатор формата выходного файла %n, однако, скорее, досадно, что он печатает один раз для каждого изображения. Чтобы получить один номер, вы могли бы сделать

identify -format "%n\n" path/to/file.gif | head -1
21
ответ дан 22 May 2018 в 11:18
  • 1
    Oopsie. Я был первым, кто опубликовал ответ, а затем обновил его 3 раза, не увидев ответ, который очень похож на мою последнюю ревизию ... – WinEunuuchs2Unix 23 April 2018 в 04:12

Если у вас установлен ImageMagick, вы можете использовать его команду identify следующим образом

identify /path/to/image.gif

Вы получите детали каждого кадра.

Как было предложено steeldriver, вы можете получить количество изображений в последовательности напрямую, используя спецификатор формата выходного файла %n, однако, скорее, досадно, что он печатает один раз для каждого изображения. Чтобы получить один номер, вы могли бы сделать

identify -format "%n\n" path/to/file.gif | head -1
22
ответ дан 17 July 2018 в 16:22

Если у вас установлен ImageMagick, вы можете использовать его команду identify следующим образом

identify /path/to/image.gif

Вы получите детали каждого кадра.

Как было предложено steeldriver, вы можете получить количество изображений в последовательности напрямую, используя спецификатор формата выходного файла %n, однако, скорее, досадно, что он печатает один раз для каждого изображения. Чтобы получить один номер, вы могли бы сделать

identify -format "%n\n" path/to/file.gif | head -1
22
ответ дан 23 July 2018 в 17:15

Exiftool перечислит количество кадров в качестве части своего обширного вывода.

Это команда и вывод файла Animated Gif:

$ exiftool -b -FrameCount giphy.gif
33

Exiftool 1]

$ 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
16
ответ дан 22 May 2018 в 11:18
  • 1
    Вам не нужно выводить grep exiftool: каждое поле может быть напечатано независимо: exiftool dev/slack-emojinator/gifs/yj_batsu.gif -FrameCount и exiftool dev/slack-emojinator/gifs/yj_batsu.gif -b -FrameCount только для значения – muru 23 April 2018 в 04:55
  • 2
    @muru Спасибо за информацию. Я исправлю ответ. – L. D. James 23 April 2018 в 05:01

Команда one-liner

Вдохновленная этой статьей, используйте эту команду с одним слоем:

$ identify drop_caches.gif | wc -l
128

Для более подробной информации используйте:

identify -verbose filename.gif
[d4 ]

Эта статья позволяет вам загружать ваш .gif и анализировать его многими способами, включая количество кадров в нем:

]

convert, предоставленный Image Magic, преобразует ваш .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
ответ дан 22 May 2018 в 11:18

Способ FFmpeg:

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

Видео Gif - это видео, поэтому инструменты видеоанализа также могут помочь.

5
ответ дан 22 May 2018 в 11:18

Вы также можете использовать команду less, если у вас установлен ImageMagick.

less +G image.gif

Всего кадров - последний # в скобках в image.gif[#]... (начиная с 0); Или подсчитайте с помощью:

less image.gif | wc -l
5
ответ дан 22 May 2018 в 11:18

Exiftool перечислит количество кадров в качестве части своего обширного вывода.

Это команда и вывод файла Animated Gif:

$ exiftool -b -FrameCount giphy.gif 33

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
17
ответ дан 17 July 2018 в 16:22

Способ FFmpeg:

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

Видео Gif - это видео, поэтому инструменты видеоанализа также могут помочь.

5
ответ дан 17 July 2018 в 16:22

Команда one-liner

Вдохновленная этой статьей, используйте эту команду с одним слоем:

$ identify drop_caches.gif | wc -l 128

Для более подробной информации используйте:

identify -verbose filename.gif

Эта статья позволяет вам загружать ваш .gif и анализировать его многими способами, включая количество кадров в нем:

]

convert, предоставленный Image Magic, преобразует ваш .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
ответ дан 17 July 2018 в 16:22

Вы также можете использовать команду less, если у вас установлен ImageMagick.

less +G image.gif

Всего кадров - последний # в скобках в image.gif[#]... (начиная с 0); Или подсчитайте с помощью:

less image.gif | wc -l
5
ответ дан 17 July 2018 в 16:22

Exiftool перечислит количество кадров в качестве части своего обширного вывода.

Это команда и вывод файла Animated Gif:

$ exiftool -b -FrameCount giphy.gif 33

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
17
ответ дан 23 July 2018 в 17:15
  • 1
    Вам не нужно выводить grep exiftool: каждое поле может быть напечатано независимо: exiftool dev/slack-emojinator/gifs/yj_batsu.gif -FrameCount и exiftool dev/slack-emojinator/gifs/yj_batsu.gif -b -FrameCount только для значения – muru 23 April 2018 в 04:55
  • 2
    @muru Спасибо за информацию. Я исправлю ответ. – L. D. James 23 April 2018 в 05:01

Способ FFmpeg:

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

Видео Gif - это видео, поэтому инструменты видеоанализа также могут помочь.

5
ответ дан 23 July 2018 в 17:15

Команда one-liner

Вдохновленная этой статьей, используйте эту команду с одним слоем:

$ identify drop_caches.gif | wc -l 128

Для более подробной информации используйте:

identify -verbose filename.gif

Эта статья позволяет вам загружать ваш .gif и анализировать его многими способами, включая количество кадров в нем:

]

convert, предоставленный Image Magic, преобразует ваш .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
ответ дан 23 July 2018 в 17:15

Вы также можете использовать команду less, если у вас установлен ImageMagick.

less +G image.gif

Всего кадров - последний # в скобках в image.gif[#]... (начиная с 0); Или подсчитайте с помощью:

less image.gif | wc -l
5
ответ дан 23 July 2018 в 17:15

Другие вопросы по тегам:

Похожие вопросы: