Утилита PreComp Что такое Precomp? Precomp - это прекомпрессор с интерфейсом командной строки. Вы можете использовать его для достижения лучшего сжатия некоторых типов файлов (работает с файлами, сжатыми методами ZLib или Deflate, и GIF-файлами). Precomp пытается произвести распаковку потоков этих файлов, и, если они декомпрессированые при последующей перекомпрессии идентичны бит-в-бит оригинальному потоку, то перекомпрессия не производится. В результате получается .pcf-файл (PCF = PreCompressedFile), который содержит больше декомпрессированных данных, чем оригинальный файл. Обратите внимание, что этот файл больше оригинального, но, если сжать его методом сжатия сильнее, чем Deflate, он сожмётся лучше, чем оригинал (или использовать lprepaq для прекомпрессии и сжатия за один шаг). Что такое Precomp Comfort? Precomp Comfort является разновидностью Precomp. Он поддерживает перетаскивание отдельных файлов и использование ini-файл для параметров. Он добавлен в скачиваемый zip-архив. Precomp.exe - оригинальная версия, Precomf.exe - Comfort-версия. Что такое lprepaq? lprepaq сочетает в себе lpaq6 Мэтта Махоуни и Precomp. Вначале он прекомпрессирует входной файл, затем сжимает, используя сильное сжатие методом PAQ. lprepaq - полноценный компрессор/декомпрессор, его вполне можно использовать для сжатия файлов. Что такое prepaq? prepaq v2 (он же paq8o8pre v2) от Яна Ондруса сочетает в себе paq8o8 Мэтта Махоуни и Precomp. Вначале он прекомпрессирует входной файл, затем сжимает, используя сильное сжатие методом PAQ. Так же, как и lprepaq, prepaq полноценный компрессор/декомпрессор, но он гораздо медленнее lprepaq'а и сжимает сильнее. Типы файлов Вот список типов файлов, лучшее сжатие которых может быть достигнуто с помощью Precomp, и как это можно проверить. Обратите внимание, что этот список не является полным, и что другие типы файлов также могут содержать Deflate или ZLib потоки, но вы должны использовать параметр медленного режима (-slow) для них. PDF В Adobe PDF-файлах часто используется метод zLib для сжатия их содержимого. Проверка: "FlateDecode" содержится в файле. JPG Precomp использует packJPG Маттиаса Штирнера для беспотерьного сжатия JPG-изображений. MJPEG MJPEG - это видеоформат, который содержит JPG-изображения без таблиц Хаффмана. Precomp вставляет их так, чтобы packJPG мог сжимать изображения. ZIP/JAR В большинстве ZIP-файлов используется для сжатия Deflate. JAR-файлы в основном являются ZIP-файлами с добавленным манифестом для работы с Java. PNG В PNG используется Deflate для сжатия фильтрованных данных изображения. GIF Формат GIF использует LZW для сжатия данных изображения. GZ В GZip файлах используется для сжатия Deflate. BZ2 bzip2 - это формат часто используемый в среде Linux. SWF В Macromedia's Shockwave Flash файлах может использоваться сжатие Zlib, начиная с версии 6. Проверка: Первые три байта файла - CWS (вместо FWS для несжатых файлов). MIME Base64 Это кодирование используется для присоединения бинарных файлов в электронной почте. SVGZ Эти файлы содержат SVG-файлы, сжатые GZip. ODT Файлы документов OpenOffice состоят из сжатых zip-алгоритмом XML-данных. SIS (только медленный режим) Эти файлы содержат информацию об инсталляции программного обеспечения на Symbian OS для мобильных телефонов. В них используется сжатие Zlib. 3DM (только медленный режим) Это формат файлов 3D-геометрии, использующийся в Rhino3D и содержащий ZLib-потоки. zeno (только медленный режим) Zeno - это формат файлов, использующийся немецкой Wikipedia DVD. Скачать. Precomp (и Precomp Comfort) v0.4: precomp.zip (392 KB) lprepaq v1.3 (включая исходники): lprepaq.zip (259 KB) Примечание: Возможно, вам будет нужен msvcr80.dll. Скачать можно здесь. prepaq v2 (он же paq8o8pre v2, включая исходники): paq8o8pre.zip (311 KB) Старые версии Precomp не имеет обратной совместимости. Если вы хотите рекомпрессировать PCF-файл, созданный другой версией Precomp, вы можете скачать её здесь: Precomp v0.3 Precomp v0.31 Precomp v0.32 Precomp v0.33 Precomp v0.34 Precomp v0.35 Precomp v0.36 Precomp v0.37 Precomp v0.38 Как использовать Самый простой способ (lprepaq): Чтобы сжать файл - "lprepaq 5 входной_файл выходной_файл" Чтобы распаковать файл - "lprepaq d входной_файл выходной_файл" Значение 5 использует 99 Мб памяти. Диапазон значений от 0 (6 Мб) до 9 (1539 Мб). В общем, вариант N использует 3 + 3*2N Мб. Легкий способ (Precomp Comfort): Перетащите файл на precomf.exe для предварительного сжатия в .pcf-файл с таким же названием. Чтобы получить обратно оригинальный файл, сделайте то же самое с .pcf-файлом. Использование командной строки: (Precomp) Для предварительного сжатия в .pcf-файл с таким же названием - "precomp входной_файл" Чтобы получить оригинальный файл - "precomp -r pcf_файл" (параметр -d делает то же самое). Коды ошибок Для пакетной работы будет полезным видеть коды ошибок, которые будет возвращать программа. Описание кодов ошибок: 0 Нет ошибок 1 Различные ошибки (в том числе ошибки доступа к файлу) 2 Невозможно декомпрессировать (PCF вывод будет тем же, за исключением заголовка PCF) 3 Диск переполнен 4 Временный файл не найден 5 Ошибка параметра: Пропущенная позиция слишком большая 6 Ошибка параметра: Размер одинаковых байт слишком большой 7 Ошибка параметра: Уровень рекурсии слишком большей 8 Ошибка параметра: Уровень рекурсии установлен более одного раза 9 Ошибка параметра: Минимальный размер одинаковых байт установлен более одного раза 10 Ошибка параметра: Не используйте пробел после -o 11 Ошибка параметра: Более одного выходного файла 12 Ошибка параметра: Более одного входного файла Дополнительные параметры: (Precomp / Precomp Comfort) -o [имя_файла]: Задает имя выходного файла. Для прекомпрессии - по умолчанию имя оригинального файла с расширением .pcf; для "декомпрессии" это имя оригинального файла. Если выходной файл уже существует, будет выведен вопрос, желаете ли вы перезаписать его. Тем не менее, вы можете указать другое имя выходного файла с этой опцией. -c и -m: (Compression_Levels, Memory_Levels) После прекомпрессии Precomp, указывает, как использовать эти параметры для ускорения прекомпрессии в следующий раз, если вы снова будете прекомпрессировать этот файл. Это настройки уровней сжатия и памяти, которые можно использовать для файла. Если вы используете эти параметры на другом файле, Precomp может пропустить некоторые сжатые части в нём. -t: (Comfort: Compression_Types) Включает и выключает обнаружение некоторых типов сжатия. Для использования в командной строке есть два варианта: t+ разрешает определенные типы сжатия и запрещает остальные, в то время как t- отключает определенные типы и разрешает остальные. Например, использование -t-j запрещает JPEG рекомпрессию и разрешает остальные типы сжатия; использование -t+pf разрешает только PDF и GIF рекомпрессию, запрещая всё остальное. -l: (Comfort: Maximal_Recursion_Level) Устанавливает максимальный уровень рекурсии. Несколько потоков могут содержать дополнительные потоки внутри себя, например, ZIP или MIME Base64 потоки. Данный параметр задает максимальную "глубину", где Precomp будет искать потоки. Установка этого параметра в 0 отключает рекурсии, по умолчанию - 10, что вполне достаточно для большинства типов файлов. -f: (Comfort: Fast_Mode) Быстрый режим для ускорения работы Precomp. При этом используется первый найденный метод сжатия для всех потоков, а не перебираются все из 81 комбинаций для точного определения. Это будет прекрасно работать с файлами, в которых используются лишь несколько методов сжатия, но приведёт к ухудшению компрессии файлов, в которых используется множество различных методов сжатия. Хорошо подходят PDF и ZIP/JAR/GZ файлы. Плохо подходят архивы, вмещающие много файлов. Не в быстром режиме появляется сообщение, когда используется только один уровень комбинаций. Это значит, что в быстром режиме файл будет обрабатываться точно так-же, но быстрее. -slow: (Comfort: Slow_Mode) Медленный режим значительно замедляет работу Precomp. Идёт поиск необработанных заголовков zLib и распознавание многих форматов файлов, таких как SIS и SWF, или специальных форматов, используемых только одной программой. Однако, заголовок zLib содержит только 2 байта, и может возникнуть ситуация, когда обнаружится несколько "ложных" потоков, определяемых, как zLib-потоки, что приводит к замедлению работы. Медленный режим можно комбинировать с быстром режимом, но может случиться, что ложное распознавание первого потока сделает невозможным правильное распознавание потоков следующих, поэтому комбинируйте режимы с осторожностью. Используйте этот режим, если у вас есть файлы, в которых сжатие Zlib используется, но не поддерживается (SIS, SWF, игровые ISO-образы...). -brute: (Comfort: Brute_Mode) Режим перебора очень сильно замедляет Precomp. В нем предполагается, что zLib потоки без заголовков могут быть где угодно. Это позволяет распознавать даже экзотические форматы, которые не содержат zLib заголовков, но занимает очень много времени (более минуты для файла размером около 10 Кб). Если у вас имеются данные, которые должны быть обработаны с этим режимом, лучше попробовать добавить zLib заголовки самостоятельно. Режим перебора может комбинироваться с быстрым, но отключается медленным режимом. -pdfbmp[+-]: (Comfort: PDF_BMP_Mode) Предназначено для PDF изображений с заголовками BMP для улучшения сжатия и скорости, особенно для PAQ. -progonly[+-]: (Comfort: JPG_progressive_only) Рекомпрессия только прогрессивных JPG. Опять же, это особенно полезно для PAQ, где используется лучшее JPG сжатие, чем packJPG, но нет поддержки прогрессивного JPG. -mjpeg[+-]: (Comfort: MJPEG_recompression) Разрешает рекомпрессию MJPEG вставкой таблиц Хаффмана в JPG данные. -v: (Comfort: Verbose) Подробный (для отладки) режим, для получения дополнительной информации об обнаруженных потоках и удачной/неудачной рекомпрессии. Если вы хотите создать файл с этой информацией, перенаправьте вывод на него, например: "precomp -v имя_входного_файла > verbose.txt". -i: (Comfort: Ignore_Positions) В подробном режиме вы можете видеть положение потоков в файле. С помощью этого параметра можно игнорировать определенные потоки. -s: (Comfort: Minimal_Size) С помощью этого параметра можно выбрать минимальный размер потока, который будет обработан. По умолчанию используется 4 байта. Настройка его на более высокие значения (около 50-200 байт) иногда улучшает пережатие, особенно в медленном режиме, или режиме перебора. Результаты Некоторые примеры для демонстрации возможностей Precomp можно найти на странице результатов. Будущая работа Поддержка множества файлов и директорий Поддержка PDF: Ascii85Decode Графический интерфейс для Precomp FAQ Я пытался сжать прекомпрессированый Precomp'ом файл, а он не стал меньше. Этому могут быть две причины: Precomp не может найти никаких сжатых потоков в файле, или они слишком малы, чтобы была какая-то разница. Другая причина заключается в том, что компрессор, который вы используете после прекомпрессии хуже (т.е. хуже сжимает), чем Deflate (или компрессор вообще не использовался). Является ли доступным исходный код Precomp? Пока нет, так как в данный момент в нем слишком много "мусора", но в будущем возможно. Известны ли какие ошибки? Есть несколько ошибок, которые приводят к сбоям в некоторых повреждённых файлах, но они возникают довольно редко. Тем не менее, разработка Precomp ещё не закончена, поэтому если вы нашли ошибку, пришлите мне информацию о ней. Я нашел ошибку. Как сообщить о ней? Отправить письмо на "schnaader@gmx.de", желательно указать "[Precomp]" в теме письма (вы также можете использовать эту ссылку) с описанием ошибки, и если хотите - файл (если он 10 MБ), который вы хотели прекомпрессировать/восстановить. Какая разница между использованием Precomp и Multivalent для PDF файлов? Основное различие в том, что PDF файлы, сжатые с Multivalent не могут быть восстановлены с точностью до бита, поскольку Multivalent является методом сжатия с потерями (хотя и не теряет содержимого PDF). Так что если вы хотите просто сжать файлы PDF и иметь к ним быстрый доступ в дальнейшем, используйте Multivalent. Если же вы хотите сделать их меньше, чем делает Multivalent (даже в компактном режиме), или хотите быть уверенным, что файл бит-в-бит совпадает с оригинальным PDF - используйте Precomp. Вы также можете использовать Precomp на PDF файлах, сжатых Multivalent. Прекомпрессия для PNG, GIF и ZIP файлов получается плохо, хотя подробный режим указывает, что они могут быть распакованы полностью. Распаковка этих файлов чётко определена, но есть много способов для их рекомпрессии. В частности, zLib могут быть настроены с deflateTune(), который не поддерживается Precomp, поскольку имеется слишком много вариантов для попыток. Я работаю над этим, но в данный момент не могу сказать, что у меня всё получится. Для лёгкой распаковки планируется параметр для сжатия с потерями в будущих версиях. Файлы не будут восстанавливаться с точностью до бита, но содержимое файла останется неизменным. Для связи Используйте эту ссылку для отправки комментариев, критики, сообщений об ошибках и т.д. Авторы Спасибо за поддержку, помощь и комментарии: Стефан Буш (Автор диаграммы сжатия) Вернер Бергманс (Автор теста уровня максимального сжатия) Маттиас Штирнер (PackJPG) Радек Лиска (Автор теста сжатия Black Fox) Марк Адлер (zLib) Мэтт Махоуни (PAQ) Малколм Тэйлор (WinRK) Саймон Бергер (помог исправить много ошибок) Всему форуму ENCODE.RU ------------------------------------------------------------------------------- http://translated.by/you/precomp-utility/into-ru/trans/ Original (English): PreComp utility (http://schnaader.info/precomp.html) Translation: © Atreides. translated.by crowd