WebP फ़ॉर्मैट
Google का आधुनिक इमेज फ़ॉर्मैट
RIFF कंटेनर
Google ने WebP के लिए कोई नया कंटेनर नहीं बनाया। उन्होंने RIFF ही चुना, वही फ़ॉर्मैट जो नब्बे के दशक की शुरुआत से WAV ऑडियो और AVI वीडियो ढो रहा है। अगर आपने कभी WAV फ़ाइल पढ़ी है, तो कंटेनर के स्तर पर WebP आपको पहले से आता है।
यह फ़ॉर्मैट एक-दूसरे के अंदर बैठे chunk इस्तेमाल करता है, जिनके आइडेंटिफ़ायर 4 अक्षर के होते हैं (इन्हें FourCC कोड कहते हैं)। डिज़ाइन सीधा और मज़बूत है, और वक़्त की कसौटी पर खरा उतरा है।
WebP फ़ाइल का स्ट्रक्चर (RIFF कंटेनर)
WebP हेडर
| Offset | Hex | ASCII | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 52494646241A00005745425056503858 | RIFF$...WEBPVP8X | |||||||||||||||
| 0010 | 0A00000010000000FF0000FF00000000 | .............. | |||||||||||||||
RIFF chunk का स्ट्रक्चर
ध्यान दें: ज़रूरत पड़ने पर chunk के डेटा में एक null बाइट जोड़कर उसकी लंबाई सम कर दी जाती है।
अहम offset
- • sub-chunk की शुरुआत: 12 बाइट (RIFF + size + WEBP के बाद)
- • chunk की हेडर: 8 बाइट (4 बाइट FourCC + 4 बाइट size)
- • size फ़ील्ड का offset: chunk की शुरुआत से +4 (little-endian)
इमेज वाले chunk
WebP असल में एक में तीन फ़ॉर्मैट है: lossy (VP8), lossless (VP8L) और extended (VP8X)। chunk का टाइप बता देता है कि कंप्रेशन का कौन सा तरीका इस्तेमाल हुआ है।
VP8:lossy कंप्रेशन
कंप्रेशन के लिए VP8 वीडियो कोडेक इस्तेमाल करता है। क्वालिटी और साइज़ का अनुपात JPEG जैसा ही रहता है। साधारण WebP फ़ाइलों में सिर्फ़ यही chunk होता है।
VP8L:lossless कंप्रेशन
प्रिडिक्शन, कलर ट्रांसफ़ॉर्म और एंट्रॉपी कोडिंग के साथ बिना क्वालिटी घटाए कंप्रेशन। आम तौर पर PNG से 25-34% छोटा।
VP8X:एक्सटेंडेड फ़ॉर्मैट
बताता है कि फ़ाइल में कौन-कौन से अतिरिक्त फ़ीचर मौजूद हैं: एनिमेशन, अल्फ़ा चैनल, ICC प्रोफ़ाइल, EXIF या XMP। इनमें से कुछ भी हो, तो यह chunk ज़रूरी हो जाता है।
ALPH:अल्फ़ा चैनल
अल्फ़ा चैनल का अलग डेटा। इसे रंग के डेटा से अलग, lossless या lossy तरीके से कंप्रेस किया जा सकता है।
ANIM/ANMF:एनिमेशन
ANIM में एनिमेशन के कुल पैरामीटर होते हैं। ANMF chunk में एनिमेशन के अलग-अलग फ़्रेम और उनकी टाइमिंग की जानकारी रहती है।
मेटाडेटा वाले chunk
साधारण WebP फ़ाइलों में सिर्फ़ इमेज डेटा होता है, पर एक्सटेंडेड WebP फ़ाइलें मेटाडेटा भी ढो सकती हैं। अच्छी बात यह है कि ये chunk इमेज डेटा से बिल्कुल अलग रहते हैं, इसलिए इन्हें पहचानना और हटाना आसान है।
EXIF:EXIF मेटाडेटा
इसमें EXIF डेटा उसी फ़ॉर्मैट में रहता है जिसमें JPEG में होता है (कच्चा TIFF स्ट्रक्चर)। इसमें कैमरे की जानकारी, GPS कोऑर्डिनेट, तारीख़ और समय, और थंबनेल शामिल हैं। प्राइवेसी की सबसे बड़ी चिंता।
XMP:XMP मेटाडेटा
XML पर बना मेटाडेटा। इसमें EXIF का डेटा दोहराया जा सकता है, साथ ही एडिटिंग हिस्ट्री, सॉफ़्टवेयर की जानकारी और अपने बनाए फ़ील्ड भी।
ICCP:ICC कलर प्रोफ़ाइल
कलर मैनेजमेंट के लिए ICC कलर प्रोफ़ाइल। रंग सही दिखें, इसलिए PicScrub इसे डिफ़ॉल्ट रूप से रहने देता है।
VP8X फ़्लैग
VP8X chunk एक तरह की विषय-सूची की तरह काम करता है, जो डिकोडर को बताता है कि फ़ाइल में क्या-क्या मिलेगा। जब हम मेटाडेटा वाले chunk हटाते हैं, तो हमें ये फ़्लैग भी अपडेट करने पड़ते हैं, वरना डिकोडर ऐसा डेटा ढूँढता रह जाएगा जो है ही नहीं।
फ़्लैग बिट
फ़्लैग क्यों मायने रखते हैं
जब PicScrub, EXIF/XMP chunk हटाता है, तो उसे VP8X फ़्लैग भी अपडेट करने पड़ते हैं ताकि उनकी गैरमौजूदगी दर्ज हो जाए। वरना डिकोडर ऐसा डेटा माँग बैठेंगे जो है ही नहीं।
PicScrub, WebP को कैसे प्रोसेस करता है
RIFF हेडर जाँचना
RIFF....WEBP सिग्नेचर देखना
chunk पढ़ना
सारे RIFF chunk एक-एक करके पढ़ना, FourCC और साइज़ निकालना
मेटाडेटा वाले chunk हटाना
आउटपुट लिखते समय EXIF और XMP chunk छोड़ देना
VP8X फ़्लैग अपडेट करना
VP8X chunk में EXIF/XMP वाले फ़्लैग बिट साफ़ करना
फ़ाइल का साइज़ दोबारा निकालना
RIFF हेडर में फ़ाइल का नया कुल साइज़ लिखना
जो बचा रहता है
- • VP8/VP8L इमेज डेटा
- • ALPH अल्फ़ा चैनल
- • ANIM/ANMF एनिमेशन का डेटा
- • ICCP कलर प्रोफ़ाइल (आपकी मर्ज़ी)
जो हट जाता है
- • EXIF मेटाडेटा
- • XMP मेटाडेटा
साधारण बनाम एक्सटेंडेड WebP
अगर किसी WebP फ़ाइल में VP8X chunk नहीं है, तो वह "साधारण" WebP है: बस एक VP8 या VP8L chunk के चारों ओर लिपटा RIFF रैपर। साधारण WebP फ़ाइलों में मेटाडेटा हो ही नहीं सकता, इसलिए प्राइवेसी की परवाह करने वालों के लिए ये सबसे अच्छी हैं।
साधारण WebP
इसमें सिर्फ़ VP8 या VP8L chunk होता है। मेटाडेटा मुमकिन ही नहीं।
एक्सटेंडेड WebP
इसमें VP8X chunk होता है, जो मेटाडेटा, अल्फ़ा और एनिमेशन की सुविधा देता है।