Pull to refresh

Comments 47

То есть они наконец воспользовались заложенной в стандарт возможностью хранить кастомную таблицу квантования, а не просто «стандарт × коэффициент»? Похвально. Я, помнится, пытался подобрать таблицы для хорошего сжатия линий (чтобы не обрастали «звоном»), в ущерб градиентам. Фигня получилась, конечно :) Но я и не Гугль :)

А ещё можно, при повторном сжатии уже некогда сжатого изображения, пытаться угадать его «тогдашнюю» таблицу квантования. Ну, и сами квантованные значения в тех местах, где не было редактирования. Это не только предотвратит «цифровой износ», но ещё и «здесь и сейчас» улучшит соотношение «качество/размер».

MozJPEG делали то же самое, подбирали оптимальную таблицу квантования.

Я очень давно пытался сделать свой "самый лучший" архиватор, который подбирал кодирование Хаффмана для каждого файла индивидуально, а не использовал бы стандартную статистическую таблицу. Он даже работал. Но никому он оказался не нужен. Дежавю.

Вы проводили сравнению с другими решениями?

И на сколько подбор кодирования замедлял архивирование?

Вы что-то путаете. Статический хаффман использовался сто лет назад и только в случае если нужно было сжать быстро - например, в драйвере прозрачного сжатия диска. Везде применяется динамический

Это было в начале девяностых. DOS, зоопарк архиваторов (помню ARJ). Я только прочитал про Хаффмана и LZW, и написал свою реализацию двухпроходного сжатия на плюсах. Уже и забыл про это. Вспомнил потому, что упомянули динамическое квантование в JPEG.

Лет в 16-17 я тоже пытался сделать более эффективный формат GIF, чтобы и TrueColor и лучшее сжатие, более умный поиск изменений в кадрах (короче почти повторил оказавшийся никому не нужным APNG, за исключением того, что про APNG хотя бы кто-то слышал)) Но на тот момент, я еще не понимал как устроен мир и когда я закончил пару месяцев ощущал себя мини Стивом Джобсом, кем-то кто изобрел что-то новое, чего не было раньше. Какое-то время даже пытался убедить друзей использовать это и размещать в бесплатных каталогах софта. А потом пришло осознание, что ничего я не изобрел, то, что сделал я, может сделать любой хороший программист, но не делает не потому, что не может, а потому, что это никому не надо) Точнее не так, это надо всем, но ты не заставишь всех этим пользоваться, пока этим не пользуются все) А это про большие деньги, а не про то, что ты на коленке что-то слепил, чуть более эффективное, чем текущий стандарт (в основном за счет того, что стандарту дохрена лет и с тех пор появились алгоритмы получше) и кричишь "Я сделаль!".

Но здесь не та ситуация, тут есть обратная совместимость, а значит, скорее всего взлетит со временем.

Прошу заметить: судя по вашему комментарию, вы не просто "пытались" сделать формат более эффективным, чем существующие, но и в этом вполне преуспели. Вопрос лишь в том, что этот результат вряд ли кто-то увидит, кроме вас и ваших друзей.

А вот как сделать, чтобы заметили — интересный вопрос. У тех же MLщиков есть небезызвестный Kaggle, где они меряются крутостью своих моделек, минимизируя лоссы на датасете. Применительно к архиваторам, есть, например, вот такой рейтинг архиваторов по качеству сжатия ими дампа англоязычной Википедии. Рейтинг открытый и обновляется, если у вас есть архиватор, который сжимает лучше, его можно попробовать туда отправить. Для сжатия картинок я сходу аналогичной таблицы не нашёл, но, возможно, она тоже существует.

В целом, если преимущества "поделки на коленке" перед аналогами можно представить численно — это нужно сделать, и выяснить, кто всё-таки царь горы. А разработчики, которым нужна эта технология, пусть сами решают, что им важнее — стандартность или качество. Обычный tradeoff.

Там надо внимательно смотреть на цифры.

