ฉันต้องการสร้าง.gif
ภาพเคลื่อนไหวจากชุด.jpg
รูปภาพที่กำหนด
ฉันต้องการทำจากบรรทัดคำสั่งดังนั้นเครื่องมือบรรทัดคำสั่งจะยินดีมาก
ฉันต้องการสร้าง.gif
ภาพเคลื่อนไหวจากชุด.jpg
รูปภาพที่กำหนด
ฉันต้องการทำจากบรรทัดคำสั่งดังนั้นเครื่องมือบรรทัดคำสั่งจะยินดีมาก
คำตอบ:
คุณสามารถใช้แพ็คเกจImageMagick ติดตั้งโดยใช้คำสั่ง:
sudo apt-get install imagemagick
ตอนนี้คุณสามารถสร้างgif
จากจำนวนรูปภาพ ( jpg
) โดยใช้:
convert -delay 20 -loop 0 *.jpg myimage.gif
-resize 50%
ฯลฯ
-deconstruct
มีแนวโน้มที่จะยังต้องการ: ฉันยังพบว่า ImageMagick หิวมากหน่วยความจำดูมาตรฐาน: askubuntu.com/a/1102183/52975
convert -delay 0 -loop 0 *.tif myanimated.gif
ทำงานได้เป็นอย่างดีในไฟล์ 720 tif
หากต้องการคำตอบ @Maythux ให้สมบูรณ์:
-resize
ตัวเลือก:ในกรณีของฉันฉันมีภาพ 4608x3456 และ gif ที่สร้างขึ้นมีมากกว่า 300M สำหรับ 32 ภาพ
convert -resize 20% -delay 20 -loop 0 *.jpg myimage.gif
หรือ
convert -resize 768x576 -delay 20 -loop 0 *.jpg myimage.gif
*.jpg
ดูดบิตเมื่อจัดการกับค่าตัวเลขคุณอาจสร้าง gif ด้วยภาพที่ไม่ได้เรียง
$ ls|cat
21-33-26_1.jpg
21-33-26_10.jpg // <--- this one
21-33-26_2.jpg
21-33-26_3.jpg
21-33-26_4.jpg
21-33-26_5.jpg
21-33-26_6.jpg
21-33-26_7.jpg
21-33-26_8.jpg
21-33-26_9.jpg
21-33-28_1.jpg // <--- should be here
21-33-28_2.jpg
21-33-28_3.jpg
...
ในฐานะที่เป็นภาพที่ถูกนำอย่างรวดเร็ว (10 / s) พวกเขาทั้งหมดมีการปรับเปลี่ยนเวลาเดียวกันและคุณไม่สามารถหลอกใช้ls -t
ตัวอย่างเช่น บน Ubuntu คุณสามารถใช้ls -v
แทนได้เช่น:
convert -resize 768x576 -delay 20 -loop 0 `ls -v` myimage.gif
การเรียงลำดับตัวเลขค่อนข้างยุ่งยากใน Mac OS X แต่ฉันคิดว่าคุณจะต้องสร้างสคริปต์ที่กำหนดเอง
find
,, sort
การขยายรั้งและอื่น ๆ ls
เครื่องมือเป็นฉาวโฉ่ไม่เหมาะสมสำหรับชนิดของสิ่งนี้ find
ใช้ มีช่วงของการเรียนรู้เล็กน้อย แต่มันก็คุ้มค่า
ฉันไม่มีชื่อเสียงพอที่จะแสดงความคิดเห็น แต่แทนที่จะแก้ไขชื่อไฟล์คุณสามารถใช้ globbing เพื่อรับเชลล์ของคุณเพื่อขยายชื่อไฟล์
convert -resize 50% -delay 10 -loop 0 image_{0..99}.jpg output.gif
คุณสามารถทำสิ่งนี้ได้อย่างง่ายดายด้วย GIMP ก่อนติดตั้งถ้ายังไม่ได้ติดตั้งด้วย
sudo apt-get install gimp
จาก GIMP ให้ไปที่ไฟล์ -> เปิดเป็นเลเยอร์เพื่อเปิด png ทั้งหมดในเลเยอร์ของตนเอง
จากที่นี่คุณสามารถดำเนินการแก้ไขในชั้นและทำครั้งเดียวให้ไปที่ File -> ส่งออกเป็น จากกล่องโต้ตอบให้แน่ใจว่าได้ตั้งประเภทไฟล์เป็น GIF
จากนั้นคุณจะไปที่ตัวเลือกการส่งออก GIF ทำเครื่องหมายตัวเลือก' เป็นภาพเคลื่อนไหว ' และตั้งค่าพารามิเตอร์ตามต้องการ
โซลูชัน ffmeg + ข้อมูลการทดสอบ
ตั้งแต่ Ubuntu 18.10, ffpmeg 4.0.2-2, ImageMagick 6.9.10-8 ฉันพบว่า ffmpeg นั้นเร็วกว่ามากและใช้หน่วยความจำน้อยกว่ามาก
คำสั่งการแปลงที่ง่ายที่สุดคือ:
ffmpeg \
-framerate 60 \
-pattern_type glob \
-i '*.png' \
-r 15 \
-vf scale=512:-1 \
out.gif \
;
คุณสามารถรับข้อมูลการทดสอบของฉันด้วย:
wget -O opengl-rotating-triangle.zip https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.zip?raw=true
unzip opengl-rotating-triangle.zip
cd opengl-rotating-triangle
ข้อมูลการทดสอบถูกสร้างขึ้นด้วย: https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292และมีรูปภาพขนาด 1024 1024101024 PNG
และนี่คือข้อมูลทดสอบอื่นที่คุณสามารถสร้างได้โดยตรงจากเบราว์เซอร์ของคุณ! https://stackoverflow.com/questions/19235286/convert-html5-canvas-sequence-to-a-video-file/57153718#57153718
ffmpeg
ตัวเลือกที่สำคัญที่ฉันต้องการเน้นคือ:
-pattern_type glob
: วิธีเลือกภาพที่สะดวก
-framerate 60
: สมมติว่า 60 FPS สำหรับภาพที่นำเข้าและส่งออก FPS เดียวกัน
ffmpeg
ไม่ทราบเป็นอย่างอื่นเนื่องจากไม่มีข้อมูล FPS อยู่ในภาพเนื่องจากมีอยู่ในรูปแบบวิดีโอ
เฟรมอินพุต 256 เฟรมใช้เวลาประมาณ 4 วินาทีจึงจะเสร็จสิ้น
-r 15
: ไม่จำเป็น. เลือกหนึ่งภาพทุกๆ 4 ภาพเพื่อลดขนาด ( 4 == 60 / 15
)
ด้วยมันidentify out.gif
บอกว่า GIF มีเพียง 64 เฟรม
ยังคงใช้เวลาในการเล่น 4 วินาทีดังนั้นความล่าช้าจึงเปลี่ยนแปลงเพื่อให้สิ่งต่าง ๆ ตรงกัน
-vf scale=512:-1
: ไม่จำเป็น. ตั้งค่าความกว้างความสูงของสเกลตามสัดส่วนโดยปกติเพื่อลดขนาดและประหยัดพื้นที่
เพื่อให้ ImageMagick ทำงานได้ฉันต้องแก้ไขขีด จำกัด ของดิสก์และหน่วยความจำ/etc/ImageMagick-6/policy.xml
ตามที่อธิบายไว้ที่: https://superuser.com/questions/1178666/imagemagick-convert-quits-after-some-pages
ดูสิ่งนี้ด้วย:
ImageMagick เทียบกับมาตรฐาน ffmpeg
ฉันเปรียบเทียบคำสั่ง:
/usr/bin/time -v convert *.png -deconstruct -delay 1.6 out-convert.gif
/usr/bin/time -v ffmpeg \
-framerate 60 \
-pattern_type glob \
-i '*.png' \
out-ffmpeg.gif \
;
คำสั่งถูกสร้างขึ้นเพื่อสร้างผลลัพธ์ที่ใกล้เคียงที่สุดเพื่อให้การเปรียบเทียบมีผล:
/usr/bin/time -v
: ใช้เพื่อค้นหาการใช้หน่วยความจำสูงสุดตามที่อธิบายไว้ที่: https://stackoverflow.com/questions/774556/peak-memory-usage-of-a-linux-unix-process
-deconstruct
: รูปภาพ GIF สามารถมีเพียงสี่เหลี่ยมผืนผ้าที่ปรับเปลี่ยนน้อยที่สุดจากเฟรมก่อนหน้าเพื่อทำให้ GIF มีขนาดเล็ก
ffmpeg
คำนวณส่วนต่างเหล่านั้นตามค่าเริ่มต้น แต่ ImageMagick ไม่ได้ยกเว้นว่า-deconstruct
ใช้
โดยทั่วไปคุณจะต้องการใช้ตัวเลือกนั้นทุกครั้งกับ ImageMagick
เราสามารถสังเกตเห็นความแตกต่างด้วย:
identify out.gif
ด้วยเวอร์ชันบีบอัดเฟรมทั้งหมดจะมีขนาดเล็กกว่าเฟรมเริ่มต้นเช่น:
out.gif[0] GIF 1024x1024 1024x1024+0+0 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
out.gif[1] GIF 516x516 1024x1024+252+257 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
out.gif[2] GIF 515x520 1024x1024+248+257 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
ในตัวอย่างนี้เฟรมที่สองเป็นเพียง516x516
แทน 1024x1024 252+257
เต็มรูปแบบและจะอยู่ที่ชดเชย มันมีแค่สามเหลี่ยมกลาง
ดูเพิ่มเติม: ฉันจะปรับขนาดไฟล์ภาพเคลื่อนไหว GIF โดยใช้ ImageMagick ได้อย่างไร
-delay
: ค่าที่ตรงกับ 60FPS ffmpeg
ของ ไม่ควรสำคัญสำหรับประสิทธิภาพของการแปลง แต่ฉันไม่ต้องการเสี่ยง
GIF เอาต์พุตมีขนาดเท่ากันและมีลักษณะเหมือนกัน
เราได้รับ ImageMagick:
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:56.16
Maximum resident set size (kbytes): 2676856
และสำหรับ ffmpeg:
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:04.41
Maximum resident set size (kbytes): 97172
จากที่เราเห็นว่า:
ฮาร์ดแวร์ทดสอบ: แล็ปท็อป Lenovo ThinkPad P51 , Intel Core i7-7820HQ, 32GB (16 + 16) DDR4 2400MHz SODIMM, 512GB SSD PCIe TLC OPAL2
-r
และ-v
คำสั่งยังไง gif ที่ออกมาก็มีคุณภาพต่ำกว่าไฟล์ png ดั้งเดิมมาก จะรักษาคุณภาพของ gif ให้เหมือนกับไฟล์ png ที่กำหนดได้อย่างไร
-framerate 60 -r 60
ดู ตรวจสอบ GIF และภาพที่สร้างขึ้นด้วยเครื่องมือ ImageMagick เช่นidentify
ลองและค้นหาสิ่งที่เกิดขึ้น
คุณสามารถใช้โปรแกรมที่เรียกว่าการแปลงที่รวมอยู่ในแพ็คเกจ imagemagick มันเป็นบรรทัดคำสั่งขับเคลื่อน แต่ใช้งานง่ายมาก ติดตั้งผ่านศูนย์ซอฟต์แวร์หรือไปที่พร้อมท์คำสั่งและพิมพ์
sudo apt-get install imagemagick
ตอนนี้เพื่อสร้าง. gif
convert -delay 100 -size 100x100 xc:SkyBlue \
-page +5+10 balloon.gif -page +35+30 medical.gif \
-page +62+50 present.gif -page +10+55 shading.gif \
-loop 0 animation.gif
* หมายเหตุตัวอย่างด้านบนนี้มาจากImage Magick samples
convert -delay 20 -loop 0 *.png out.gif
สร้าง GIF แบบวนซ้ำ