जवाबों:
प्रथम रन:
convert do.gif -coalesce temporary.gif
फिर
convert -size <original size> temporary.gif -resize 24x24 smaller.gif
gifsicle --resize 24x24 > do-24.gif
यह भी कर सकते हैं
-coalesce
+ -deconstruct
के बाद -coalesce
, आप संभवतः जोड़ना चाहते हैं -deconstruct
:
convert in.gif -coalesce -resize 256x -deconstruct out-deconstruct.gif
समस्या का मूल कारण यह है कि आपके इनपुट जीआईएफ को ठीक से छोटा किया गया था: जीआईएफ अगले फ्रेम को एक ऑफसेट पर पिछले एक से केवल संशोधित आयत बनाने की अनुमति देता है।
-coalesce
फिर सभी फ़्रेमों को मूल आकार में विस्तारित करता है, जो आकार परिवर्तन का काम करता है, लेकिन यह आपके इनपुट छवि के रूप में फिर से फ़्रेमों को फिर से संपीड़ित नहीं करता है: इसके -deconstruct
लिए आवश्यक है!
इस उत्तर से परीक्षण डेटा का उपयोग करना: मैं अभी भी छवियों से एक एनिमेटेड GIF कैसे बनाऊंगा (अधिमानतः कमांड लाइन के साथ)? हम इसे स्पष्ट रूप से देख सकते हैं identify
:
$ identify out-convert.gif | head -n 3
out-convert.gif[0] GIF 1024x1024 1024x1024+0+0 8-bit sRGB 256c 16.7865MiB 0.020u 0:00.019
out-convert.gif[1] GIF 516x516 1024x1024+252+257 8-bit sRGB 256c 16.7865MiB 0.030u 0:00.019
out-convert.gif[2] GIF 515x520 1024x1024+248+257 8-bit sRGB 256c 16.7865MiB 0.030u 0:00.019
$ convert out-convert.gif -resize 256x out.gif
$ identify out.gif | head -n 3
out.gif[0] GIF 256x256 256x256+0+0 8-bit sRGB 256c 5.0479MiB 0.000u 0:00.009
out.gif[1] GIF 256x256 256x256+125+128 8-bit sRGB 256c 5.0479MiB 0.000u 0:00.009
out.gif[2] GIF 256x258 256x256+123+128 8-bit sRGB 256c 5.0479MiB 0.000u 0:00.009
$ convert out-convert.gif -coalesce -resize 256x out-coalesce.gif
$ identify out-coalesce.gif | head -n 3
out-coalesce.gif[0] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.97683MiB 0.010u 0:00.009
out-coalesce.gif[1] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.97683MiB 0.010u 0:00.009
out-coalesce.gif[2] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.97683MiB 0.010u 0:00.009
$ convert out-convert.gif -coalesce -resize 256x -deconstruct out-deconstruct.gif
$ identify out-deconstruct.gif | head -n 3
out-deconstruct.gif[0] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.87942MiB 0.010u 0:00.010
out-deconstruct.gif[1] GIF 135x135 256x256+60+61 8-bit sRGB 256c 1.87942MiB 0.010u 0:00.010
out-deconstruct.gif[2] GIF 135x136 256x256+59+61 8-bit sRGB 256c 1.87942MiB 0.010u 0:00.010
out.gif
बाहर coalesce.gif
बाहर deconstruct.gif
सबसे पहले, हम देखते हैं कि इनपुट फ़ाइल कैसे होती है, out-convert.gif
वास्तव में संकुचित थी, क्योंकि फ्रेम 2 केवल 516x516
ऑफसेट पर है 252+257
, जबकि पूर्ण आकार का फ्रेम 1 है 1024x1024
।
फिर, यदि हम तीन रूपांतरणों की तुलना करते हैं:
out.gif
: सभी फ्रेम 256x256
5MiB, TODO में बड़े या बड़े और विशाल क्यों हैं?
दृश्य रूप से गलत है, क्योंकि उन लगभग 256x256
फ़्रेमों में एक गैर-शून्य ऑफसेट है, जैसे 125+128
फ्रेम 2 के लिए!
out-coalesce.gif
: सभी फ्रेम हैं 256x256
और सही ऑफसेट है 0+0
।
आउटपुट नेत्रहीन रूप से सही दिखता है, लेकिन आउटपुट फ़ाइल का आकार 2.0 MiB है, जो इससे बड़ा है out-deconstruct.gif
out-deconstruct.gif
: संपीड़ित फ़्रेम, अंतिम आउटपुट आकार 1.9 MiB।
की तुलना में बहुत छोटा नहीं है out-coalesce.gif
, लेकिन मुझे लगता है कि यह सिर्फ इसलिए है क्योंकि काली जमीन वास्तव में अच्छी तरह से संपीड़ित करती है, और यह सामान्य रूप से बहुत महत्वपूर्ण हो सकती है।
ffmpeg और gifsicle
मैंने निम्नलिखित आदेश भी आज़माए:
ffmpeg -i out-convert.gif -vf scale=256:-1 out-ffmpeg-small.gif
gifsicle --resize 256x256 out-convert.gif > out-gifsicle.gif
और दोनों ने 1.5 मि.बी. आउटपुट को देखते हुए और भी छोटा उत्पादन किया।
यह भी देखें: मैं अभी भी छवियों से एक एनिमेटेड GIF कैसे बना सकता हूं (अधिमानतः कमांड लाइन के साथ)?
TODO: वे इसे से छोटा क्यों बना सकते हैं convert
? क्या वे सिर्फ बेहतर न्यूनतम न्यूनतम आयतों, या कुछ और का चयन कर रहे हैं?
उबंटू 18.10, ffpmeg 4.0.2-2, ImageMagick 6.9.10-8 में परीक्षण किया गया।
मैं इमेजमैजिक समाधान की तलाश में था क्योंकि मैं इससे परिचित हूं, लेकिन अंत में मैं @ सैम के सुझाव के साथ गया gifsicle
। यह वही हुआ जो मैं चाहता था, कोई परेशानी नहीं।
इतने सारे तरीकों से परिणामी फ़ाइल आकार का अनुकूलन कर सकते हैं, लेकिन मैं सिर्फ आकार को कम करने और रंगों की संख्या को कम करने के साथ चला गया। एक जादू की तरह काम किया:
gifsicle --resize 48x48 --colors 16 original.gif > smaller.gif
-coalesce
"प्रत्येक बिंदु पर एनीमेशन का एक पूरा दृश्य बनाता है, एक एनीमेशन अनुक्रम के बजाय एक सच्ची फिल्म पट्टी की तरह एक सा है। इस तरह के एक अनुक्रम, जिसे एक Coalesced एनीमेशन के रूप में जाना जाता है , अध्ययन, संपादन, संशोधित और पुन: अनुकूलन के लिए बहुत आसान है।"