Например, WinRAR (на 76-й строке рейтинга) жмёт на 40% хуже топового nncp, но тратит в 470 раз меньше времени на сжатие/распаковку (колонка ns/byte) и почти в 60 раз меньше памяти. И тут вопрос - стоит ли оно того?

Но да, есть и приличные архиваторы которые жмут лучше условного rar - по таблице какойнить mcm со сравнимыми характеристиками времени (но опять же ценой потребления памяти), но на 28% лучше rar. И опять же вопрос - стоит ли оно того?

Вероятно зависит от применения. Если это долговременные архивы, то на архивацию/разархивацию можно потратить побольше времени, чтобы получить максимальную степень сжатия. Если это архивы для скачивания, которые используются только один раз для распаковки, а потом удаляются, то скорость приоритетней (хотя это тоже обсуждаемо).

Вы шутите? Я вообще не помню, чтобы в современных архиваторах использовались готовые статистические таблицы. Да собствено лабораторная работа в институте по кодированию Хаффмана хрен знает сколько лет назад, состояла как раз в том, чтобы проанализировать файл, создать персональную таблицу статистики и зашифровать файл с сохранением этой таблицы.

Это тоже не очень вариант, средняя температура по больнице. Динамический алгоритм позволяет на ходу менять дерево

Это, конечно, хорошо, но лучше переходить на более совершенные форматы типа WebP, чем пытаться выжать максимум из легаси.

Если можно улучшить "легаси", не жертвуя совместимостью и ресурсами - почему нет? А JPEG XL по всем тестам лучше WEBP, но совместимости нет и поддерживается вяло. Как IPv6 супротив IPv4.

Надо будет мне собраться с яйцами, добить исследование и выдать на-гора статью о сжатии жпегом в 3D (то есть не квадрат 8х8, а куб 8х8х8). Там получился (не у меня первого, но у меня тоже получился, кек) неплохой видеокодек, в котором корреляция «между кадрами» не требует отдельно никакие области движений, смещений (и так далее) высчитывать — они там получаются нативно, «просто потому, что». И жмёт он — держите меня семеро.

Я это рассматривал как расширение (внезапно) стандарта GIF — новый тип кадра для анимации, в котором вместо одного кадра лежат сразу 8. Все остальные опции, типа заголовка с длительностью — оставляем стандартные анигифовские. Ну, и пара новых служебных форматов чанка потребуется — таблицы Хаффмана и квантования сами себя не загрузят.

А главную проблему, связанную с тем, что количество умножений там не квадратичное, а кубичное, я разрешил очень просто, без всяких группировок «бабочкой» и как там вообще обычно это до меня пытались делать: поскольку 95% величин квантуются в ноль (а иначе зачем бы было вообще такое сжатие, как не ради его эффективности?), я просто в 95% случаев перехожу в continue; :-)

И всё у меня в реалтайме на одном ядре сразу стало летать… ларчик просто откр оптимизировался :-D

Получится какой-то MegaMjpeg ))

Ага, МЖпег на стероидах :)

Такое мы ждём. А какие-нибудь предварительные результаты где-нибудь есть? Хотя бы на уровне пары картинок и словестного описания "жалось за столько-то времени, сжалось во столько-то раз."

Попробую выжать что-то из рабочих папок…

Ждём статьи.

Да, есть такой парадокс: чем сильнее сжатие, тем выше скорость)

А по патентам у JPEG что сейчас? Открыли, или по прежнему теоретически всем, кто им пользуется, могут приказать отбашлять?

Пока это легаси поддерживается всем, чем только можно, а совершенный WebP примерно ничем, то пусть пытаются.

Моя версия Фотошопа не поддерживает. И про неё не написано на caniuse.

WebP пока почти исключительно только в вебе. И это хорошо, биороботам сложнее тырить картинки методом копипасты.

В большинстве задач, биороботу мне, для этого хватает скриншота)

К остальным комментариям добавлю, что кроме вялой поддержки в софте у WEBP еще и вялая поддержка в сервисах. Залить WEBP можно не везде. На habrastorage, например, нельзя:

