קידוד ללא אובדן ושקיפות ב-WebP

ד"ר יורקי אלקויאלה, Google, Inc.‎
ד"ר וינסנט ראבו (Vincent Rabaud), Google, Inc.‎
תאריך עדכון אחרון: 1 באוגוסט 2017

תקציר – אנחנו משווים את השימוש במשאבים של מקודד/מפענח WebP לזה של PNG גם במצב ללא אובדן נתונים וגם במצב עם אובדן נתונים. אנחנו משתמשים ב-corpus של 12,000 תמונות PNG שקופות שנבחרו באופן אקראי מהאינטרנט, ובמדידות פשוטות יותר כדי להראות את השונות בביצועים. דחסנו מחדש את קובצי ה-PNG בקורפוס שלנו כדי להשוות בין תמונות WebP לבין קובצי PNG שעברו אופטימיזציה של גודל. בתוצאות שלנו אנחנו מראים ש-WebP הוא תחליף טוב ל-PNG לשימוש באינטרנט, גם מבחינת הגודל וגם מבחינת מהירות העיבוד.

מבוא

פורמט WebP תומך בתמונות שקופצות ובתמונות ללא אובדן נתונים, ולכן הוא מהווה אלטרנטיבה לפורמט PNG. ב-WebP יש תמיכה בהרבה מהשיטות הבסיסיות שמשמשות לדחיסת PNG, כמו קידוד במילון, קידוד Huffman וטרנספורמציה של אינדקס צבעים, וכתוצאה מכך יש מהירות וצפיפות דחיסה דומים במקרה הגרוע ביותר. במקביל, מספר תכונות חדשות – כמו קודי אנטרופי נפרדים לערוצי צבע שונים, מיקום מקומי דו-מימדי של מרחקי הפניה לאחור ומטמון צבעים של צבעים שנעשה בהם שימוש לאחרונה – מאפשרות לשפר את צפיפות הדחיסה ברוב התמונות.

במאמר הזה אנחנו משווים בין הביצועים של WebP לבין תמונות PNG שהולחצו מאוד באמצעות pngcrush ו-ZopfliPNG. דחסנו מחדש את מאגר התמונות שלנו באינטרנט לפי השיטות המומלצות, והשווינו בין דחיסת WebP ללא אובדן נתונים לבין דחיסת WebP עם אובדן נתונים. בנוסף למאגר העזר, בחרנו שתי תמונות גדולות יותר, אחת צילום והשנייה גרפיקה, כדי לבצע השוואה בין המהירות לבין השימוש בזיכרון.

הוכחו מהירויות פענוח מהירות יותר מ-PNG, וגם דחיסה צפופה יותר ב-23% ממה שאפשר להשיג באמצעות פורמט PNG הנוכחי. המסקנה שלנו היא ש-WebP הוא תחליף יעיל יותר לפורמט התמונה הנוכחי של PNG. בנוסף, דחיסת תמונות עם אובדן נתונים עם תמיכה ב-alpha ללא אובדן נתונים מספקת אפשרויות נוספות להאצת אתרים.

Methods

כלים של שורת הפקודה

אנחנו משתמשים בכלי שורת הפקודה הבאים כדי למדוד את הביצועים:

  1. cwebp ו-dwebp. הכלים האלה הם חלק מספריית libwebp (הכוללת קובץ קוד מקור).

  2. המרה. זהו כלי שורת פקודה שמשויך לתוכנת ImageMagick (6.7.7-10 2017-07-21).

  3. pngcrush 1.8.12 (30 ביולי 2017)

  4. ZopfliPNG (17 ביולי 2017)

אנחנו משתמשים בכלי שורת הפקודה עם דגלי הבקרה המתאימים. לדוגמה, אם מציינים את הפקודה cwebp -q 1 -m 0, המשמעות היא שכלי cwebp הופעל עם הדגלים -q 1 ו-m 0.

Image Corpora

