इस पेज का कोड चालू नहीं हुआ।

index.html को सीधे किसी फ़ोल्डर से खोलने पर ब्राउज़र JavaScript मॉड्यूल रोक देता है, इसलिए एक GIF चुनने पर कुछ नहीं होगा। इसके बजाय फ़ोल्डर को http पर सर्व कीजिए:

powershell -ExecutionPolicy Bypass -File serve.ps1

फिर http://localhost:8080/ खोलिए।

GIF एनालाइज़र — GIF के अंदर असल में क्या है

फ़्रेम, देरी, पैलेट, और हर बाइट कहाँ गया।

भाषा: हिन्दी
कोड देखें
यह टूल GIF कभी अपलोड नहीं करता। यहाँ कोई सर्वर है ही नहीं।

फ़ाइल को खोलना और खोलकर देखना, दोनों आपका अपना ब्राउज़र करता है। ब्लॉक की बनावट, LZW खोलना और इस पेज पर बना हर फ़्रेम, सब इसी डिवाइस पर होता है। मान लीजिए यहाँ कुछ भेजना भी चाहता, तो इस पेज के दूसरी तरफ़ ऐसा कोई सर्वर ही नहीं है जिसे फ़ाइल भेजी जा सके।

लाइव जाँच: जाँच जारी…

ऑफ़लाइन: जाँच जारी…

हमारी बात पर भरोसा मत कीजिए। DevTools खोलिए, Network टैब पर नज़र रखिए, और कोई GIF एनालाइज़ करके देखिए। एक भी रिक्वेस्ट में न कोई तस्वीर जाती है, न थंबनेल, न फ़ाइल का नाम। या फिर इंटरनेट काट दीजिए और तब भी कोई GIF एनालाइज़ करके देखिए।

एक GIF चुनिए

Markdown के रूप में देखें

GIF का विश्लेषण कैसे करें

  1. एक GIF चुनिए। उसे चुनने वाले खाने में खींचकर छोड़ दीजिए या खुद ढूँढ़ लीजिए। ब्राउज़र उसे सीधे आपकी डिस्क से पढ़ता है, और इस बीच कुछ भी कहीं नहीं जाता।
  2. पहले सारांश पढ़िए। कैनवस का आकार, फ़्रेम की गिनती, एनिमेशन खुद को कितना लंबा बताता है, और असल में कितना चलता है। ये आखिरी दो लोगों की उम्मीद से कहीं ज़्यादा बार अलग निकलते हैं, और वजह अगले हिस्से में है।
  3. जो चीज़ें उभरकर आती हैं, उन्हें देखिए। वहाँ की हर पंक्ति आपकी फ़ाइल से नापी गई है: ऐसी देरी जिसे कोई ब्राउज़र नहीं मानेगा, गायब लूप ब्लॉक, ऐसी कलर टेबल जिनका कोई हवाला नहीं देता, कुछ फ़्रेम से भी बड़ा मेटाडेटा। इनमें से कुछ भी इस बारे में अंदाज़ा नहीं है कि आप क्या बनाना चाहते थे।
  4. देखिए कि बाइट कहाँ गए। फ़ाइल का हर बाइट ठीक एक ही पंक्ति में है, और पंक्तियाँ मिलकर पूरी फ़ाइल बनती हैं। अगर ज़्यादातर हिस्सा “कंप्रेस्ड पिक्सल” में नहीं है, तो बाकी तालिका बता देती है कि वह कहाँ है।
  5. फ़्रेम एक-एक करके देखिए। हर फ़्रेम अपनी देरी, अपना आयत, अपना डिस्पोज़ल तरीका और अपना साइज़ दिखाता है। “हर फ़्रेम के बाद का कैनवस” और “हर फ़्रेम जो सहेजता है सिर्फ़ वही” के बीच बदलकर देखिए। फ़ाइल ऑप्टिमाइज़ है या नहीं, यह दूसरे से पता चलता है, क्योंकि अच्छी बनी GIF छोटे-छोटे आयत सहेजती है और खराब बनी हर बार पूरी तस्वीर।
  6. ज़रूरत हो तो रिपोर्ट ले जाइए। पूरा विश्लेषण सादे टेक्स्ट में, किसी संदेश में चिपकाने या फ़ाइल के साथ रख लेने के लिए। यह पेज के भीतर, उसी से बनता है जो पहले से आपकी स्क्रीन पर है।

विस्तार से

GIF के भीतर असल में क्या है फ़्रेम, देरी, निपटाने के तरीके और रंगों की तालिकाएँ समझाई गईं, ब्राउज़र सबसे तेज़ देरी क्यों नहीं मानते, और किसी GIF का आकार असल में कहाँ चला गया यह कैसे पता करें।

