ฉันต้องการสร้าง.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 แบบวนซ้ำ