มีคำสั่งให้รับจำนวนเฟรมใน gif หรือไม่?


23

มีคำสั่งให้รับจำนวนเฟรมใน gif หรือไม่? ฉันมี gif บางตัวและฉันต้องการแปลงให้เป็นอาร์เรย์ แต่ฉันต้องการ จำกัด อาร์เรย์และโครงสร้างของอาร์เรย์ตามจำนวนเฟรมใน gif สุ่มใด ๆ ที่ฉันเกิดขึ้นเพื่อป้อนโปรแกรมของฉัน ฉันคิดว่า imagemagick อาจมีตัวเลือกดังกล่าว แต่ฉันยังไม่พบมัน

คำตอบ:


23

หากคุณติดตั้ง ImageMagick ไว้คุณสามารถใช้identifyคำสั่งดังต่อไปนี้

identify /path/to/image.gif

คุณจะได้รับรายละเอียดของแต่ละเฟรม

ตามที่แนะนำโดยsteeldriverคุณสามารถรับจำนวนภาพตามลำดับได้โดยตรงโดยใช้ตัว%nระบุรูปแบบผลลัพธ์ หากต้องการรับหมายเลขเดียวคุณสามารถทำได้

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

2
Oopsie ฉันเป็นคนแรกที่โพสต์คำตอบแล้วอัปเดต 3 ครั้งโดยไม่เห็นคำตอบของคุณซึ่งคล้ายกับการแก้ไขครั้งล่าสุดของฉัน ...
WinEunuuchs2Unix

18

ExiftoolจะแสดงFrame Countเป็นส่วนหนึ่งของเอาต์พุตที่กว้างขวาง

นี่เป็นคำสั่งและเอาต์พุตของไฟล์ Animated Gif:

$ exiftool -b -FrameCount giphy.gif
33

เอาต์พุต exiftool แบบเต็มบน 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
คุณไม่จำเป็นต้องgrep exiftoolแสดงผลลัพธ์: ทุกฟิลด์สามารถพิมพ์ได้อย่างอิสระ: exiftool dev/slack-emojinator/gifs/yj_batsu.gif -FrameCountและexiftool dev/slack-emojinator/gifs/yj_batsu.gif -b -FrameCountเพื่อความคุ้มค่า
muru

@muru ขอบคุณสำหรับข้อมูล ฉันจะแก้ไขคำตอบ
LD James

8

คำสั่งหนึ่งซับ

แรงบันดาลใจจากบทความนี้ใช้คำสั่งหนึ่งซับ:

$ identify drop_caches.gif | wc -l
128

สำหรับรายละเอียดเพิ่มเติมใช้:

identify -verbose filename.gif

เว็บไซต์นี้ให้คุณอัปโหลด.gifและวิเคราะห์ได้หลายวิธีรวมถึงจำนวนเฟรมในเว็บไซต์:

ezgif.png


convertให้บริการโดยภาพเมจิกจะแปลงของคุณ.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

วิธี FFmpeg:

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

วิดีโอ Gif เป็นวิดีโอดังนั้นเครื่องมือวิเคราะห์วิดีโออาจช่วยได้เช่นกัน


ประสบการณ์ของฉันคือการรวบรวม FFMPEG เพื่อตอบสนองความต้องการของฉันเป็นสุนัขตัวเมีย แต่ฉันรู้สึกซาบซึ้งกับเวลาที่ใช้ในการตอบ
คำถาม

@ j0h, FFmpeg ที่ distro ไม่ได้ให้มาใช้ได้กับสิ่งนี้ใช่ไหม
วิ

5

คุณสามารถใช้lessคำสั่งได้เช่นกันหากImageMagickติดตั้งแล้ว

less +G image.gif

เฟรมรวมเป็นเฟรมสุดท้ายของ#วงเล็บ image.gif[#]...(เริ่มจาก 0); หรือนับด้วย:

less image.gif | wc -l

ที่รัก .......
j0h
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.