सवाल

क्या मेरा GIF कहीं अपलोड होता है?

नहीं। फ़ाइल को आपका अपना ब्राउज़र आपके अपने हार्डवेयर पर पढ़ता, खोलता और बनाता है। इस टूल का कोई सर्वर वाला हिस्सा है ही नहीं, और पेज की Content-Security-Policy में वे सारे पते लिखे हैं जिनसे यह बात कर सकता है, जिनमें से एक भी इस साइट का नहीं है। नेटवर्क काट दीजिए, यह फिर भी GIF एनालाइज़ करता रहेगा।

मेरी GIF देरी में लिखे से धीमी क्यों चलती है?

क्योंकि हर ब्राउज़र सेकंड के दो सौवें हिस्से से कम देरी मानने से इनकार कर देता है और उसकी जगह फ़्रेम को दसवें हिस्से तक रोके रखता है। यह नियम 1996 में Netscape में लिखा गया था, उस ज़माने के घूमते ग्लोब और “निर्माणाधीन” बोर्ड के लिए, और तब से हर ब्राउज़र में उतारा गया है; हटाया कभी किसी ने नहीं।

तो जिस GIF के सारे फ़्रेम 0.01 सेकंड कहते हैं, वह 100 फ़्रेम प्रति सेकंड पर नहीं चलती। वह 10 पर चलती है, यानी बनाने वाले सॉफ़्टवेयर की मंशा से पाँच से दस गुना धीमी। यह पेज दोनों आँकड़े दिखाता है, फ़ाइल क्या कहती है और वह असल में क्या करेगी, और जिन फ़्रेम पर असर पड़ता है उन्हें निशान लगा देता है। सुधार वहीं होगा जहाँ फ़ाइल बनी थी: 0.01 की जगह 0.02 लिखिए।

“डिस्पोज़ल” का क्या मतलब है?

किसी फ़्रेम का समय खत्म होने पर स्क्रीन पर क्या छोड़ना है। एनिमेशन ठीक दिखेगा या धब्बे छोड़ेगा, यह इसी फ़ील्ड से तय होता है।

जहाँ है वहीं रहने दीजिए का मतलब है कि अगला फ़्रेम इसी के ऊपर पुत जाएगा, और जब फ़्रेम अपारदर्शी हों और एक-दूसरे को ढँकते हों तो यही चाहिए। बैकग्राउंड तक साफ़ कर दीजिए पहले फ़्रेम का आयत पोंछ देता है, और ट्रांसपेरेंसी को यही चाहिए, वरना अगले फ़्रेम के आर-पार दिखने वाले हिस्सों में पिछला फ़्रेम झलकता है। नीचे जो था वह लौटा दीजिए वही वापस रख देता है जो इस फ़्रेम के बनने से पहले वहाँ था, और स्थिर बैकग्राउंड पर चलती छोटी चीज़ इसी तरह सहेजी जाती है। और बताया ही नहीं गया का मतलब है कि फ़ाइल ने कुछ कहा ही नहीं, और हर व्यूअर उसे “जहाँ है वहीं रहने दीजिए” मान लेता है।

मेरी GIF इतनी बड़ी क्यों है?

“बाइट कहाँ गए” वाली तालिका यह आम तौर पर नहीं, आपकी उसी फ़ाइल के लिए बताती है, और मुमकिन जवाब गिनती के ही हैं।

अगर लगभग सब कुछ कंप्रेस्ड पिक्सल में है, तो फ़ाइल में बस तस्वीर ही बहुत है: GIF हर फ़्रेम को पूरे पिक्सल के रूप में सहेजती है, न मोशन कंपनसेशन, न क्वालिटी का कोई घुंडी वाला नियंत्रण। इसलिए साइज़ मोटे तौर पर क्षेत्रफल गुणा फ़्रेम की गिनती है। कम फ़्रेम, छोटा आकार या कम रंग, बस यही तीन लीवर हैं।

अगर बड़ा हिस्सा कलर टेबल में है, तो फ़ाइल हर फ़्रेम के लिए अलग पैलेट लिख रही है, 768 बाइट प्रति पैलेट। अगर बड़ा हिस्सा मेटाडेटा में है, तो किसी एडिटर ने XMP पैकेट छोड़ दिया है, और उसे तस्वीर छुए बिना हटाया जा सकता है। और अगर सारे फ़्रेम पूरा कैनवस ढँकते हैं, तो एनकोडर ने कभी निकाला ही नहीं कि असल में कौन-सा हिस्सा बदला। जो चीज़ फ़िल्माई या रिकॉर्ड की गई हो, उसमें यही फ़ाइल का बड़ा हिस्सा होता है।

