Có một lệnh để có được số lượng khung hình trong một gif?


23

Có một lệnh để có được số lượng khung hình trong một gif? Tôi có một số gifs và tôi muốn chuyển đổi chúng thành mảng, nhưng tôi muốn giới hạn mảng và cấu trúc của mảng dựa trên số lượng khung hình trong bất kỳ gif ngẫu nhiên nào tôi có để cung cấp cho chương trình của mình. Tôi đã nghĩ tưởng tượng có thể có một lựa chọn như vậy, nhưng tôi chưa tìm thấy nó.

Câu trả lời:


24

Nếu bạn đã cài đặt ImageMagick, bạn có thể sử dụng identifylệnh của nó như sau

identify /path/to/image.gif

Bạn sẽ nhận được thông tin chi tiết của từng khung hình.

Theo đề xuất của Steeldo , bạn có thể lấy trực tiếp số lượng hình ảnh trong chuỗi bằng cách sử dụng công %ncụ xác định định dạng đầu ra, tuy nhiên khá khó chịu khi nó xuất hiện để in một lần cho mỗi hình ảnh. Để có được một số duy nhất bạn có thể làm

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

2
Rất tiếc. Tôi là người đầu tiên đăng câu trả lời và sau đó cập nhật nó 3 lần mà không thấy câu trả lời của bạn khá giống với bản sửa đổi cuối cùng của tôi ...
WinEunuuchs2Unix

18

Exiftool sẽ liệt kê Count Frame là một phần của đầu ra mở rộng của nó.

Đây là một lệnh và đầu ra của tệp Gif hoạt hình:

$ exiftool -b -FrameCount giphy.gif
33

Đầu ra exiftool đầy đủ trên 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

2
Bạn không cần grep exiftoolđầu ra: mọi trường đều có thể được in độc lập: exiftool dev/slack-emojinator/gifs/yj_batsu.gif -FrameCountexiftool dev/slack-emojinator/gifs/yj_batsu.gif -b -FrameCountchỉ với giá trị
muru

@muru Cảm ơn thông tin. Tôi sẽ sửa câu trả lời.
LD James

8

Lệnh một lớp

Lấy cảm hứng từ bài viết này , sử dụng lệnh one-liner này:

$ identify drop_caches.gif | wc -l
128

Để biết thêm chi tiết sử dụng:

identify -verbose filename.gif

Trang web này cho phép bạn tải lên .gifvà phân tích nó theo nhiều cách bao gồm số lượng khung hình trong đó:

ezgif.png


Các convertcung cấp bởi Hình ảnh kì ảo sẽ chuyển đổi của bạn .gifvào từng .pnghình ảnh một cho mỗi khung hình:

$ 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

Cách FFmpeg:

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

Video Gif là một video, vì vậy các công cụ phân tích video cũng có thể giúp ích.


Kinh nghiệm của tôi là việc biên dịch FFMPEG để đáp ứng nhu cầu của tôi là một con chó cái, nhưng tôi đánh giá cao thời gian cần thiết để đưa ra câu trả lời này. Tôi hy vọng ai đó thấy nó hữu ích
j0h

@ j0h, FFmpeg không cung cấp phân phối chỉ hoạt động cho việc này?
Vi.

5

Bạn cũng có thể sử dụng lesslệnh nếu bạn đã ImageMagickcài đặt.

less +G image.gif

Tổng số khung là khung cuối cùng #trong ngoặc image.gif[#]...(bắt đầu từ 0); Hoặc đếm với:

less image.gif | wc -l

hấp dẫn .......
j0h
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.