GIF’teki kare sayısını almak için bir komut var mı?


23

GIF’teki kare sayısını almak için bir komut var mı? Bazı giflerim var ve bunları dizilere dönüştürmek istiyorum, ancak dizimi ve dizimin yapısını, programımı beslemek için meydana geldiğim herhangi bir rastgele gif içindeki kare sayısına bağlı olarak sınırlandırmak istiyorum. Imaemick'in böyle bir seçeneği olabileceğini düşünüyordum, ancak henüz bulamadım.

Yanıtlar:


23

ImageMagick'i yüklediyseniz, identifykomutunu aşağıdaki gibi kullanabilirsiniz.

identify /path/to/image.gif

Her karenin ayrıntılarını alacaksınız.

Steeldriver tarafından önerildiği gibi , dizideki görüntülerin sayısını %nçıktı format belirticisini kullanarak doğrudan alabilirsiniz , ancak her görüntü için bir kez basması oldukça can sıkıcı görünmektedir. Tek bir numara almak için yapabileceğiniz

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

2
Oppssss. Cevap yazan ilk kişi oldum ve daha sonra son revizyonuma oldukça benzeyen cevabınızı görmeden 3 kez güncelledim ...
WinEunuuchs2Unix

18

Exiftool , Çerçeve Sayısı'nı listeler , kapsamlı çıktısının bir parçası olarak .

Bu bir Animasyonlu Gif dosyasının bir komut ve çıktısı:

$ exiftool -b -FrameCount giphy.gif
33

GIF'te tam exiftool çıkışı:

$ 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Çıktısı almanıza gerek yok : her alan bağımsız olarak basılabilir: exiftool dev/slack-emojinator/gifs/yj_batsu.gif -FrameCountve exiftool dev/slack-emojinator/gifs/yj_batsu.gif -b -FrameCountsadece değer için
muru

@muru Bilgi için teşekkürler. Ben cevabı düzelteceğim.
LD James

8

Bir liner komutu

Bu makaleden esinlenerek bu tek satırlık komutu kullanın:

$ identify drop_caches.gif | wc -l
128

Daha fazla ayrıntı için kullanın:

identify -verbose filename.gif

Bu web sitesi, yüklemenizi sağlar .gifve içindeki kare sayısı da dahil olmak üzere birçok yolu analiz eder:

ezgif.png


convertTarafından sağlanan Görüntü Magic Şu Verilerinizi dönüştürür .gifbireysel içine .pnggörüntüleri her çerçevede bir tane:

$ 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 yolu:

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

Gif video bir videodur, bu nedenle video analiz araçları da yardımcı olabilir.


Tecrübelerim FFMPEG'i ihtiyaçlarımı karşılamak için derlemenin bir fahişe olduğunu, ancak bu
cevabı

@ j0h, dağıtılmamış FFmpeg sadece bunun için çalışmıyor mu?
Vi.

5

Eğer yüklediyseniz lessde komutu kullanabilirsiniz ImageMagick.

less +G image.gif

Toplam çerçeveler #parantez içindeki son sayıdır image.gif[#]...(0'dan başlar); Veya:

less image.gif | wc -l

ilgi çekici .......
j0h '
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.