abox.tools

भाषा: हिन्दी

GIF को फ़्रेमों में कैसे बाँटें

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

GIF फ़्रेम स्प्लिटर खोलें हर फ़्रेम अलग, अपनी PNG फ़ाइल में।

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

छोटा जवाब

GIF फ़्रेम स्प्लिटर खोलिए, GIF भीतर छोड़ दीजिए, और हर फ़्रेम एक PNG की तरह सामने आ जाएगा जिसे आप डाउनलोड कर सकते हैं — एक-एक करके, या सबको एक ही ZIP में। सेटिंग जस की तस रहने दीजिए और आपको ठीक वही मिलेगा जो ज़्यादातर लोगों का मतलब होता है: हर फ़्रेम पूरी तस्वीर की तरह, जैसा वह ऐनिमेशन के उस पल में दिखता है।

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

GIF का फ़्रेम असल में होता क्या है

GIF तस्वीरों का ढेर नहीं है। वह एक तस्वीर है, और उसके पीछे पैबंदों की एक कतार।

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

तो “चौदहवाँ फ़्रेम दीजिए” के दो अलग, और बराबर ईमानदार, जवाब हैं, और यह टूल दोनों देता है:

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

सिर्फ़ वे पिक्सल जो वह फ़्रेम रखता है। पैबंद खुद, अपने ही आकार में, अपनी ही जगह पर, और जो कुछ वह नहीं उठाता वह पारदर्शी छोड़ दिया गया। चौदहवाँ फ़्रेम मुँह के ⁦60 × 40⁩ पिक्सल भर हो सकता है। यही वह नज़र है जो बताती है कि GIF के बाइट कहाँ खर्च हुए, और अगर आप ऐनिमेशन में फेरबदल कर रहे हैं, उसमें से तस्वीरें बटोर नहीं रहे, तो आपको यही चाहिए।

अगर रखा हुआ कोई फ़्रेम टुकड़े जैसा दिखे तो आपकी फ़ाइल में कुछ गलत नहीं है। फ़ाइल यही है।

किसी एनिमेशन के बारह क्रमांकित फ़्रेम, हर एक पूरी तस्वीर के रूप में और साथ उसके ठहरने का समय।
हर फ़्रेम पूरी तस्वीर के रूप में, जो फ़ाइल के भीतर मौजूद चीज़ नहीं है: यह हिस्सा उसी फ़र्क के बारे में है।

निपटाने का नियम, और कुछ फ़्रेम छेद क्यों छोड़ जाते हैं

हर फ़्रेम के साथ चार में से एक निर्देश भी होता है कि अगला फ़्रेम बनने से पहले उसके आयत का क्या होगा। जो रखा है उसे दिखाने वाली नज़र में टूल हर फ़्रेम के नीचे यह लिख देता है:

स्क्रीन पर बना रहता है। आम वाला। पैबंद जहाँ उतरा वहीं रहता है और अगला फ़्रेम उसके ऊपर बन जाता है।

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

नीचे जो था उसे लौटा देता है। कैनवस वैसा हो जाता है जैसा इस फ़्रेम के बनने से पहले था — एक मुहर, फिर एक अनडू। कम मिलता है, और घर के बने GIF पढ़ने वाले सबसे ज़्यादा इसी को गलत करते हैं।

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

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

पारदर्शिता का क्या होता है

GIF की पारदर्शिता एक बिट की है। पिक्सल या तो रंगा है या अदृश्य, और बीच में कुछ नहीं — न नरम किनारे, न आधी परछाइयाँ। इसीलिए पारदर्शी बैकग्राउंड वाली GIF का किनारा सख्त और थोड़ा दाँतेदार होता है।

PNG ठीक यही, बिना नुकसान के रखता है, इसलिए फ़्रेम अपनी पारदर्शिता समेत बाहर आते हैं और कुछ भी गढ़ा नहीं जाता। अगर फ़्रेम ऐसी जगह जा रहे हैं जो पारदर्शिता समझती है, तो उसे रहने दीजिए।

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