Доступные расширения: jpg, gif, png; ширина до 5000px; максимальный размер до 8 Мбайт

Таких сайтов все еще большинство. WEBP хорош отдавать статику на сайтах. Для личного использования он неудобен, посему у меня стоит "Don't "Accept" image/webp" :)

Два месяца назад купил пару новых МФУ, Epson и Canon, сканируют только в то, во что сканировали все 15 лет назад, а печатают только JPG из своего софта.

Он далеко не совершенный. По всем параметрам и списку возможностей проигрывает JPEG XL, который Google упрямо не хочет реализовывать в Chrome.

В моем комментарии "совершенный" это сарказм)

Знаете, если я на каком то сайте не напрягаясь вижу артефакты JPEG, то почти в 100% случаях это означает, что на картинка в формате WEBP.
Так что либо это формат используют неверно, либо не такой уж он и хороший.

Прошлый раз гугл пытался улучшить deflate сжатие при помощи zopfli, получилось немного улучшить ценой огромных затрат cpu, в итоге brotli победил, а потом пришел zstd и ещё раз победил, причем zstd уже в канареечном хроме завезли и скоро его можно будет в интернете использовать

Ну то есть пользователей Safari и Firefox можно не учитывать, вы считаете?

У них отработает brotli или gzip

Алгоритмы сжатия опциональны. То есть браузер передает серверу список поддерживаемых алгоритмов а сервер, просмотрев этот список, может использовать один из этих алгоритмов и отдать браузеру сжатый контент вместе с заголовком, который указывает на использованный алгоритм. Таким образом если на стороне сервера какой-то новый модный алгоритм уже применяется а на стороне браузера еще нет, то ничего не сломается.

zopfli

brotli

jpegli

Цюрихский офис гугла пошёл вразнос

в итоге brotli победил, а потом пришел zstd и ещё раз победил

А есть тесты сравнительные про победу? Я не смог у себя (.net framework) сделать zstd одновременно быстрее и лучше чем brotli (и то и другое из коробки). По-видимому zstd надо сначала обучить, чего мне делать совсем не хотелось.

https://community.centminmod.com/threads/round-4-compression-comparison-benchmarks-zstd-vs-brotli-vs-pigz-vs-bzip2-vs-xz-etc.18669/

линия zstd выше и шире чем бротли. Мы применяем уже много где zstd в серверах (и сжатие в клике и сжатие логов), и по нашим сравнениям zstd нормально так выигрывает бротли, но мы сравнивали только нативные реализации, что в .net происходит с этим я не знаю. Может ещё конечно от данных зависеть, но чёрт его знает, пока везде я видел победу zstd.

https://news.ycombinator.com/item?id=27163981

Я примерно аналогичное видел. Сейчас ситуация, возможно, изменилась. Но по факту получалось, что либо маленькие данные на бротли, либо большие (но там уже надо фигачить какой-нибудь бинарный протокол вместо джысона) на zstd с его многопоточным кодированием. Хотя многопоточное кодирование тоже палка о СPUcount концах - при массовой нагрузке на сервер ничего никто не выиграет от него.

Попытался найти хоть какие-то примеры, скачал mucped23.zip, там зачем-то png файлы лежат вместо jpeg. И нет нигде размеров того что получилось (цифры q55 и q95 ничего не значат, размер может любой). Как-то всё очень мутно пока. Если все так круто, то почему нет примеров?

Если что, способ существенно сократить размер jpeg без потери обратной совместимости действительно есть, работает только для retina-изображений.

Помнится в свое время Мелкий Софт тоже предлагал улучшенное сжатие картинок, но там бвл новый формат.Даже этому гиганту не удалось подвинуть популярный формат. Здесь же вроде все на мази...

Улучшение на 35%, говорите? Надеюсь, это не снизит качество моих селфи до уровня пиксель-арта. Но если благодаря этому страницы будут загружаться быстрее, то я готов принять этот вызов. Быстрый интернет превыше всего, даже если ради этого придется увидеть себя немного... 'оптимизированным'!"

Sign up to leave a comment.