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

परिचय

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

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

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

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

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

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

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

इन्हें

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

कंटेनर के फ़ॉर्मैट का नाम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) और 'एएएए' (0x41414141) को अलग FourCCs माना जाता है.
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 होगी -- जोड़ा गया.

ध्यान दें: RIFF में एक नियम है कि सभी अपरकेस वाले चंक के लिए FourCC, स्टैंडर्ड चंक होते हैं. ये किसी भी RIFF फ़ाइल फ़ॉर्मैट पर लागू होते हैं. वहीं, किसी फ़ाइल फ़ॉर्मैट के लिए FourCC, सभी लोअरकेस होते हैं. 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 फ़ाइल की शुरुआत, एआरआईएफ़ हेडर से होनी चाहिए और इसमें फ़ोरसीसी 'वेबपी' को होना चाहिए. हेडर में मौजूद फ़ाइल का साइज़, इसके बाद आने वाले सभी चंक का कुल साइज़ होता है. साथ ही, इसमें 'WEBP' फ़ोरसीसी के लिए 4 बाइट भी शामिल होते हैं. डेटा के बाद फ़ाइल में कोई डेटा नहीं होना चाहिए फ़ाइल के साइज़ से तय होता है. पाठक ऐसी फ़ाइलों को पार्स कर सकते हैं, जो कि पीछे वाले हिस्से को अनदेखा करते हैं डेटा शामिल है. किसी भी डेटा ग्रुप का साइज़ सम होने पर, आरआईएफ़एफ़ हेडर से दिया गया साइज़ यहां तक कि. अलग-अलग हिस्सों के कॉन्टेंट के बारे में यहां बताया गया है सेक्शन.

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

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

सिंपल 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 ' में चौथा वर्ण ForCC एक 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' चंक.

  • वैकल्पिक 'Animal' ऐनिमेशन कंट्रोल डेटा के साथ डेटा शेयर करें.

  • इमेज का डेटा.

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

  • XMP मेटाडेटा वाला वैकल्पिक 'XMP ' चंक.

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

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

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

वीडियो को फिर से बनाने और रंग में सुधार करने के लिए ज़रूरी सभी चंक, पहले बताए गए क्रम में होने चाहिए. जैसे, 'VP8X', 'ICCP', 'ANIM', '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): एक बिट
फ़ाइल में XMP मेटाडेटा हो या नहीं, यह सेट करें.
ऐनिमेशन (A): 1 बिट
सेट करें कि यह ऐनिमेशन वाली इमेज है या नहीं. ऐनिमेशन को कंट्रोल करने के लिए, 'ANIM' और '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' चंक कंट्रोल करते हैं.

'ANIM' चंक:

ऐनिमेशन वाली इमेज के लिए, इस डेटा समूह में ऐनिमेशन.

 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): एक बिट

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

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

  • 1: बैकग्राउंड के रंग में बदलाव करें. कैनवस पर मौजूदा फ़्रेम से ढके हुए रेक्टैंगल को, 'ANIM' चंक में बताए गए बैकग्राउंड कलर से भरें.

ध्यान दें:

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

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

    यह देखते हुए कि R, G, B, और A चैनल में से हर एक 8 बिट है और RGB चैनलों को ऐल्फ़ा से पहले से गुणा नहीं किया गया हो. यह ब्लेंड करने का फ़ॉर्मूला है 'डीएसटी' '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) को मान लिया जाएगा. (ध्यान दें कि ~2.2 के गामा की वजह से, sRGB को भी लीनियर करने की ज़रूरत है.)

फ़्रेम डेटा: चंक साइज़ बाइट - 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: अनुमान लगाने वाला = B
  • तरीका 3: अनुमान लगाने वाला = Clips(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 लॉसलेस बिटस्ट्रीम फ़ॉर्मैट" में बताया गया है). इसका मतलब है कि इमेज-स्ट्रीम में इमेज के डाइमेंशन की जानकारी देने वाला कोई हेडर नहीं है.

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

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

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

बिटस्ट्रीम (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 फ़ॉर्मैट में इमेज का मेटाडेटा.

'एक्सएमपी' समूह:

 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 फ़ाइल फ़ॉर्मैट सेक्शन में बताए गए RIFF चंक को अज्ञात चंक माना जाता है. ऐसा तब होता है, जब चंक का FourCC, इस दस्तावेज़ में बताए गए किसी भी चंक से अलग हो.

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

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

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

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

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

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

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

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

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

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

नीचे दिया गया स्यूडोकोड, रेंडर करने की प्रोसेस दिखाता है. 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)