[О блоге]
[наверх]
[пред]
[2023-03-24 10:06:50+03:00]
[b0b1c55e7e310cb75e94807bcaef7f3a175f29e0]
Темы: [multimedia][tip]
JPEG XL vs PNG/WebP
https://github.com/libjxl/libjxl/issues/426
https://github.com/libjxl/libjxl/issues/727
JPEG XL хорош на всём что касается фотографических изображений. Но на
синтетических, типа снимков экрана терминала, он не всегда лучше PNG.
Делал я тут снимки mmc (66a73601f697c99ce2d0554eebe5017e2a0861bd) и
некоторые из них в PNG занимают немного меньше, большинство всё же
побольше. WebP при этом в два раза меньше умудряется делать размером
всё. Ничего удивительного, ожидаемо -- всё же JXL для фотографий. Но,
насколько понимаю, потенциал в виде его тьюринг-полных (почти)
predictor-ов в теории может бить PNG всегда.
Про эту особенность на GitHub libjxl-а знают. Оттуда узнал что, как раз
таки, можно задать перебор всех predictor-ов, опцией --modular_predictor=15.
--help вообще так себе у cjxl утилиты, ибо там написано же что оно и
равно 15-ти "at slowest speed", а штатный самый медленный --effort это
9-ка, которую я всегда и использую. Но нет, 15 оно не включает. Так вот
с этими опциями JXL у меня все PNG побил.
22.878 png
10.928 webp
23.568 jxl (-d 0 -e 9 -p)
19.274 jxl (-d 0 -e 9 -p -P 15)
23.568 jxl (-d 0 -e 9 -p -P 0)
18.658 jxl (-d 0 -e 9 -p -P 0 -g 3)
17.692 jxl (-d 0 -e 9 -p -P 15 -g 3)
Но тут я задался вопросом: а прогрессивное декодирование нужно ли? Я его
автоматом выставляю потому что в JPEG оно даже помогает, в PNG тоже не
вредит.
10.460 jxl (-d 0 -e 9)
10.460 jxl (-d 0 -e 9 -P 15)
15.216 jxl (-d 0 -e 9 -P 0)
16.262 jxl (-d 0 -e 9 -P 0 -g 3)
10.217 jxl (-d 0 -e 9 -P 15 -g 3)
Без игр с predictor и modular group size, JXL сразу же побил WebP! Для
меня это стало открытием. Действительно, с какой стати я посчитал что
поведение прогрессивного декодирования должно быть похоже на то, что в
JPEG? Оно очень круто в этом примере вредит сжатию.
Проверил на снимках с сайта PyDERASN-а, где WebP занимал более чем в два
раза меньше места чем PNG:
23.996 browser.webp
7.733 browser.jxl (-d 0 -e 9)
7.532 browser.jxl (-d 0 -e 9 -P 15 -g 3)
18.906 pprinting.webp
8.357 pprinting.jxl (-d 0 -e 9)
8.381 pprinting.jxl (-d 0 -e 9 -P 15 -g 3)
8.341 pprinting.jxl (-d 0 -e 9 -P 0)
JXL тут более чем в два раза бьёт WebP. Причём все эти -P/-g опции везде
по разному влияют на сжатие: где-то хуже становится, где-то лучше.
Автоматического их перебора в cjxl утилите нет. Собственно, люди пишут
собственные скрипты для этого. Попробовал "--allow_expert_options -e 10",
но это оооооочень долгая операция. Если все остальные вызовы
отрабатывали 2-3сек, то с -e10 на восьми ядрах это заняло почти 10мин, с
чуть более лучшим результатом, на этой 1920x1060x8bpp картинке:
10.217 jxl (-d 0 -e 9 -P 15 -g 3)
10.188 jxl (-d 0 -e 10)
[оставить комментарий]