मैं अभी भी छवियों से एक एनिमेटेड GIF कैसे बनाऊंगा (अधिमानतः कमांड लाइन के साथ)?


78

मैं चित्रों के .gifदिए गए सेट से एक एनिमेटेड चित्र बनाना चाहता हूं .jpg

मैं इसे कमांड लाइन से करना पसंद करूंगा, इसलिए कमांड लाइन टूल्स का बहुत स्वागत होगा।


3
काम करता है, हालांकि बहुत स्मृति भूख लगी है। हालांकि संभावित ठिकानों के लोड हैं: askubuntu.com/questions/648244/… askubuntu.com/questions/457351/… askubuntu.com/q/573712/178596 askubuntu.com/.com/estions/566476/… askubuntu.com/questions/ 380,875 / ... askubuntu.com/q/636149/178596
विल्फ़

जवाबों:


87

आप ImageMagick पैकेज का उपयोग कर सकते हैं । कमांड का उपयोग करके इसे स्थापित करें:

sudo apt-get install imagemagick

अब आप gifचित्रों की संख्या ( jpg) का उपयोग करके बना सकते हैं :

convert -delay 20 -loop 0 *.jpg myimage.gif

6
कृपया, यहाँ शामिल करें कि आप gif एनीमेशन आदि का 50% से कैसे आकार लेते हैं। आदि -resize 50%
लेओ लेपोल्ड हर्ट्ज़ o

उबंटू 18.10 इन छवियों के लिए "कैश संसाधनों को समाप्त" के साथ विफल रहा: github.com/cirosantilli/media/blob/master/… संबंधित: superuser.com/questions/1178666/…
Ciro Santilli 新疆

ImageMagick उपयोगकर्ताओं को भी संभावना होगी -deconstruct:। मैंने यह भी पाया है कि ImageMagick बहुत स्मृति भूख लगी है, बेंचमार्क देखें: askubuntu.com/a/1102183/52975
Ciro Santilli 新疆 Image Image Image '事件

convert -delay 0 -loop 0 *.tif myanimated.gifअच्छी तरह से काम किया, 720 tif फ़ाइलों पर
रॉन

46

@Maythux उत्तर को पूरा करने के लिए:

बहुत बड़ी फ़ाइल बनाने से बचने के लिए, आप -resizeविकल्प का उपयोग कर सकते हैं :

मेरे मामले में, मेरे पास 4608x3456 चित्र हैं और 32 चित्रों के लिए उत्पन्न gif 300M से अधिक था

convert -resize 20% -delay 20 -loop 0 *.jpg myimage.gif

या

convert -resize 768x576 -delay 20 -loop 0 *.jpg myimage.gif

* .Jpg का ध्यान रखें

*.jpg संख्यात्मक मानों के साथ व्यवहार करते समय आप थोड़ा सा चूसते हैं, आप बिना पिए हुए चित्रों के साथ एक जीआईएफ उत्पन्न कर सकते हैं।

$ 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

मैक ओएस एक्स पर संख्यात्मक रूप से छंटनी काफी मुश्किल है, हालांकि, मुझे लगता है कि आपको एक कस्टम स्क्रिप्ट बनाने की आवश्यकता होगी।


4
आप अपने * .jpg मुद्दे को ज़ीरो के साथ आगे के पेडिंग नंबरों से बचा सकते हैं। "1.jpg" के बजाय "01.jpg", और इसी तरह। यदि आप ट्रिपल अंक प्राप्त करते हैं, तो "001.jpg", "010.jpg", आदि
bigreddmachine

2
फ़ाइल नाम अनुक्रम समस्या के आसपास कई तरीके हैं। सहित find, sortब्रेस विस्तार, और इतने पर। lsउपकरण बात इस तरह का के लिए बेहद अनुपयुक्त है। का उपयोग करें find। सीखने की अवस्था थोड़ी है, लेकिन यह इसके लायक है।
आवाजें

कुछ उपयोगकर्ताओं को दृश्य के साथ फाइलनाम के संपादन में रुचि हो सकती है: github.com/laurent22/massren
ग्राहम पी हीथ

इसे खत्म करने में उम्र लगती है। क्या कोई क्रिया विकल्प है?
हमाराजोस

21

मेरे पास टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा नहीं है, लेकिन फाइल नामों को संशोधित करने के बजाय आप फ़ाइल नामों का विस्तार करने के लिए अपने शेल प्राप्त करने के लिए ग्लोबिंग का उपयोग कर सकते हैं

convert -resize 50% -delay 10 -loop 0 image_{0..99}.jpg output.gif

11

GIMP

इसे आप GIMP के साथ आसानी से कर सकते हैं। यदि यह पहले से स्थापित नहीं है तो पहले इसे इंस्टॉल करें