फ़्रेम की दोनों व्यू में क्या फ़र्क है?

हर फ़्रेम के बाद का कैनवस वह है जो कोई व्यूअर उस पल दिखाता है, यानी यह फ़्रेम पिछले फ़्रेम की छोड़ी हुई चीज़ों के ऊपर। हर फ़्रेम जो सहेजता है सिर्फ़ वही वह आयत है जो फ़ाइल उस फ़्रेम के लिए सचमुच रखती है, अकेला, नीचे कुछ भी बिछाए बिना।

दिलचस्प दूसरा वाला है। GIF किसी फ़्रेम में तस्वीर का सिर्फ़ बदला हुआ हिस्सा सहेज सकती है, और इसीलिए लगभग स्थिर विंडो की स्क्रीन रिकॉर्डिंग छोटी रह सकती है। अगर आपकी फ़ाइल का हर फ़्रेम पूरा कैनवस है, तो यह काम किसी ने किया ही नहीं, और एनिमेशन देखकर यह पता नहीं चलता, सिर्फ़ सहेजी हुई चीज़ देखकर चलता है।

यह कह रहा है कि मेरी फ़ाइल में कमेंट या XMP है। वह क्या है?

ऐसा टेक्स्ट जो तस्वीर के साथ चलता है और जिसे कोई व्यूअर नहीं दिखाता। कमेंट ब्लॉक आम तौर पर उसी सॉफ़्टवेयर का नाम होता है जिसने फ़ाइल लिखी। XMP पैकेट वह XML है जो कोई इमेज एडिटर यह दर्ज करने के लिए लिखता है कि उसने क्या किया, और उसमें एडिट का इतिहास, सॉफ़्टवेयर का वर्शन और कभी-कभी लेखक का नाम तक हो सकता है।

यह पेज दोनों को पूरा छाप देता है, क्योंकि मेटाडेटा के बारे में दिलचस्प सवाल यह है कि उसमें लिखा क्या है, न कि यह कि वह मौजूद है। यह आपको दिखता है और किसी को नहीं: इस रिपॉज़िटरी में कुछ भी इसमें से किसी को कुछ नहीं पढ़ाता।

क्या यह खराब GIF भी खोल लेता है?

कोशिश करता है, और बता देता है कि कहाँ जाकर उसने हाथ खड़े किए। जो फ़ाइल किसी ब्लॉक के बीच खत्म हो जाए, जहाँ ब्लॉक का निशान होना चाहिए वहाँ कोई और बाइट हो, या जिसमें ऐसा फ़्रेम हो जिसका कंप्रेस्ड डेटा जल्दी चुक जाए, उसमें भी उस बिंदु तक जो कुछ पढ़ा जा सका, सब दिखता है, और सबसे ऊपर लिखा होता है कि दिक्कत क्या थी। एनालाइज़र की सबसे ज़्यादा ज़रूरत यहीं पड़ती है, इसलिए एक खराब बाइट के चक्कर में पूरी फ़ाइल फेंक देना गलत बर्ताव होता।

क्या यह मेरी फ़ाइल बदलता है?

नहीं। यह टूल सिर्फ़ पढ़ता है। न कोई आउटपुट फ़ाइल है, न दोबारा एनकोडिंग, न यहाँ कोई ऐसा बटन जो GIF लिखता हो। डाउनलोड करने को सिर्फ़ विश्लेषण की सादे टेक्स्ट वाली कॉपी है। आपका असली फ़ाइल आपकी डिस्क पर ज्यों की त्यों है, और टैब बंद करने पर क्या होगा, उसका ईमानदार जवाब भी यही है।

क्या यह मुफ़्त है, और क्या इसके लिए खाता बनाना पड़ेगा?

यह मुफ़्त है, और यहाँ न कोई खाता है, न साइन-इन, न ट्रायल। फ़ाइल के साइज़ पर भी आपके अपने डिवाइस की मेमोरी के अलावा कोई सीमा नहीं है। साइट पर विज्ञापन हैं और खर्च वही उठाते हैं, लेकिन विज्ञापनों को आपकी फ़ाइल के बारे में कुछ नहीं दिया जाता।

क्या यह ऑफ़लाइन चलता है?

हाँ। पेज एक बार लोड कर लीजिए, फिर इंटरनेट काट दीजिए, यह चलता रहेगा। कुछ अपलोड नहीं हो रहा, यह साबित करने का सबसे आसान तरीका भी यही है। जो टूल आपका GIF एनालाइज़ करने के लिए कहीं भेजता, वह प्लग निकालते ही रुक जाता।