Мне нужно уменьшить размер моей библиотеки фотографий, поэтому я, естественно, хочу сжать их. Многие из них не совсем идентичны, но все же очень похожи (последующие кадры одной и той же сцены). Существует ли какой-либо алгоритм сжатия, который использует этот факт для эффективного сжатия этих изображений? 7zip (LZMA) бесполезен.
4 ответа
Вы можете попробовать Paq 8 (fp8_v2.zip). Я просто попробовал сам на 1440 похожих изображениях PNG, а затем снова на 111 похожих изображениях JPG. Вот результаты.
- 1440 файлов PNG, 28 631 615 байт => 2 058 653 байт сжатых
- 111 файлов JPG, 15 003 820 байт => 489 096 байт сжатых
Сжатие файлов PNG заняло около 8 минут и 550 МБ памяти при использовании:
fp8_v2.exe -7 images *.png
Сжатие файлов JPG заняло около 5 минут и 125 МБ памяти при использовании:
fp8_v2.exe -5 images image12*.jpg
Смотрите также: jpg тест сжатия изображений без потерь
Я предположил бы, что преобразование Барроуза-Уилера с арифметическим кодером было бы идеальным для этого, учитывая достаточно большое окно. Что произойдет, если вы настроите BZIP2 для использования размера блока, равного небольшому количеству фотографий? Это будет медленнее и займет больше памяти, но степень сжатия должна взлететь. А вы уже пробовали LZMA с блоками большего размера?
Вот простое решение, которое не работает для фотографий, но может работать, если у вас есть несколько изображений с большими попиксельными идентичными областями: сохраните изображения в распакованном формате, например BMP (не PNG или GIF), а затем TAR их и сожмите с приличным компрессором, как XZ, например, в Linux с чем-то вроде
tar -c myDirectory | xz -9 >myDirectory.tar.xz
Вместо TAR и XZ можно использовать 7-Zip с опцией «Solid Архив», чтобы получить примерно одинаковую производительность. Таким образом, я мог сжать 16 похожих снимков экрана, каждый из которых занимал около 900 КБ при сохранении в виде отдельных файлов PNG, в архив размером 2 МБ. Преимущество этого решения заключается в том, что оно использует общие форматы файлов, поэтому оно работает без установки нового программного обеспечения. (К сожалению, старые и даже более распространенные программы GZIP и BZIP2 не помогли мне, возможно, потому, что размер блока BZIP2 не может быть настроен так, чтобы он превышал 900 КБ.)
Не то чтобы я видел. Вероятно, самым близким было бы взять несколько похожих JPEG-файлов и поместить их в фильм MJPEG. Вы также можете использовать APNG или анимированные GIF-файлы для аналогичных целей.
Я не уверен, насколько хорошо это сработает, и похоже, что вы уже говорите о скриншотах фильмов, поэтому перепаковка их в файл фильма звучит ... контрпродуктивно.
Возможно, лучшим способом, если у вас все еще есть клипы, с которых пришли экраны, было бы просто найти инструмент командной строки, который может извлечь для вас точный кадр, скопировать этот уникальный идентификатор в текстовый файл где-нибудь, и тогда вы всегда сможете легко восстановить кадр, когда вам это нужно.