Стиснення JPEG з допомогою Guetzli

17

Від автора: не так давно Google випустила свій кодувальник JPEG-зображень Guetzli, який за заявами розробників на 20-30% стискає файли краще, ніж libjpeg. Будучи заінтригованим, я вирішив спробувати новий інструмент. Сам я вже протягом довгого часу для оптимізації JPEG використовую jpeg-recompress, installer можна завантажити на jpeg-archive project. В інструменті маса налаштувань, він дуже швидкий і реально оптимізує JPEG. Але чи можна його порівняти з Guetzli?

Рудиментарний тест кейс

Для початку я використовував своє зображення:

Стиснення JPEG з допомогою Guetzli

Зверху ви бачите набагато меншу версію неоптимизированного JPEG-зображення, над яким я працював. Розмір оригіналу становив 2560×2561 і важив 861 Кб. Я обробив це зображення в Guetzli за допомогою наступної команди:

guetzli unoptimized.jpg guetzli.jpg

Обробка зайняла час, досить тривалий час, якщо чесно. Однак це не дивно, адже Google в readme проекту пояснює, що на кожен мегапіксель потрібно близько хвилини процесорного часу (моє тестове зображення було 2.5 мегапікселя). На виході Guetzli дав мені файл вагою 770 Кб, що на 11% менше вихідного зображення. Після цього я запустив jpeg-recompress для стиснення вихідного зображення за допомогою команди:

jpeg-recompress —accurate —strip unoptimized.jpg guetzli.jpg

Jpeg-recompress впорався трохи краще, вихідний файл важив 662 Кб. Результат на 23% менше неоптимизированного джерела та на 15% менше версії на Guetzli. Чи означає це, jpeg recompress безперечний переможець? Все залежить від безлічі факторів. Стандартний алгоритм jpeg-recompress полягає в перевірці зображення в межах стандартного діапазону якості від 40 до 95 для пошуку оптимального співвідношення якість/вага. За умовчанням встановлено 6 циклів (зазвичай, цього достатньо), однак цей параметр можна налаштувати. При оптимізації мого портрета jpeg-recompress зупинився на якості 80. У Guetzli за замовчуванням стоїть 95. Що буде, якщо в Guetzli виставити порівнянні налаштування? На жаль, я не зміг цього зробити, Guetzli заборонено ставити якість менше 84. Щоб результат був хоч якось можна порівняти з jpeg-recompress, я встановив мінімально можливе значення 84:

guetzli —quality 84 unoptimized.jpg guetzli-q84.jpg

І результат? Після довгого очікування оптимізована в Guetzli версія зображення з якістю 84 стала важити 636 Кб. На 26 Кб менше, ніж версія jpeg-recompress з якістю 80. Так як же порівнювати Guetzli з конкурентами в плані візуального якості? У випадку з моїм портретом обидва оптимізованих зображення майже не відрізняються.

Стиснення JPEG з допомогою Guetzli

Звичайно, це лише один приклад. Як Guetzli покаже себе з цілим набором зображень? Давайте подивимося!

Продуктивність Guetzli на прикладі з набором зображень

Один тест двох оптимізаторів зображень може бути корисним, але він дає лише вузький погляд на продуктивність. Якщо потрібно отримати повне уявлення про якість роботи оптимізатора, потрібно проводити тести на великій кількості зображень. Для тестування я вибрав кілька оптимізаторів і близько 500 зображень. На фото була зображена різна їжа. Такі зображення можна зустріти на сайтах з рецептами. Для обробки пакета зображень я використовував команду find (з допомогою техніки, описаної в цьому пості). Неоптимізовані зображення важили 37,388 кілобайт. В кожному тесті я виставляв мінімально допустиме в Guetzli якість 84. Також я використовував команду time, щоб визначити час роботи кожного оптимізатора. Нижче представлений результат з командами для кожного оптимізатора, часом обробки пакета неоптимізованих зображень у кожному інструменті, а також загальний розмір оптимізованих зображень:

Стиснення JPEG з допомогою Guetzli

Замітка: бінарний файл cjpeg з mozjpeg 3.1

Висновки: Guetzli впорався краще за всіх з мінімально доступним якістю 84, але обробка зайняла звірячому багато часу. Велика частина оптимізаторів підбирається до схожих результатів, а обробка проходить на кілька порядків швидше.

Крім того, для веб-зображень можна знизити якість і нижча 84. Якість зображення необхідно розцінювати як суб’єктивну проблему, так як у процес оцінки користувачем зображення може бути залучено будь-яку кількість змінних. А як щодо відстані перегляду, фізичних розмірів пристрою і дозволу екрану? Все просто: якщо ви не можете відрізнити неоптимизированное зображення від оптимізованого, і користувач не зможе. Якщо ви бачите різницю, не факт, що користувачі її помітять, так як у них немає вихідної великий версії зображення для порівняння.

Я прогнав набір цих зображень в jpeg-recompress з діапазоном якості 30-70 і зміг домогтися розміру 11,114 Кб. А це ще пара мегабайт, які міг би заощадити Guetzli. Незважаючи на гіршу якість, результат був прийнятний (хоча це суб’єктивно).

Також варто врахувати, що Guetzli не вміє обробляти прогресивний JPEG. Прогресивний JPEG зазвичай менше, ніж стандартний JPEG. Ще краще, прогресивний JPEG мінімізує зрушення макета з-за способу завантаження. Менше зрушень макета, менше перерисовок сторінки. Менше перерисовок, менше споживання батареї.

Guetzli дуже ефективний у випадках, коли якість понад усе, але особисто я віддаю перевагу інші оптимізатори. Guetzli легко виграє у конкурентів при порівнянних налаштуваннях якості, але в ньому не можна встановити якість нижче 84. З-за цих обмежень, неймовірною завантаження процесора, а також відсутності підтримки прогресивного JPEG я не можу рекомендувати цей інструмент.