WebP कंटेनर की खास बातें

परिचय

WebP एक इमेज फ़ॉर्मैट है. इसमें इमेज डेटा को लॉसी तरीके से कंप्रेस करने के लिए, (i) VP8 की-फ़्रेम एन्कोडिंग या (ii) WebP लॉसलेस एन्कोडिंग का इस्तेमाल किया जाता है. इन एन्कोडिंग स्कीम की मदद से, इमेज को JPEG, GIF, और PNG जैसे पुराने फ़ॉर्मैट के मुकाबले ज़्यादा बेहतर तरीके से सेव किया जा सकता है. इसे नेटवर्क पर तेज़ी से इमेज ट्रांसफ़र करने के लिए ऑप्टिमाइज़ किया गया है (इसके लिए जैसे, वेबसाइटों के लिए). WebP फ़ॉर्मैट में, अन्य फ़ॉर्मैट की तरह ही सुविधाएं (रंग प्रोफ़ाइल, मेटाडेटा, ऐनिमेशन वगैरह) होती हैं. इस दस्तावेज़ में बताया गया है कि WebP फ़ाइल का स्ट्रक्चर तय करते हैं.

WebP कंटेनर (WebP के लिए, RIFF कंटेनर), सुविधा के साथ काम करने की अनुमति देता है WebP के बुनियादी इस्तेमाल के उदाहरण से भी ज़्यादा (इसका मतलब है कि ऐसी फ़ाइल जिसमें इमेज को VP8 की फ़्रेम के तौर पर एन्कोड किया गया हो. WebP कंटेनर, इनके लिए ज़्यादा मदद करता है:

  • नुकसान-रहित कंप्रेशन: किसी इमेज को WebP लॉसलेस फ़ॉर्मैट.

  • मेटाडेटा: किसी इमेज में, बदली जा सकने वाली इमेज फ़ाइल में मेटाडेटा स्टोर हो सकता है फ़ॉर्मैट (Exif) या एक्सटेंसिबल मेटाडेटा प्लैटफ़ॉर्म (XMP) फ़ॉर्मैट.

  • पारदर्शिता: किसी इमेज में पारदर्शिता हो सकती है, यानी कि ऐल्फ़ा चैनल.

  • कलर प्रोफ़ाइल: किसी इमेज में, इंटरनैशनल कलर कंसोर्टियम के बताए गए तरीके के मुताबिक, एम्बेड की गई ICC प्रोफ़ाइल हो सकती है.

  • ऐनिमेशन: किसी इमेज में एक से ज़्यादा फ़्रेम हो सकते हैं और उनमें बीच-बीच में रुकावटें हो सकती हैं. इससे वह ऐनिमेशन बन जाता है.

इन्हें

WebP फ़ॉर्मैट के बारे में बताते समय, इन तरीकों का इस्तेमाल करने का सुझाव दिया जाता है कंटेनर:

कंटेनर फ़ॉर्मैट का नामWebP
फ़ाइल नाम एक्सटेंशन.webp
MIME-टाइपइमेज/webp
यूनिफ़ॉर्म टाइप आइडेंटिफ़ायरorg.webmproject.webp

शब्दावली और मूलभूत बातें

इस दस्तावेज़ में, "ज़रूरी है", "ज़रूरी नहीं है", "ज़रूरी है", "होगा", "नहीं होगा", "होना चाहिए", "नहीं होना चाहिए", "सुझाया गया है", "सुझाया नहीं गया है", "हो सकता है", और "ज़रूरी नहीं है" जैसे कीवर्ड का मतलब, BCP 14 RFC 2119 RFC 8174 में बताए गए तरीके से ही समझा जाना चाहिए. ऐसा तब और सिर्फ़ तब किया जाना चाहिए, जब ये कीवर्ड बड़े अक्षरों में हों, जैसा कि यहां दिखाया गया है.

WebP फ़ाइल में या तो एक स्टिल इमेज (यानी, पिक्सल का एन्कोड किया गया मैट्रिक्स) होती है या ऐनिमेशन का इस्तेमाल करें. इसके अलावा, इसमें पारदर्शिता की जानकारी, कलर प्रोफ़ाइल, और मेटाडेटा भी शामिल हो सकता है. हालांकि, ऐसा करना ज़रूरी नहीं है. हम पिक्सल के मैट्रिक्स को इमेज का कैनवस कहते हैं.

सबसे अहम बिट के लिए चंक डायग्राम में बिट नंबर, 0 से शुरू होता है ('MSB 0'), जैसा कि आरएफ़सी 1166 में बताया गया है.

इस दस्तावेज़ में इन शब्दों का इस्तेमाल किया गया है:

पाठक/लेखक
WebP फ़ाइलों को पढ़ने वाले कोड को रीडर कहा जाता है, जबकि वह कोड जो उन्हें लेखक कहा जाता है.
uint16
16-बिट, लिटिल-एंडियन, बिना साइन वाला पूर्णांक.
uint24
24-बिट, लिटिल एंडियन, साइन नहीं किया गया पूर्णांक.
uint32
32-बिट, लिटल-इंडियन, बिना हस्ताक्षर वाला इंटिजर.
FourCC
चार वर्णों का कोड (FourCC) एक uint32 है, जो चार को जोड़कर बनाया गया है ASCII वर्ण, छोटे अक्षरों के क्रम में होते हैं. इसका मतलब है कि 'aaaa' (0x61616161) और 'AAAA' (0x41414141) को अलग-अलग FourCC माना जाता है.
1-आधारित
-1 से ऑफ़सेट करके मानों को संग्रहित करने वाला बिना हस्ताक्षर वाला पूर्णांक फ़ील्ड, उदाहरण के लिए, ऐसे फ़ील्ड में वैल्यू 25 को 24 के तौर पर सेव किया जाएगा.
ChunkHeader('ABCD')
इसका इस्तेमाल, अलग-अलग चंक के FourCC और चंक साइज़ हेडर के बारे में बताने के लिए किया जाता है. इसमें 'ABCD', चंक का FourCC होता है. इस एलिमेंट का साइज़ 8 बाइट है.

RIFF फ़ाइल फ़ॉर्मैट

WebP फ़ाइल फ़ॉर्मैट, RIFF (रिसॉर्स इंटरचेंज फ़ाइल फ़ॉर्मैट) दस्तावेज़ फ़ॉर्मैट पर आधारित है.

आरआईएफ़एफ़ फ़ाइल का बेसिक एलिमेंट एक भाग होता है. इसमें ये चीज़ें शामिल हैं:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Chunk FourCC                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Chunk Size                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:                         Chunk Payload                         :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
चंक फ़ोरसीसी: 32 बिट
चंक की पहचान करने के लिए इस्तेमाल किया जाने वाला चार वर्णों वाला ASCII कोड.
डेटा ग्रुप का साइज़: 32 बिट (uint32)
चंक का साइज़ बाइट में. इसमें यह फ़ील्ड, चंक आइडेंटिफ़ायर या पैडिंग शामिल नहीं है.
चंक पेलोड: चंक साइज़ बाइट
डेटा पेलोड. अगर चंक साइज़ अजीब है, तो एक पैडिंग बाइट जोड़ा जाता है. यह बाइट, RIFF के मुताबिक 0 होना चाहिए.

ध्यान दें: आरआईएफ़एफ़ का मतलब है कि सभी अपरकेस चार सीसी वाले हिस्से स्टैंडर्ड होते हैं ऐसे हिस्से जो किसी भी आरआईएफ़ फ़ाइल फ़ॉर्मैट पर लागू होते हैं, जबकि किसी फ़ाइल के लिए चारसीसी फ़ॉर्मैट के सभी अक्षर अंग्रेज़ी के छोटे अक्षरों में होते हैं. WebP इस नियम का पालन नहीं करता.

WebP फ़ाइल हेडर

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      'R'      |      'I'      |      'F'      |      'F'      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           File Size                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      'W'      |      'E'      |      'B'      |      'P'      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
'RIFF': 32 बिट
ASCII कैरेक्टर 'R', 'I', 'F', 'F'.
फ़ाइल का साइज़: 32 बिट (uint32)
बाइट में फ़ाइल का साइज़, ऑफ़सेट 8 से शुरू. इस फ़ील्ड की ज़्यादा से ज़्यादा वैल्यू, 2^32 से 10 बाइट कम होती है. इसलिए, पूरी फ़ाइल का साइज़ ज़्यादा से ज़्यादा 4 जीबी से 2 बाइट कम होता है.
'WEBP': 32 बिट
ASCII वर्ण 'W', 'E', 'B', 'P'.

WebP फ़ाइल, RIFF हेडर से शुरू होनी चाहिए. साथ ही, इसमें FourCC 'WEBP' होना चाहिए. हेडर में मौजूद फ़ाइल का साइज़, इसके बाद आने वाले सभी चंक का कुल साइज़ होता है. साथ ही, इसमें 'WEBP' फ़ोरसीसी के लिए 4 बाइट भी शामिल होते हैं. डेटा के बाद फ़ाइल में कोई डेटा नहीं होना चाहिए फ़ाइल के साइज़ से तय होता है. रीडर, आखिर में मौजूद डेटा को अनदेखा करके, ऐसी फ़ाइलों को पार्स कर सकते हैं. किसी भी चंक का साइज़ सम होता है. इसलिए, RIFF हेडर में दिया गया साइज़ भी सम होता है. अलग-अलग चंक के कॉन्टेंट के बारे में, नीचे दिए गए सेक्शन में बताया गया है.

सिंपल फ़ाइल फ़ॉर्मैट (लोस वाली)

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

सामान्य WebP (लोस-लेस) फ़ाइल फ़ॉर्मैट:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                    WebP file header (12 bytes)                |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:                        'VP8 ' Chunk                           :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

'VP8 ' चंक:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      ChunkHeader('VP8 ')                      |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:                           VP8 data                            :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
VP8 डेटा: चंक साइज़ बाइट
VP8 बिटस्ट्रीम डेटा.

ध्यान दें कि 'VP8 ' फ़ोरसीसी में चौथा वर्ण, ASCII स्पेस (0x20) है.

VP8 बिटस्ट्रीम फ़ॉर्मैट स्पेसिफ़िकेशन के बारे में VP8 डेटा फ़ॉर्मैट और डिकोडिंग गाइड में बताया गया है. ध्यान दें कि VP8 फ़्रेम हेडर में, VP8 फ़्रेम की चौड़ाई और ऊंचाई होती है. यह कैनवस की चौड़ाई और ऊंचाई मानी जाती है.

VP8 स्पेसिफ़िकेशन में यह बताया गया है कि इमेज को Y'CbCr फ़ॉर्मैट में कैसे डिकोड किया जा सकता है. आरजीबी में बदलने के लिए, सुझाव BT.601 का इस्तेमाल किया जाना चाहिए. ऐप्लिकेशन, किसी दूसरे कन्वर्ज़न तरीके का इस्तेमाल कर सकते हैं. हालांकि, डिकोडर के हिसाब से विज़ुअल के नतीजे अलग-अलग हो सकते हैं.

सिंपल फ़ाइल फ़ॉर्मैट (लॉसलेस)

ध्यान दें: हो सकता है कि बड़े बच्चे ऐसे फ़ॉर्मैट में फ़ाइलें ऐक्सेस न कर पाएं जो लॉसलेस फ़ॉर्मैट का इस्तेमाल करती हैं.

इस लेआउट का इस्तेमाल तब किया जाना चाहिए जब इमेज के लिए लॉसलेस एन्कोडिंग ( पारदर्शिता बनाए रखने का एक वैकल्पिक चैनल) है. इसे इस्तेमाल करने के लिए, बेहतर सुविधाएं देने की ज़रूरत नहीं होती उसे लंबी अवधि वाले फ़ॉर्मैट में खर्च करें.

सिंपल WebP (बिना डेटा हानि वाला) फ़ाइल फ़ॉर्मैट:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                    WebP file header (12 bytes)                |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:                         'VP8L' Chunk                          :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

'VP8L' चंक:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      ChunkHeader('VP8L')                      |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:                           VP8L data                           :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
VP8L डेटा: चंक का साइज़ बाइट में
VP8L बिटस्ट्रीम डेटा.

VP8L बिटस्ट्रीम की मौजूदा स्पेसिफ़िकेशन, WebP लॉसलेस बिटस्ट्रीम फ़ॉर्मैट पर देखी जा सकती है. ध्यान दें कि VP8L हेडर में, VP8L इमेज की चौड़ाई और ऊंचाई होती है. यह माना जाता है कि यह कैनवस की चौड़ाई और ऊंचाई है.

एक्सटेंडेड फ़ाइल फ़ॉर्मैट

ध्यान दें: ऐसा हो सकता है कि पुराने रीडर, एक्सटेंडेड फ़ॉर्मैट का इस्तेमाल करने वाली फ़ाइलों के साथ काम न करें.

एक्सटेंडेड फ़ॉर्मैट की फ़ाइल में ये चीज़ें शामिल होती हैं:

  • फ़ाइल में इस्तेमाल की गई सुविधाओं के बारे में जानकारी वाला 'VP8X' चंक.

  • रंग की प्रोफ़ाइल वाला वैकल्पिक 'ICCP' चंक.

  • ऐनिमेशन कंट्रोल डेटा वाला वैकल्पिक 'ANIM' चंक.

  • इमेज डेटा.

  • एक वैकल्पिक 'EXIF' Exif मेटाडेटा के साथ डेटा समूह.

  • एक वैकल्पिक 'XMP ' XMP मेटाडेटा वाला डेटा ग्रुप.

  • डेटा के अलग-अलग हिस्सों की जानकारी नहीं है की एक वैकल्पिक सूची.

स्टिल इमेज के लिए, इमेज डेटा में एक फ़्रेम होता है, जिसे ज़्यादा से ज़्यादा:

ऐनिमेशन वाली इमेज के लिए, इमेज के डेटा में कई फ़्रेम होते हैं. फ़्रेम के बारे में ज़्यादा जानकारी पाने के लिए, ऐनिमेशन सेक्शन में जाएं.

फिर से बनाने और रंग में सुधार करने के लिए सभी ज़रूरी हिस्से, जैसे कि 'VP8X', 'ICCP', 'Animal', 'ANMF', 'ALPH', 'VP8 ', और 'VP8L', क्रम में दिखने चाहिए ऊपर दी गई जानकारी. ऑडियंस को फिर से बनाने के लिए डेटा को कई हिस्सों में बांटने की ज़रूरत होती है. इसलिए, ऐसा करना ज़रूरी नहीं है और रंग में सुधार करने की सुविधा सही से काम नहीं कर रही है.

मेटाडेटा और अनजान चंक, क्रम से नहीं दिख सकते.

वजह: फ़ाइल में सबसे पहले, रीकंस्ट्रक्शन के लिए ज़रूरी चंक दिखने चाहिए, ताकि रीडर पूरा डेटा पाने से पहले ही इमेज को डिकोड करना शुरू कर सके. किसी ऐप्लिकेशन को लागू करने के लिए, मेटाडेटा और कस्टम चंक के क्रम में बदलाव करने से फ़ायदा मिल सकता है.

एक्सटेंडेड WebP फ़ाइल हेडर:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                   WebP file header (12 bytes)                 |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      ChunkHeader('VP8X')                      |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Rsv|I|L|E|X|A|R|                   Reserved                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Canvas Width Minus One               |             ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...  Canvas Height Minus One    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
रिज़र्व (Rsv): 2 बिट
को 0 पर सेट करना ज़रूरी है. लोगों को इस फ़ील्ड को अनदेखा करना चाहिए.
ICC प्रोफ़ाइल (I): 1 बिट
अगर फ़ाइल में 'ICCP' चंक है, तो सेट करें.
ऐल्फ़ा (L): 1 बिट
सेट करें कि इमेज के किसी भी फ़्रेम में पारदर्शिता से जुड़ी जानकारी हो ("ऐल्फ़ा").
Exif मेटाडेटा (E): 1 बिट
सेट करें कि फ़ाइल में Exif मेटाडेटा है या नहीं.
XMP मेटाडेटा (X): 1 बिट
फ़ाइल में XMP मेटाडेटा हो या नहीं, यह सेट करें.
ऐनिमेशन (A): 1 बिट
सेट करें कि यह ऐनिमेशन वाली इमेज है या नहीं. 'ani' में मौजूद डेटा और 'ANMF' हिस्से ऐसे होने चाहिए का इस्तेमाल ऐनिमेशन को कंट्रोल करने के लिए किया जाता है.
रिज़र्व (R): 1 बिट
को 0 पर सेट करना ज़रूरी है. लोगों को इस फ़ील्ड को अनदेखा करना चाहिए.
रिज़र्व किया गया: 24 बिट
0 होना चाहिए. पाठकों को इस फ़ील्ड को अनदेखा करना चाहिए.
कैनवस की चौड़ाई में से एक घटाने पर: 24 बिट
पिक्सल में कैनवस की 1-आधारित चौड़ाई. कैनवस की असल चौड़ाई 1 + Canvas Width Minus One है.
कैनवस की लंबाई माइनस एक: 24 बिट
पिक्सल में कैनवस की ऊंचाई,
1-आधारित. कैनवस की असल ऊंचाई 1 + Canvas Height Minus One है.

कैनवस की चौड़ाई और कैनवस की ऊंचाई का प्रॉडक्ट ज़्यादा से ज़्यादा 2^32 - 1 होना चाहिए.

आने वाले समय में, ज़्यादा फ़ील्ड जोड़े जा सकते हैं. अनजान फ़ील्ड को अनदेखा करना ज़रूरी है.

ऐनिमेशन

ऐनिमेशन को 'ANIM' और 'ANMF' चंक कंट्रोल करते हैं.

'ऐनिम' समूह:

ऐनिमेशन वाली इमेज के लिए, इस डेटा ग्रुप में ऐनिमेशन.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      ChunkHeader('ANIM')                      |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Background Color                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Loop Count           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
बैकग्राउंड का रंग: 32 बिट (uint32)
कैनवस के बैकग्राउंड का डिफ़ॉल्ट रंग [नीला, हरा, लाल, ऐल्फ़ा] बाइट ऑर्डर. कैनवस पर इस्तेमाल नहीं की गई जगह को भरने के लिए इस रंग का इस्तेमाल किया जा सकता है दिख रहे हैं. बैकग्राउंड कलर का इस्तेमाल तब भी किया जाता है, जब कचरा हटाने का तरीका 1 हो.

ध्यान दें:

  • बैकग्राउंड के रंग में, पारदर्शी अल्फा वैल्यू हो सकती है. भले ही, 'VP8X' चंक में अल्फा फ़्लैग सेट न किया गया हो.

  • दर्शक के ऐप्लिकेशन को बैकग्राउंड के रंग की वैल्यू को एक हिंट के तौर पर इस्तेमाल करना चाहिए. हालांकि, इसके लिए ज़रूरी नहीं है कि वे इसका इस्तेमाल करें.

  • हर लूप की शुरुआत में कैनवस को मिटा दिया जाता है. पृष्ठभूमि का रंग हो सकता है का इस्तेमाल किया गया है.

लूप की संख्या: 16 बिट (uint16)
ऐनिमेशन को लूप करने की संख्या. अगर यह 0 है, तो इसका मतलब है कि अनगिनत.

अगर 'VP8X' में ऐनिमेशन फ़्लैग मौजूद है, तो यह डेटा सेगमेंट दिखना चाहिए डेटा समूह सेट है. अगर ऐनिमेशन फ़्लैग सेट नहीं है और यह चंक मौजूद है, तो इसे अनदेखा करना ज़रूरी है.

'एएनएमएफ़' समूह:

ऐनिमेशन वाली इमेज के लिए, इस चंक में एक फ़्रेम की जानकारी होती है. अगर ऐनिमेशन फ़्लैग सेट नहीं है, तो यह समूह मौजूद नहीं होना चाहिए.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      ChunkHeader('ANMF')                      |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Frame X                |             ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...          Frame Y            |   Frame Width Minus One     ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...             |           Frame Height Minus One              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Frame Duration                |  Reserved |B|D|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:                         Frame Data                            :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
फ़्रेम X: 24 बिट (uint24)
फ़्रेम के सबसे ऊपर बाएं कोने का X कोऑर्डिनेट Frame X * 2 है.
फ़्रेम Y: 24 बिट (uint24)
फ़्रेम के ऊपरी बाएं कोने का Y कोऑर्डिनेट Frame Y * 2 है.
फ़्रेम की चौड़ाई में से एक घटाना: 24 बिट (uint24)
फ़्रेम की 1-आधारित चौड़ाई. फ़्रेम की चौड़ाई 1 + Frame Width Minus One है.
फ़्रेम की लंबाई माइनस एक: 24 बिट (uint24)
फ़्रेम की 1-आधारित ऊंचाई. फ़्रेम की ऊंचाई 1 + Frame Height Minus One है.
फ़्रेम की अवधि: 24 बिट (uint24)
अगला फ़्रेम दिखाने के लिए, 1 मिलीसेकंड में इंतज़ार का समय. ध्यान दें कि फ़्रेम अवधि 0 (और अक्सर <= 10) का मतलब होता है से तय होता है. अनेक टूल और ब्राउज़र आपके उपयोगकर्ताओं की ओर से अवधि GIF से मिलती-जुलती है.
रिज़र्व किया गया: 6 बिट
को 0 पर सेट करना ज़रूरी है. लोगों को इस फ़ील्ड को अनदेखा करना चाहिए.
ब्लेंड करने का तरीका (B): 1 बिट

इससे पता चलता है कि मौजूदा फ़्रेम के पारदर्शी पिक्सल को कैसे ब्लेंड किया जाएगा पिछले कैनवस के संबंधित पिक्सल के साथ:

  • 0: ऐल्फ़ा-ब्लेंडिंग का इस्तेमाल करें. पिछले फ़्रेम को हटाने के बाद, कैनवस पर मौजूदा फ़्रेम को रेंडर करें. इसके लिए, अल्फा-ब्लेंडिंग का इस्तेमाल करें (यहां देखें). अगर वर्तमान फ़्रेम में कोई अल्फ़ा चैनल नहीं है, तो मान लीजिए कि अल्फ़ा मान है 255 पर स्विच करने के लिए किया जा सकता है.

  • 1: ब्लेंड न करें. पिछले फ़्रेम को हटाने के बाद, कैनवस पर मौजूदा फ़्रेम को रेंडर करें. इसके लिए, मौजूदा फ़्रेम से ढके हुए रेक्टैंगल को बदलें.

डिस्पोज़ल का तरीका (D): 1 बिट

इससे पता चलता है कि कैनवस पर दिखाए जाने के बाद (अगले फ़्रेम को रेंडर करने से पहले), मौजूदा फ़्रेम को कैसे मैनेज किया जाएगा:

  • 0: इसे न फेंके. कैनवस को वैसे ही रहने दें.

  • 1: बैकग्राउंड के रंग को हटाएं. कैनवस पर रेक्टैंगल भरें मौजूदा फ़्रेम के ज़रिए कवर किया जाता है और बैकग्राउंड रंग के साथ 'एनिम' डेटा का एक हिस्सा.

ध्यान दें:

  • फ़्रेम डिस्पोज़ल सिर्फ़ फ़्रेम रेक्टैंगल पर लागू होता है. इसका मतलब है कि यह फ़्रेम X, फ़्रेम Y, फ़्रेम की चौड़ाई, और फ़्रेम की ऊंचाई से तय किया गया रेक्टैंगल होता है. यह पूरे कैनवस को कवर कर भी सकती है और नहीं भी.

  • अल्फ़ा-ब्लेंडिंग:

    R, G, B, और A चैनल में से हर चैनल 8 बिट का होता है. साथ ही, RGB चैनलों को अल्फा से मल्टीप्लाई नहीं किया जाता. इसलिए, 'dst' को 'src' पर ब्लेंड करने का फ़ॉर्मूला यह है:

    blend.A = src.A + dst.A * (1 - src.A / 255)
    if blend.A = 0 then
      blend.RGB = 0
    else
      blend.RGB =
          (src.RGB * src.A +
           dst.RGB * dst.A * (1 - src.A / 255)) / blend.A
    
  • अल्फा-ब्लेंडिंग, इमेज की रंग प्रोफ़ाइल को ध्यान में रखते हुए, लीनियर कलर स्पेस में की जानी चाहिए. अगर कलर प्रोफ़ाइल मौजूद नहीं है, तो स्टैंडर्ड आरजीबी (sRGB) को मान लिया जाएगा. (ध्यान दें कि sRGB में भी ~2.2 की गामा की वजह से, इसे लीनियर बनाया जाना चाहिए.)

फ़्रेम डेटा: चंक का साइज़ बाइट - 16

इसमें ये शामिल हैं:

ध्यान दें: 'ANMF' पेलोड, फ़्रेम डेटा में अलग-अलग पैड किए गए चंक होते हैं, जैसा कि RIFF फ़ाइल फ़ॉर्मैट में बताया गया है.

ऐल्फ़ा

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      ChunkHeader('ALPH')                      |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Rsv| P | F | C |     Alpha Bitstream...                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
रिज़र्व (Rsv): 2 बिट
0 होना चाहिए. पाठकों को इस फ़ील्ड को अनदेखा करना चाहिए.
प्री-प्रोसेसिंग (P): 2 बिट

इन जानकारी देने वाले बिट का इस्तेमाल, कॉम्प्रेस करने के दौरान की गई प्रोसेसिंग के बारे में बताने के लिए किया जाता है. डिकोडर इस जानकारी का इस्तेमाल, वैल्यू को डिटर करने या डिसप्ले करने से पहले ग्रेडिएंट को स्मूद करने के लिए कर सकता है.

  • 0: कोई प्री-प्रोसेसिंग नहीं है.
  • 1: लेवल में कमी.

डिकोडर को इस जानकारी का इस्तेमाल किसी खास तरीके से करने की ज़रूरत नहीं है.

फ़िल्टर करने का तरीका (F): 2 बिट

फ़िल्टर करने के लिए, ये तरीके इस्तेमाल किए गए हैं:

  • 0: कोई नहीं.
  • 1: हॉरिज़ॉन्टल फ़िल्टर.
  • 2: वर्टिकल फ़िल्टर.
  • 3: ग्रेडिएंट फ़िल्टर.

हर पिक्सल के लिए, नीचे दिए गए कैलकुलेशन का इस्तेमाल करके फ़िल्टर किया जाता है. मान लें कि मौजूदा X पोज़िशन के आस-पास मौजूद अल्फा वैल्यू को इस तरह लेबल किया गया है:

 C | B |
---+---+
 A | X |

हमें X पोज़िशन पर अल्फा वैल्यू का हिसाब लगाना है. सबसे पहले, फ़िल्टर करने के तरीके के आधार पर अनुमान लगाया जाता है:

  • तरीका 0: अनुमान लगाने वाला = 0
  • तरीका 1: अनुमान लगाने वाला = A
  • तरीका 2: predictor = B
  • पहला तरीका 3: predictor = clip(A + B - C)

जहां clip(v) का मान:

  • 0 अगर v < 0,
  • 255 अगर v > 255 या
  • दूसरा वर्शन

आखिरी वैल्यू पाने के लिए, डिकंप्रेस की गई वैल्यू X को [256..511] रेंज को रैप करने के लिए, मॉड्यूलो-256 अंकगणित का इस्तेमाल और उसका अनुमान लगाना [0..255] वाले में:

alpha = (predictor + X) % 256

सबसे बाईं और सबसे ऊपरी पिक्सल पोज़िशन के लिए, खास मामले होते हैं. उदाहरण के लिए, जगह (0, 0) पर सबसे ऊपर बाईं ओर मौजूद वैल्यू, अनुमानित वैल्यू के तौर पर 0 का इस्तेमाल करती है. अन्यथा:

  • हॉरिज़ॉन्टल या ग्रेडिएंट फ़िल्टर करने के तरीकों के लिए, सबसे बाएं पिक्सल जगह (0, y) का अनुमान जगह (0, y-1) के ठीक ऊपर दी गई जगह का इस्तेमाल करके लगाया जाता है.
  • वर्टिकल या ग्रेडिएंट फ़िल्टर करने के तरीकों के लिए, बाईं ओर मौजूद जगह (x-1, 0) का इस्तेमाल करके, जगह (x, 0) पर सबसे ऊपर मौजूद पिक्सल का अनुमान लगाया जाता है.
कंप्रेशन का तरीका (C): 2 बिट

इन चीज़ों को कंप्रेस करने के लिए इस्तेमाल किया जाता है:

  • 0: कोई कंप्रेस नहीं किया गया.
  • 1: WebP लॉसलेस फ़ॉर्मैट का इस्तेमाल करके कंप्रेस किया गया.
ऐल्फ़ा बिटस्ट्रीम: चंक साइज़ बाइट - 1

एन्कोड किया गया ऐल्फ़ा बिटस्ट्रीम.

डेटा के इस वैकल्पिक हिस्से में, इस फ़्रेम के लिए कोड में बदला गया ऐल्फ़ा डेटा शामिल है. 'VP8L' चंक वाले फ़्रेम में यह चंक नहीं होना चाहिए.

तर्क वाली जानकारी: पारदर्शिता से जुड़ी जानकारी पहले से ही 'VP8L' का हिस्सा है डेटा का हिस्सा.

अल्फा चैनल का डेटा, बिना कंप्रेस किए गए रॉ डेटा के तौर पर सेव किया जाता है. ऐसा तब होता है, जब डेटा को कंप्रेस करने का तरीका '0' हो. इसके अलावा, डेटा को लॉसलेस फ़ॉर्मैट का इस्तेमाल करके भी कंप्रेस किया जा सकता है. ऐसा तब होता है, जब डेटा को कंप्रेस करने का तरीका '1' हो.

  • रॉ डेटा: इसमें लंबाई = चौड़ाई * ऊंचाई का बाइट क्रम होता है. इसमें स्कैन के क्रम में सभी 8-बिट ट्रांसपेरेंसी वैल्यू होती हैं.

  • लॉसलेस फ़ॉर्मैट कंप्रेसन: बाइट क्रम, चौड़ाई x ऊंचाई के डाइमेंशन वाली एक कंप्रेस की गई इमेज-स्ट्रीम होती है. इस बारे में "WebP लॉसलेस बिटस्ट्रीम फ़ॉर्मैट" में बताया गया है. इसका मतलब है कि इस इमेज-स्ट्रीम में, इमेज डाइमेंशन की जानकारी देने वाला कोई हेडर नहीं है.

    तथ्यों के हिसाब से: डाइमेंशन के बारे में दूसरे सोर्स से पहले से पता होता है, इसलिए, उन्हें फिर से सेव करना गैर-ज़रूरी होगा और उसमें गड़बड़ी हो सकती है.

    जब इमेज-स्ट्रीम को ऐल्फ़ा, रेड, ग्रीन, ब्लू (एआरजीबी) कलर वैल्यू में डिकोड कर दिया जाता है, तो लॉसलेस फ़ॉर्मैट के स्पेसिफ़िकेशन में बताई गई प्रोसेस के हिसाब से, एआरजीबी क्वाड्रुपलेट के ग्रीन चैनल से ट्रांसपेरेंसी की जानकारी निकाली जानी चाहिए.

    वजह: अन्य चैनलों के मुकाबले, ग्रीन चैनल को स्पेसिफ़िकेशन में बदलाव करने के लिए ज़्यादा चरण की अनुमति है. इससे, डेटा को बेहतर तरीके से कंप्रेस किया जा सकता है.

बिटस्ट्रीम (VP8/VP8L)

इस चंक में, किसी एक फ़्रेम के लिए कंप्रेस किया गया बिटस्ट्रीम डेटा होता है.

बिटस्ट्रीम चंक, (i) 'VP8 ' चंक हो सकता है, जिसमें FourCC के तौर पर 'VP8 ' (चौथे वर्ण के बाद का स्पेस ध्यान दें) का इस्तेमाल किया गया हो या (ii) 'VP8L' चंक हो सकता है, जिसमें FourCC के तौर पर 'VP8L' का इस्तेमाल किया गया हो.

'VP8 ' और 'VP8L' चंक के फ़ॉर्मैट, सिंपल फ़ाइल फ़ॉर्मैट (लोस वाली) और सिंपल फ़ाइल फ़ॉर्मैट (बिना डेटा हानि वाला) सेक्शन में बताए गए हैं.

कलर प्रोफ़ाइल

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      ChunkHeader('ICCP')                      |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:                       Color Profile                           :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
कलर प्रोफ़ाइल: चंक साइज़ बाइट
आईसीसी प्रोफ़ाइल.

यह डेटा, इमेज के डेटा से पहले दिखना चाहिए.

ज़्यादा से ज़्यादा एक ही ग्रुप होना चाहिए. अगर इस तरह के और भी हिस्से हैं, पहले विकल्प को छोड़कर, बाकी सभी को अनदेखा किया जा सकता है. ज़्यादा जानकारी के लिए आईसीसी की खास बातें देखें.

अगर डेटा का यह ग्रुप मौजूद नहीं है, तो इसे sRGB मानना चाहिए.

मेटाडेटा

मेटाडेटा को 'EXIF' में सेव किया जा सकता है या 'XMP ' चंक.

हर टाइप का ज़्यादा से ज़्यादा एक हिस्सा होना चाहिए ('EXIF' और 'XMP '). अगर वहां इस तरह के ज़्यादा डेटा का इस्तेमाल किया जाता है. पाठक, पहले विकल्प को छोड़कर बाकी सभी को अनदेखा कर सकते हैं.

अलग-अलग हिस्सों को इस तरह से दिखाया गया है:

'एक्सआईएफ़' समूह:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      ChunkHeader('EXIF')                      |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:                        Exif Metadata                          :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Exif मेटाडेटा: चंक साइज़ बाइट
Exif फ़ॉर्मैट में इमेज का मेटाडेटा.

'XMP' समूह:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      ChunkHeader('XMP ')                      |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:                        XMP Metadata                           :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
XMP मेटाडेटा: चंक साइज़ बाइट
XMP फ़ॉर्मैट में इमेज का मेटाडेटा.

ध्यान दें कि 'XMP ' में चौथा वर्ण ForCC एक ASCII स्पेस (0x20) है.

मेटाडेटा को मैनेज करने के बारे में ज़्यादा जानकारी पाने के लिए, मेटाडेटा वर्किंग ग्रुप के "मेटाडेटा मैनेज करने के दिशा-निर्देश" देखें.

अज्ञात चंक

आरआईएफ़एफ़ हिस्सा (RIFF फ़ाइल फ़ॉर्मैट सेक्शन में बताया गया है) जिसकी फ़ोरसीसी, इस दस्तावेज़ में बताए गए किसी भी हिस्से से अलग है, इसे अज्ञात डेटा ग्रुप माना जाता है.

वजह: अनजान चंक की अनुमति देने से, आने वाले समय में फ़ॉर्मैट को बड़ा करने का विकल्प मिलता है. साथ ही, किसी भी ऐप्लिकेशन के हिसाब से डेटा को स्टोर करने की अनुमति मिलती है.

किसी फ़ाइल में ऐसे चंक हो सकते हैं जिनके बारे में जानकारी नहीं है:

पाठकों को इन हिस्सों को अनदेखा करना चाहिए. लेखकों को उन्हें अपने में दी गई जानकारी इस्तेमाल की जा सकती है (जब तक कि वे खास तौर पर इन हिस्सों को बदलने का इरादा न रखते हों).

फ़्रेम से कैनवस असेंबली

यहां हम इस बारे में खास जानकारी देते हैं कि ऐनिमेशन वाली इमेज के मामले में, पाठक को कैनवस को कैसे इकट्ठा करना चाहिए.

यह प्रोसेस, 'VP8X' चंक में दिए गए डाइमेंशन का इस्तेमाल करके कैनवस बनाने से शुरू होती है. यह कैनवस Canvas Width Minus One + 1 पिक्सल चौड़ा और Canvas Height Minus One + 1 पिक्सल ऊंचा होता है. 'ANIM' चंक का Loop Count फ़ील्ड यह कंट्रोल करता है कि ऐनिमेशन की प्रोसेस कितनी बार दोहराई जाए. यह इवेंट Loop Count - 1 गैर-शून्य Loop Count मान या अगर Loop Count शून्य है, तो अनंत.

हर लूप के शुरू होने पर, कैनवस को 'ANIM' चंक के बैकग्राउंड कलर या ऐप्लिकेशन के तय किए गए कलर का इस्तेमाल करके भरा जाता है.

'ANMF' चंक में, डिसप्ले के क्रम में दिए गए अलग-अलग फ़्रेम होते हैं. रेंडरिंग से पहले हर फ़्रेम पर, पिछले फ़्रेम का Disposal method लागू होता है.

डिकोड किए गए फ़्रेम की रेंडरिंग, कार्टीज़न कोऑर्डिनेट (2 * Frame X, 2 * Frame Y) से शुरू होती है. इसके लिए, कैनवस के सबसे ऊपर बाएं कोने को ऑरिजिन के तौर पर इस्तेमाल किया जाता है. Frame Width Minus One + 1 पिक्सल चौड़ा और Frame Height Minus One + 1 पिक्सल ज़्यादा से ज़्यादा वैल्यू को कैनवस पर Blending method का इस्तेमाल करके रेंडर किया जाता है.

कैनवस Frame Duration मिलीसेकंड तक दिखाया जाता है. यह गतिविधि तब तक जारी रहेगी 'ANMF' के दिए गए सभी फ़्रेम हिस्से दिखाए गए हैं. लूप में बार-बार फिर वह शुरू हो गया है या अगर सभी बार पूरा हुआ.

यहां दिया गया pseudocode, रेंडरिंग की प्रोसेस को दिखाता है. VP8X.field नोटेशन का मतलब है कि 'VP8X' चंक में मौजूद वह फ़ील्ड जिसका ब्यौरा एक जैसा है.

VP8X.flags.hasAnimation MUST be TRUE
canvas ← new image of size VP8X.canvasWidth x VP8X.canvasHeight with
         background color ANIM.background_color or
         application-defined color.
loop_count ← ANIM.loopCount
dispose_method ← Dispose to background color
if loop_count == 0:
  loop_count = ∞
frame_params ← nil
next chunk in image_data is ANMF MUST be TRUE
for loop = 0..loop_count - 1
  clear canvas to ANIM.background_color or application-defined color
  until eof or non-ANMF chunk
    frame_params.frameX = Frame X
    frame_params.frameY = Frame Y
    frame_params.frameWidth = Frame Width Minus One + 1
    frame_params.frameHeight = Frame Height Minus One + 1
    frame_params.frameDuration = Frame Duration
    frame_right = frame_params.frameX + frame_params.frameWidth
    frame_bottom = frame_params.frameY + frame_params.frameHeight
    VP8X.canvasWidth >= frame_right MUST be TRUE
    VP8X.canvasHeight >= frame_bottom MUST be TRUE
    for subchunk in 'Frame Data':
      if subchunk.tag == "ALPH":
        alpha subchunks not found in 'Frame Data' earlier MUST be
          TRUE
        frame_params.alpha = alpha_data
      else if subchunk.tag == "VP8 " OR subchunk.tag == "VP8L":
        bitstream subchunks not found in 'Frame Data' earlier MUST
          be TRUE
        frame_params.bitstream = bitstream_data
    apply dispose_method.
    render frame with frame_params.alpha and frame_params.bitstream
      on canvas with top-left corner at (frame_params.frameX,
      frame_params.frameY), using Blending method
      frame_params.blendingMethod.
    canvas contains the decoded image.
    Show the contents of the canvas for
    frame_params.frameDuration * 1 ms.
    dispose_method = frame_params.disposeMethod

फ़ाइल लेआउट के उदाहरण

अल्फा के साथ लॉस-लेस एन्कोड की गई इमेज इस तरह दिख सकती है:

RIFF/WEBP
+- VP8X (descriptions of features used)
+- ALPH (alpha bitstream)
+- VP8 (bitstream)

लॉसलेस-एन्कोडेड इमेज ऐसा दिख सकता है:

RIFF/WEBP
+- VP8X (descriptions of features used)
+- VP8L (lossless bitstream)
+- XYZW (unknown chunk)

ICC प्रोफ़ाइल और XMP मेटाडेटा वाली, क्वालिटी में कोई बदलाव किए बिना इस्तेमाल की जा सकने वाली इमेज इस तरह दिख सकती है:

RIFF/WEBP
+- VP8X (descriptions of features used)
+- ICCP (color profile)
+- VP8L (lossless bitstream)
+- XMP  (metadata)

Exif मेटाडेटा वाली ऐनिमेट की गई इमेज कुछ इस तरह दिख सकती है:

RIFF/WEBP
+- VP8X (descriptions of features used)
+- ANIM (global animation parameters)
+- ANMF (frame1 parameters + data)
+- ANMF (frame2 parameters + data)
+- ANMF (frame3 parameters + data)
+- ANMF (frame4 parameters + data)
+- EXIF (metadata)