वह समय, जो फ़्रेम अपने साथ नहीं ले जा सकते

PNG के पास यह लिखने की जगह ही नहीं है कि वह कितनी देर स्क्रीन पर रहा। ऐनिमेशन को PNG में बाँटिए और समय गायब, और जिस घड़ी आप उसे वापस जोड़ना चाहेंगे उसी घड़ी यह मायने रखने लगेगा।

ZIP में रखी frames.txt इसी के लिए है। उसमें हर फ़्रेम की देरी, जगह और आकार लिखा होता है, ताकि ऐनिमेशन GIF मेकर में या कहीं और दोबारा बनाया जा सके। उसका खर्च कुछ किलोबाइट है, और बाद में उसे दोबारा गढ़ने का कोई रास्ता नहीं।

GIF की देरी के बारे में दो बातें सबको पकड़ लेती हैं:

इकाई सेकंड का सौवाँ हिस्सा है, इसलिए इस फ़ॉर्मैट का सबसे बारीक कदम 0.01 s है। ठीक 30 fps वाली GIF जैसी कोई चीज़ होती ही नहीं; हर फ़्रेम 0.03 s यानी 33.3 fps, और 0.04 s यानी 25।

0.02 s से कम कुछ भी 0.10 s पर चलता है। ब्राउज़र 1990 के दशक से इसे बाँधे हुए हैं — उस ज़माने के घूमते हुए ग्लोब के लिए लिखा गया नियम, जो कभी हटा ही नहीं। जिस GIF की फ़ाइल में हर फ़्रेम 0.01 s लिखा है वह 100 fps का दावा करती है और 10 पर चलती है। यह टूल देरी वही दिखाता है जो असल में चलती है, और जब दोनों अलग हों तो साथ में यह भी बता देता है कि फ़ाइल में क्या रखा है, क्योंकि यही फ़ासला वजह है कि बाँटकर दोबारा जोड़ी गई GIF मूल से धीमी निकल सकती है।

फ़्रेम की संख्याएँ, और उनके आगे शून्य क्यों

फ़्रेम name-001.png, name-002.png की तरह निकलते हैं, एक से गिने हुए और आखिरी संख्या की चौड़ाई तक शून्य से भरे हुए। यह सजावट नहीं है: हर फ़ाइल मैनेजर में और सीक्वेंस पढ़ने वाले ज़्यादातर सॉफ़्टवेयर में frame9.png, frame10.png के बाद लगता है, क्योंकि वे संख्या नहीं, अक्षर छाँटते हैं। भरे हुए नाम हर जगह ठीक क्रम में लगते हैं, और इमेज सीक्वेंस पढ़ने वाला हर वीडियो एडिटर उन्हीं की उम्मीद करता है।

किसी लंबे ऐनिमेशन को “हर दूसरा फ़्रेम रखिए” से पतला करने पर संख्याएँ दोबारा नहीं लगतीं। बयालीसवाँ फ़्रेम बयालीसवाँ ही रहता है, ताकि फ़ाइलें मूल के साथ और समय की सूची के साथ मिलती रहें।

इसमें सर्वर की ज़रूरत क्यों नहीं

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

आपका ब्राउज़र GIF चला तो पहले से लेता है, पर उसके टुकड़े नहीं देता: एक <img> आपको ऐनिमेशन देता है, कैनवस पर बनाने से हमेशा पहला फ़्रेम ही मिलता है, और जो अकेला API इससे ज़्यादा करता है वह Safari में नहीं है। इसलिए फ़ॉर्मैट यहीं खुद पढ़ा जाता है, हर ब्राउज़र में एक ही तरह से — और खुद पढ़ना ही वह चीज़ है जिसकी वजह से पैबंद और निपटाने के नियम आपको दिखाए जा सकते हैं।

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