मैंने जो जीआईएफ बनाया है वह इतना धीमा क्यों है?


33

मैं एक एकल gif में pngs का संग्रह चालू करने के लिए ImageMagick का उपयोग कर रहा हूं। मैं चाहता हूं कि यह जिफ जल्द से जल्द लूप करे।

यह लगभग वह उत्पादन है जिसकी मुझे उम्मीद है ( विकिपीडिया के सौजन्य से ):

अपेक्षित उत्पादन

यह वह आउटपुट है जो मुझे वास्तव में मिलता है:

वास्तविक उत्पादन

मेरे ब्राउज़र (फ़ायरफ़ॉक्स 17) पर, अपेक्षित gif वास्तविक gif से दोगुना से अधिक तेज़ चलता है। यह मुझे आश्चर्यचकित करता है, क्योंकि मैंने निर्दिष्ट किया है कि प्रत्येक फ्रेम में 0 विलंब होना चाहिए।

पहले मैंने विकिपीडिया से उधार ली गई जिफ़ में विस्फोट करके 36 png बनाए:

--caution: command generates 36 pngs
convert.exe newton.gif newton_%d.png

तब मैं coalesceएक gif में pngs को फिर से जोड़ देता था।

convert.exe -dispose none -delay 0 newton_%d.png[0-35] -coalesce output.gif

identify पुष्टि करता है कि प्रत्येक फ्रेम में कोई देरी नहीं है:

identify.exe -format "%T, " output.gif
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

यह वास्तव में, मूल से कम देरी है:

identify.exe -format "%T, " newton.gif
5, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2,

वास्तविक gif में अपेक्षित gif से कम विलंब होता है। तो क्यों वास्तविक gif के रूप में तेजी से उम्मीद gif दो बार है?


1
जिज्ञासा से बाहर, क्या होता है यदि आप 0 के बजाय 1 को देरी सेट करते हैं?
मैगिल्सन

1
फ्रेम-दर की समस्या की तरह दिखता है।
स्नेकडॉक

@mgilson, मैंने अभी-अभी कोशिश की है। 0-विलंबित छवि और 1-विलंबित छवि पूरी तरह से सिंक की जाती है। यह अजीब है, क्योंकि 1-देरी की छवि को हर दूसरे लूप के 36/100 वें हिस्से से पीछे होना चाहिए।
केविन

1
tl; इस सवाल पर डॉ: उपयोग करें-delay 2
मैट एम।

जवाबों:


17

मैंने प्रयोग किया और 10ms (देरी = 1) संस्करण बनाया।

10ms देरी का उदाहरण

ऐसा लगता है कि जो प्रोग्राम जीआईएफ को प्रस्तुत करते हैं, वे दूसरी देरी की दरों के 0 सौवें हिस्से का सम्मान नहीं करते हैं। इसके बजाय, वे एक मूल्य का उपयोग करते हैं जो आपके द्वारा चुने गए छोटे मूल्य से बहुत अधिक है।

मैं वास्तव में कारणों पर टिप्पणी नहीं कर सकता कि वे ऐसा क्यों करते हैं। मैं एक से अधिक कारणों से आया हूं, और यह संभव है कि इसकी सभी अटकलें हैं।

सामान्य तौर पर, मैं सलाह दूंगा कि आप सभी मामलों में कम से कम दो सैकड़ो की देरी का उपयोग करें।

स्रोत (जो प्रदर्शित करते हैं कि इसके कई कारण हो सकते हैं। कुछ अपेक्षाकृत पुराने हैं):


1
यदि रेंडरिंग प्रोग्राम सभी gif को धीमा कर देता है जो बहुत तेज़ हैं, तो विकिपीडिया का gif मेरे gif जितना ही धीमा होगा। लेकिन ऐसा नहीं है। विकिपीडिया गति सीमा क्यों तोड़ सकता है, और मैं नहीं कर सकता?
केविन

2
@ केविन: यह उन सभी GIF को धीमा कर देता है जो बहुत तेज़ हैं। आपके GIF बहुत तेज़ हैं। विकिपीडिया के GIF बहुत तेज़ नहीं हैं। आपको धीमा करने की आवश्यकता है ताकि आप "बहुत तेज़" न हों।
डेविड श्वार्ट्ज

