И хоть faq довольно понятный, я считаю, что можно было сделать лучше, тем более что там не было статистик или объяснения, почему рекомендуется использовать именно bzip2
Вообще, дававйте начнём с самого начала - почему farbfeld это хороший формат? Каковы его сильные стороны?
Ну что же, как написано в faq, это очень простой формат, что означает, что вполне легко написать программу для работы с ним. Но есть гораздо больше плюсов. На самом деле, это один из самых быстрых и маленьких форматов, которые не теряют качества. Дайте мне это повторить - farbfeld не просто для бородатых кодеров - он объективно лучше* и лёгкая замена таким форматам, как png!
Однако всё не так хорошо - разработчики многих форматов изображений пытались создать баланс между хорошим коэффицентом сжатия и скоростью и они попали прямо в середину. Farbfeld не может (всегда) быть одновременно быстрее и меньше. Но это тоже плюс - каждый может выбрать любую вариацию и неважно какой она будет, её всё равно смогут все просмотреть, потому что это всё farbfeld!
И чтобы показать его мощь, я сделал пару...
Файл | Размер | Скорость сжатия | Скорость разжатия |
wall.ff.bz2 | 58K | 1.795s | 0.108s |
wall.ff.br | 64K | 1.373s | 0.024s |
wall.ff.xz | 66K | 0.284s | 0.022s |
wall.ff.zst (лучший) | 75K | 0.289s | 0.019s |
wall.ff.zst (оптимальный) | 77K | 0.15s | 0.016s |
wall.ff.zst (по-умолчанию) | 100K | 0.011s | 0.015s |
wall.ff.gz (по-умолчанию) | 128K | 0.062s | 0.049s |
wall.png | 151K | 0.114s | 0.02s |
wall.ff.lz4 (лучший) | 181K | 0.355s | 0.015s |
wall.ff.lz4 (оптимальный) | 183K | 0.055s | 0.015s |
wall.ff.lzo (лучший) | 204K | 0.24s | 0.016s |
wall.ff.gz (быстрейший) | 217K | 0.041s | 0.044s |
wall.ff.lz4 (по-умолчанию) | 231K | 0.012s | 0.015s |
wall.ff.zst (быстрейший) | 246K | 0.008s | 0.016s |
wall.ff.lzo (по-умолчанию) | 254K | 0.008s | 0.017s |
wall.ff.lz4 (быстрейший) | 274K | 0.012s | 0.015s |
wall.ff | 16M | 0s | 0s |
Это довольно простая картинка, и здесь большинство методов сжатия превосходят png, а zst по-умолчанию например полностью заменяет его. bzip2 практически в 3 раза меньше
Здесь, я уже хотел завершить тестирование и думать, если мне стоит использвать zstd или xz, но затем я подумал:
Что насчёт более сложных изображений?
Файл | Размер | Скорость сжатия | Скорость разжатия |
painting.png | 13M | 2.9s | 0.16s |
painting.ff.bz2 | 13M | 2s | 1.4s |
painting.ff.xz (по-умолчанию) | 13M | 8.3s | 0.175s |
painting.ff.br (по-умолчанию) | 14M | 1m12s | 0.165s |
painting.ff.zst (лучший) | 15M | 18.6s | 0.1s |
painting.ff.zst (оптимальный) | 16M | 17.6s | 0.08s |
painting.ff.xz (быстрейший) | 17M | 0.3s | 0.09s |
painting.ff.gz (по-умолчанию) | 17M | 2.4s | 0.33s |
painting.ff.br (оптимальный) | 17M | 9.45s | 0.165s |
painting.ff.zst (по-умолчанию) | 21M | 0.3s | 0.09s |
painting.ff.gz (лучший) | 22M | 2.9s | 0.33s |
painting.ff.gz (быстрейший) | 25M | 0.635s | 0.37s |
painting.ff.br (оптимальный) | 25M | 0.3s | 0.23s |
painting.ff.lz4 (лучший) | 27M | 0.52s | 0.05s |
painting.ff.lzo (лучший) | 28M | 4s | 0.14s |
painting.ff.br (быстрейший) | 28M | 0.21s | 0.25s |
painting.ff.lzo (по-умолчанию) | 36M | 0.16s | 0.13s |
painting.ff.lz4 (по-умолчанию) | 40M | 0.06s | 0.05s |
painting.ff.zst (быстрейший) | 51M | 0.09s | 0.05s |
painting.ff.lz4 (быстрейший) | 52M | 0.05s | 0.05s |
painting.ff | 64M | 0s | 0s |
Теперь вы можете сказать: "Ну вот здесь у png лучший коэффицент сжатия и всё ещё неплохая скорость! Это должен быть лучший формат для более больших/сложных картинок, так ведь?"
Авторы формата рекомендуют использовать bzip2 за его хороший коэффицент сжатия, но они наверняка не видели этого:
painting.ff.xz (ff-заточенное) 8.5M 10.65s 0.16sДа, это так: можно получать картинки куда меньше чем png, без потери качества, и имея такую же скорость расжатия!
Так что если вам особо не важна скорость сжатия (как мне), то это - лучший вариант (если вы только не хотите скорости и только скорости - в этом случае используйте сырой .ff)
Конечно для каждого сценария есть разные методы сжатия, которые могут быть использованы
Например я использую сырые .ff файлы для своих обоев, так как я использую их каждый день и хочу сохранить как можно больше циклов процессора и одно изображение не занимает особо много места
Команда, которую я использовал для создания ff-заточенных картинок:
xz --delta=dist=8 --lzma2=pb=3 painting.ffИ если вы этому всё ещё не верите, вот бэнчмарк альбома со 101 фотографией:
Файл | Размер | Скорость сжатия | Скорость разжатия |
ff.tar.xz (ff-заточенное) | 88M | 27.5s | 0.5s |
ff.tar.xz (лучший) | 97M | 1m | 1.2s |
ff.tar.bz2 | 97M | 21.3s | 10.1s |
ff.tar.xz (по-умолчанию) | 100M | 21.8s | 0.4s |
ff.tar.br | 104M | 10m | 0.9s |
ff.tar.zst (лучший) | 115M | 3m | 0.6s |
ff.tar.zst (оптимальный) | 118M | 2m | 0.5s |
ff.tar.xz (быстрейший) | 127M | 3s | 0.4s |
ff.tar.br (оптимальный) | 129M | 1m | 0.9s |
png.tar | 136M | 21s | 2.5s |
ff.tar.zst (по-умолчанию) | 151M | 5.4s | 0.5s |
ff.tar.gz (лучший) | 166M | 21s | 2s |
ff.tar.gz (быстрейший) | 186M | 4.5s | 2.2s |
ff.tar.lz4 (лучший) | 187M | 3.4s | 0.2s |
ff.tar.lzo (лучший) | 193M | 31.5s | 0.7s |
ff.tar.br (быстрейший) | 202M | 1.3s | 1.5s |
ff.tar.lzo (по-умолчанию) | 257M | 1s | 0.6s |
ff.tar.lz4 (по-умолчанию) | 279M | 0.2s | 0.2s |
ff.tar.zst (быстрейший) | 337M | 0.5s | 0.2s |
ff.tar.lz4 (быстрейший) | 342M | 0.1s | 0.1s |
ff.tar | 466M | 0s | 0s |
Как вы можете видеть, ff-заточенное сжатие гораздо лучше всех других, по крайней мере для моих нужд
И да, сжатие нескольких файлов за раз для более хорошего коэффицента сжатия это тоже одна из функций farbfeld, а, если вам интересно, то сжатие всех картинок индивидуально даёт чуть более высокую скорость, но с более плохим коэффицентом сжатия. Всё еще лучше чем png!
Существует всего-лишь несколько приложений, которые поддерживают этот прекрасный формат, но я всё равно перечислю те, о которых я знаю
Так что если вы разрабатываете программу, то пожалуйста добавьте поддержку farbfeld. Это сделало бы всех счастливыми и мы были бы на один шаг ближе к тому, чтобы о нас узнали