נבחרו שלושה קורפוסים:

  1. תמונה בודדת (איור 1),

  2. תמונה גרפית אחת עם שקיפות (איור 2), וגם

  3. מאגר אינטרנט: 12,000 תמונות PNG שנבחרו באופן אקראי, עם או בלי שקיפות, וסרקו מהאינטרנט. תמונות ה-PNG האלה עוברות אופטימיזציה באמצעות convert,‏ pngcrush ו-ZopfliPNG, והגרסה הקטנה ביותר של כל תמונה נלקחת בחשבון במחקר.

איור 1. תמונה סטילס, 1,024 x 752 פיקסלים. 'Jaipur Maharaja Brass Band', Chassepierre Belgium, Author: Luc Viatour, התמונה ברישיון Creative Commons Attribution-Share Alike 3.0 Unported. האתר של המחבר/ת נמצא כאן.

איור 2. תמונה גרפית, בגודל 1,024 x 752 פיקסלים. יצירת קולאז'ים מתמונות באמצעות Google Chart Tools

כדי למדוד את מלוא היכולות של הפורמט הקיים, PNG, דחסנו מחדש את כל תמונות ה-PNG המקוריות האלה באמצעות כמה שיטות:

  1. הגבלה ל-8 ביט לכל רכיב: convert input.png -depth 8 output.png

  2. ImageMagick(1) ללא מנבאים: convert input.png -quality 90 output-candidate.png

  3. ImageMagick עם מנבאים מותאמים: convert input.png -quality 95 output-candidate.png

  4. Pngcrush(2): ‎pngcrush -brute -rem tEXt -rem tIME -rem iTXt -rem zTXt ‎ -rem gAMA -rem cHRM -rem iCCP -rem sRGB -rem alla -rem text ‎ input.png output-candidate.png

  5. ZopfliPNG(3): zopflipng --lossy_transparent input.png output-candidate.png

  6. ZopfliPNG עם כל המסננים: zopflipng --iterations=500 --filters=01234mepb --lossy_8bit --lossy_transparent input.png output-candidate.png

תוצאות

חישבנו את צפיפות הדחיסה של כל אחת מהתמונות בקורפוס האינטרנט, ביחס לגדלים של תמונות PNG שעברו אופטימיזציה בשלושה שיטות:

  1. WebP lossless (הגדרות ברירת המחדל)

  2. WebP ללא אובדן נתונים בגודל הקטן ביותר (‎-m 6 -q 100)

  3. האפשרות הטובה ביותר מבין WebP ללא אובדן נתונים ו-WebP עם אובדן נתונים עם אלפא (הגדרות ברירת המחדל).

מיון של גורמי הדחיסה האלה ותצוגה שלהם בתרשים 3.

איור 3. צפיפות הדחיסה של קובצי PNG משמשת כנקודת ייחוס, עם ערך של 1.0. אותן תמונות נדחסות בשיטות lossless ו-lossy. לכל תמונה, המערכת מחשבת את יחס הגודל ל-PNG דחוס, וממיינת את יחסי הגודל ומציגה אותם גם לדחיסת נתונים ללא אובדן נתונים וגם לדחיסת נתונים עם אובדן נתונים. בתרשים של דחיסת הנתונים עם אובדן, דחיסת הנתונים ללא אובדן נבחרת במקרים שבהם היא יוצרת תמונה קטנה יותר בפורמט WebP.

פורמט WebP חורג מהצפיפות של דחיסת הנתונים בפורמט PNG, גם ב-libpng באיכות מקסימלית (המרה) וגם ב-ZopfliPNG (טבלה 1). מהירויות הקידוד (טבלה 2) והפענוח (טבלה 3) דומות לאלה של PNG.

טבלה 1. מספר הביטים הממוצע לכל פיקסל בשלושת הקורפוסים באמצעות שיטות הדחיסה השונות.

קבוצת תמונות convert -quality 95 ZopfliPNG WebP lossless -q 0 -m 1 WebP lossless (הגדרות ברירת מחדל) WebP lossless -m 6 -q 100 WebP עם אובדן נתונים ואלפא
תמונה, פוטו 12.3 12.2 10.5 10.1 9.83 0.81
גרפי [בביטוי "תוכן גרפי"] 1.36 1.05 0.88 0.71 0.70 0.51
אינטרנט 6.85 5.05 4.42 4.04 3.96 1.92