sudo apt-get install gimp

Gif बनाना

GIMP से फाइल पर जाएं -> परतों के रूप में खोलें, सभी पीएनजी को अपनी परत पर खोलने के लिए।

परत के रूप में खोलें

यहां से आप लेयर्स पर एडिट कर सकते हैं और एक बार कर लेने के बाद File -> Export As पर जाएं । संवाद से फ़ाइल प्रकार को GIF पर सेट करना सुनिश्चित करें।

GIF के लिए फ़ाइल प्रकार सेट करें

वहां से आप GIF एक्सपोर्ट ऑप्शन में जाएंगे। 'ऐस एनिमेशन ' विकल्प पर टिक करें और आवश्यकतानुसार पैरामीटर सेट करें।

GIF निर्यात विकल्प


7

ffmeg solution + परीक्षण डेटा

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#14324622 और 256 1024x1024 PNG चित्र शामिल हैं।

और यहां एक और परीक्षण डेटा है जिसे आप सीधे अपने ब्राउज़र में उत्पन्न कर सकते हैं! https://stackoverflow.com/questions/19235286/convert-html5-canvas-sequence-to-a-video-file/57153718#57153718

यहाँ छवि विवरण दर्ज करें

ffmpegमैं जिन महत्वपूर्ण विकल्पों पर प्रकाश डालना चाहता हूं वे हैं:

  • -pattern_type glob: छवियों का चयन करने के लिए सुविधाजनक तरीका है

  • -framerate 60: इनपुट छवियों पर 60 एफपीएस मान लें, और उसी एफपीएस का उत्पादन करें।

    ffmpeg अन्यथा नहीं जान सकते, क्योंकि कोई एफपीएस डेटा छवियों में नहीं है जैसा कि वीडियो प्रारूपों में है।

    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-ages

यह सभी देखें:

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: जीआईएफ छवियों को जीआईएफ को छोटा करने के लिए पिछले फ्रेम से केवल न्यूनतम संशोधित आयत हो सकता है।

    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। इसलिए इसमें सिर्फ मध्य त्रिकोण है।

    यह भी देखें: मैं ImageMagick का उपयोग करके एनिमेटेड GIF फ़ाइल का आकार कैसे बदल सकता हूं?

  • -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

जिससे हम देखते हैं कि:

  • ImageMagick ने 2.6Gb RAM का उपयोग किया और लगभग 1 मिनट का समय लिया
  • ffmpeg ने 100Mb RAM का उपयोग किया और 4 सेकंड का समय लिया

टेस्ट हार्डवेयर: लेनोवो थिंकपैड P51 लैपटॉप , इंटेल कोर i7-7820HQ, 32GB (16 + 16) DDR4 2400MHz SODIMM, 512GB SSD PCIe TLC OPAL2।


Upvoted और पसंद किया!, महान जवाब, मेरे पास एक छोटा सा अनुवर्ती प्रश्न है। मेरे पास इतनी उच्च गुणवत्ता वाली छवियां नहीं हैं, और मैंने उपयोग नहीं किया -r और -vआदेश दिया, फिर भी आउटपुट जीआईएफ मूल पीएनजी फाइलों की तुलना में बहुत कम गुणवत्ता का है। Pif फाइल्स की तरह ही जिफ की क्वालिटी कैसे रखें?
astro123

हाय @ astro123 गुणवत्ता कम कैसे है? छोटी छवि का आकार, या कम फ़्रेम, या कुछ और (GIF दोषरहित रूप से स्पष्ट रूप से उपयोग करता है, इसलिए इससे अधिक संपीड़न नहीं हो सकता है)? कोशिश करो -framerate 60 -r 60। ImageMagick टूल के साथ उत्पन्न GIF और इनपुट छवियों का निरीक्षण identifyकरें और यह जानने की कोशिश करें कि क्या चल रहा है।
सिरो सेंटिल्ली 新疆 改造 iro 六四

4

आप इमेजमैगिक पैकेज में शामिल कन्वर्ट नामक प्रोग्राम का उपयोग कर सकते हैं। यह कमांड लाइन संचालित है, लेकिन उपयोग करने में बहुत आसान है। इसे या तो सॉफ़्टवेयर केंद्र के माध्यम से स्थापित करें, या कमांड प्रॉम्प्ट पर जाएं और टाइप करें

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

* नोट करें कि उपरोक्त उदाहरण इमेज मैजिक उदाहरणों से सीधा है


1
मैं एक लूपिंग GIF में 40 पीएनजी चित्र कैसे करूं? सभी फ़ोल्डर में / घर / fusion809 / दस्तावेज़ / चित्र
BH2017

1
@ BH2017: convert -delay 20 -loop 0 *.png out.gifएक लूपिंग GIF बनाता है।
अनटुब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.