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

ג'ירקי אלקוויג'לה, Ph.D., Google, Inc.
וינסנט Rabaud, Ph.D., Google, Inc.
תאריך עדכון אחרון: 1 באוגוסט 2017

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

מבוא

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

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

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

שיטות

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

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

  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.

תמונות של קורפורה

נבחרו שלושה מקורות:

  1. תמונה מצולמת יחידה (איור 1),

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

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

איור 1. תמונה גרפית, 1,024 x 752 פיקסלים. נשימה שריפה "להקת כלי הנשיפה ג'ייפור מהראג'ה" צ'ספיר בלגיה, מחבר: לוק Viatour, תמונה ברישיון Creative Commons רישיון Attribution-Share Alike 3.0 ללא התאמה. אתר המחבר נמצא כאן.

איור 2. תמונה גרפית, 1024 x 752 פיקסלים. קולאז'ים מכלי התרשים של Google

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

  1. הצמדה ל-8 ביטים לכל רכיב: המרה של מדינה.png - 8 ביטים בפלט.png

  2. ImageMagick(1) ללא גורמי חיזוי: המרה שלinput.png - איכות 90 output-candidate.png

  3. ImageMagick עם מנבאים ניתנים להתאמה: המרה שלinput.png - איכות 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 קלט.png.

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

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

תוצאות

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

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

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

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

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

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

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

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

קבוצת תמונות המרה - איכות 95 ZopfliPNG WebP איבוד נתונים – Q0 -m 1 WebP ללא אובדן (הגדרות ברירת מחדל) WebP ללא אובדן - 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. זמן הקידוד הממוצע עבור מאגר הדחיסה ושיטות דחיסה שונות.

קבוצת תמונות המרה - איכות 95 ZopfliPNG WebP איבוד נתונים – Q0 -m 1 WebP ללא אובדן (הגדרות ברירת מחדל) WebP ללא אובדן - 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. זמן הפענוח הממוצע של שלושת מאגרי התמונות של קובצי תמונה שנדחסו בשיטות ובהגדרות שונות.

קבוצת תמונות המרה - איכות 95 ZopfliPNG WebP איבוד נתונים – Q0 -m 1 WebP ללא אובדן (הגדרות ברירת מחדל) WebP ללא אובדן - 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 שנ'

יצירת פרופילים של הזיכרון

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

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

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

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

מסקנות

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

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

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

קובצי עזר

  1. ImageMagick

  2. Pngcrush

  3. ZopfliPNG

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

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