טבלה 2. זמן הקידוד הממוצע של מאגרי הנתונים לדחיסה ושל שיטות דחיסה שונות.

קבוצת תמונות convert -quality 95 ZopfliPNG WebP lossless -q 0 -m 1 WebP lossless (הגדרות ברירת מחדל) WebP lossless -m 6 -q 100 WebP עם אובדן נתונים ואלפא
תמונה, פוטו 0.500 שניות 8.7 שניות 0.293 שניות 0.780 שניות 8.440 שניות 0.111 שניות
גרפי [בביטוי "תוכן גרפי"] 0.179 שניות 14.0 שניות 0.065 שניות 0.140 שניות 3.510 שניות 0.184 שניות
אינטרנט 0.040 שניות 1.55 שניות 0.017 שניות 0.072 שניות 2.454 שניות 0.020 שניות

טבלה 3 זמן הפענוח הממוצע של שלושת הקורפוסים בקובצי תמונה שנלחצו בשיטות ובהגדרות שונות.

קבוצת תמונות convert -quality 95 ZopfliPNG WebP lossless -q 0 -m 1 WebP lossless (הגדרות ברירת מחדל) WebP lossless -m 6 -q 100 WebP עם אובדן נתונים ואלפא
תמונה, פוטו 0.027 שניות 0.026 שניות 0.027 שניות 0.026 שניות 0.027 0.012 שניות
גרפיקה 0.049 שניות 0.015 שניות 0.005 שניות 0.005 שניות 0.003 0.010 שניות
אינטרנט 0.007 שניות 0.005 שניות 0.003 שניות 0.003 שניות 0.003 0.003 שניות

ניתוח ביצועי הזיכרון

כדי ליצור את פרופיל הזיכרון, תיעדנו את הגודל המקסימלי של קבוצת המגורים (resident set) כפי שדווח על ידי /usr/bin/time -v

לגבי מאגר הנתונים של האינטרנט, גודל התמונה הגדולה ביותר מגדיר את השימוש המקסימלי בזיכרון. כדי להגדיר בצורה טובה יותר את המדידה של הזיכרון, אנחנו משתמשים בתמונה בודדת (איור 1) כדי לספק סקירה כללית של השימוש בזיכרון. התמונה הגרפית מניבה תוצאות דומות.

מדדנו 10 עד 19MB ל-libpng ול-ZopfliPNG, ו-25MB ו-32MB לקידוד WebP ללא אובדן נתונים בהגדרות -q 0 -m 1 ו--q 95 (עם ערך ברירת מחדל של -m), בהתאמה.

בניסוי פענוח, הפונקציה convert -resize 1x1 משתמשת ב-10MB גם בקובצי ה-PNG שנוצרו על ידי libpng וגם בקובצי ה-PNG שנוצרו על ידי ZopfliPNG. כשמשתמשים ב-cwebp, פענוח ללא אובדן נתונים של WebP צורך 7MiB, ופענוח עם אובדן נתונים צורך 3MiB.

מסקנות

הראינו שגם מהירות ההצפנה וגם מהירות הפענוח נמצאות באותו תחום של מהירויות PNG. יש עלייה בשימוש בזיכרון במהלך שלב הקידוד, אבל שלב הפענוח מראה ירידה משמעותית, לפחות בהשוואה להתנהגות של cwebp לזו של convert של ImageMagick.

צפיפות הדחיסה טובה יותר ב-99% מהתמונות באינטרנט, כך שאפשר לעבור בקלות יחסית מ-PNG ל-WebP.

כש-WebP פועל עם הגדרות ברירת המחדל, הדחיסה שלו טובה ב-42% מזו של libpng וב-23% מזו של ZopfliPNG. הנתונים האלה מראים ש-WebP יכול לשפר את המהירות של אתרים עם הרבה תמונות.

קובצי עזר

  1. ImageMagick

  2. Pngcrush

  3. ZopfliPNG

המחקרים הבאים הם מחקרים עצמאיים שלא ממומנים על ידי Google, ו-Google לא תומכת בהכרח בנכונות של כל התוכן שלהם.

  1. הבלוג של יואב וויס