Apakah ada perintah untuk mendapatkan jumlah frame dalam gif?

23

Apakah ada perintah untuk mendapatkan jumlah frame dalam gif? Saya punya beberapa gif, dan saya ingin mengubahnya menjadi array, tetapi saya ingin membatasi array, dan struktur array berdasarkan jumlah frame dalam sembarang gif acak yang kebetulan saya beri makan program saya. Saya berpikir imagemagick mungkin memiliki opsi seperti itu, tetapi saya belum menemukannya.

j0h
sumber

Jawaban:

24

Jika Anda memasang ImageMagick, Anda dapat menggunakan identifyperintahnya sebagai berikut

identify /path/to/image.gif

Anda akan mendapatkan detail setiap frame.

Seperti yang disarankan oleh steeldriver , Anda bisa mendapatkan jumlah gambar dalam urutan secara langsung menggunakan %nspecifier format output, namun agak mengganggu tampaknya mencetaknya sekali untuk setiap gambar. Untuk mendapatkan nomor tunggal bisa Anda lakukan

identify -format "%n\n" path/to/file.gif | head -1
pomsky
sumber
2
Oopsi. Saya adalah orang pertama yang mengirim jawaban dan kemudian memperbaruinya 3 kali tanpa melihat jawaban Anda yang sangat mirip dengan revisi terakhir saya ...
WinEunuuchs2Unix
18

Exiftool akan mencantumkan Jumlah Bingkai sebagai bagian dari outputnya yang luas.

Ini perintah dan keluaran file Gif Animasi:

$ exiftool -b -FrameCount giphy.gif
33

Output exiftool penuh pada gif:

$ 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
LD James
sumber
2
Anda tidak perlu grep exiftoolmenampilkan: setiap bidang dapat dicetak secara independen: exiftool dev/slack-emojinator/gifs/yj_batsu.gif -FrameCountdan exiftool dev/slack-emojinator/gifs/yj_batsu.gif -b -FrameCounthanya untuk nilainya
muru
@muru Terima kasih atas informasinya. Saya akan memperbaiki jawabannya.
LD James
8

Perintah satu-liner

Terinspirasi oleh artikel ini , gunakan perintah satu-baris ini:

$ identify drop_caches.gif | wc -l
128

Untuk lebih jelasnya gunakan:

identify -verbose filename.gif

Situs web ini memungkinkan Anda mengunggah .gifdan menganalisanya dengan banyak cara termasuk jumlah bingkai di dalamnya:

ezgif.png


Yang convertdisediakan oleh Image Magic akan mengubah gambar Anda .gifmenjadi .pngsatu per satu untuk setiap frame:

$ 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
WinEunuuchs2Unix
sumber
7

Cara FFmpeg:

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

Video gif adalah video, jadi alat analisis video juga dapat membantu.

Vi.
sumber
Pengalaman saya adalah bahwa mengkompilasi FFMPEG untuk memenuhi kebutuhan saya adalah menyebalkan, tetapi saya sangat menghargai waktu yang diperlukan untuk membuat jawaban ini. Saya harap seseorang menemukan itu berguna
j0h
@ j0h, Bukankah FFmpeg yang disediakan distro hanya bekerja untuk ini?
Vi.
5

Anda juga dapat menggunakan lessperintah jika sudah ImageMagickmenginstal.

less +G image.gif

Total frame adalah #tanda kurung terakhir image.gif[#]...(mulai dari 0); Atau hitung dengan:

less image.gif | wc -l
αғsнιη
sumber
menarik .......
j0h