विकिपीडिया gif सीमा के लिए फ्रेम देरी 20 ms और 50 ms के बीच है। यदि मैंने अपना स्वयं का फ्रेम विलंब 20 ms पर सेट किया है, तो यह अभी भी धीमा है, भले ही सैद्धांतिक रूप से यह विकिपीडिया gif के समान "बहुत तेज नहीं" मानदंडों को पूरा करता है।
केविन

2
यदि, एक विकिपीडिया छवि के साथ जिसमें 20ms देरी है, तो आप एक gif शामिल करते हैं जिसे आपने 20ms देरी के साथ भी बनाया है, मैं देखूंगा।
डेविड मह

2
मुझे गलत समझा गया था। 20 एमएस gif के रूप में तेजी से मेरे द्वारा बनाए गए विकिपीडिया gif के रूप में वास्तव में है।
केविन

18

ऐसा लग रहा है कि @DavidMah सही है। मेरे लिनक्स सिस्टम पर, न्यूनतम देरी 0.5 है:

convert -dispose none -delay 0.4 newton_%d.png[0-35] -coalesce output0.4.gif

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

convert -dispose none -delay 0.5 newton_%d.png[0-35] -coalesce output0.5.gif

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

convert -dispose none -delay 1 newton_%d.png[0-35] -coalesce output1.gif

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

किसी कारण से चित्र मेरे ब्राउज़र में ठीक से प्रदर्शित नहीं होते हैं। स्थानीय छवि दर्शक ( eom) का उपयोग करते हुए , 1 छवि मूल प्रश्न में से एक के रूप में धीमी है और दोनों अन्य wippipedia की तुलना में तेज़ हैं। मैं वैसे भी पोस्ट कर रहा हूं, यह मेरे ब्राउज़र के लिए विशिष्ट समस्या है। किसी भी मामले में, आपको बेहतर गति मिलनी चाहिए, यदि आपके आदेश ऊपर पोस्ट किए गए हैं।


अद्यतन: वहाँ 2 समस्याओं हो रहे हैं। ब्राउज़र्स (कम से कम y फ़ायरफ़ॉक्स और क्रोमियम लिनक्स पर चलने वाले) एक देरी के साथ बनाए गए gifs को प्रदर्शित नहीं कर सकते हैं <1.5। 1.5 ठीक काम करता है, 1.4 धीमा है। मेरी छवि दर्शक 0.5 और उससे अधिक की देरी से निपट सकता है। उपरोक्त छवियों में से एक को डाउनलोड करने और अपने पसंदीदा छवि दर्शक में खोलने का प्रयास करें। इसके अलावा, इन पर एक नज़र:

convert -dispose none -delay 1.4 newton_%d.png[0-35] -coalesce output1.4.gif

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

convert -dispose none -delay 1.5 newton_%d.png[0-35] -coalesce output1.5.gif

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

UPDATE2: @DavidMah नीचे टिप्पणियों में इंगित करता है कि दशमलव मान निकटतम पूर्णांक तक गोल हैं। तो, 1.4 को 1 पर गोल किया गया है जो बहुत धीमा है जबकि 1.5 को 2 पर गोल किया गया है जो ठीक है।


7
दशमलव मानों में देरी करने की कोशिश करने से सावधान रहें। विलंब को दो बाइट्स में संग्रहीत किया जाता है (इस पर निहितार्थ यह है कि सबसे बड़ा फ्रेम देरी 655360ms है) और एक असुरक्षित पूर्णांक है। अपने पूर्णांकों को निकटतम पूर्णांक होने के लिए परिवर्तित करें। en.wikipedia.org/wiki/Graphics_Interchange_Format#Animated_GIF
डेविड मह

3
@ दाविदाह आह, यह समझ में आता है। तो 1.5 काम करता है क्योंकि यह 2 के लिए गोल है, जबकि 1.4 नहीं है क्योंकि यह 1. से गोल है
टेराडॉन

6

मुझे XxYदेरी अंकन का उपयोग करके अधिक सफलता मिली है, अनिवार्य रूप से xएक की तरह है /, इसलिए यदि आप निर्दिष्ट करते हैं -delay 1x20, तो फ्रेम सेकंड के 1/20 वें के लिए प्रदर्शित होता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.