[FAQ] GZIP-сжатие модулей с помощью консоли 7z.exe
Вложений: 2
Сжатие в GZIP с помощью консольных 7-ZIP Как известно, файлы кастомных прошивок, программ, игр и т.п. пожаты в архивы GZIP. Поэтому часто приходится упаковывать таким образом файлы, чтобы они занимали меньше места, а самое важное то, что после кастомизации часто бывает необходимость вернуть файл на строго определённое место, ограниченное размером, когда нельзя делать сдвиг последующего кода. Как мы знаем, сжимать в GZIP прекрасно умеет архиватор 7-ZIP. Но его GUI интерфейс имеет скромный потенциал и не позволяет гибко манипулировать сжатием. Зато набор консольных команд того же самого модуля архиватора 7z.exe имеет более расширенный функционал, где мы можем по своему желанию сжать файл до нужного нам размера, выбирая нужные нам параметры сжатия. Какие параметры командной строки нам даёт архиватор 7-ZIP Итак, для выполнения сжатия, из списка команд видно, что нам потребуется <Commands>
Сразу приведу пример демонстрации сжатия в архив GZIP с максимально возможным набором команд: 7z a -tgzip arhive.gz file.prx -mx=5 -mfb=4 -mpass=2 Разложим команды сжатия по запчастям... Теперь более подробнее о параметрах: GZip использует те же самые параметры как Zip, но GZip сжимает только с методом Deflate. Таким образом GZip поддерживает только следующие параметры: x, fb, pass. Разберём из 1-го столбика таблицы эти параметры поподробнее:
P.S. Есть ещё чисто консольная версия 7za.exe (разница видимо только в том, что в ней нету GUI-интерфейса) Ну и есть другие консольные утилиты именно для gzip. Вложение 10956 |
Меня интересует именно 7zip и его консольная часть, т.к. именно им я смог сжать данные так, чтобы игра запустилась на псп. Плясал с другими архиваторами - не вышло ничего путнего.
х=9 - Это будет минимальное сжатие? что-то про "x" и "fb" архиватор у меня ругается :/ Код:
7z a -tgzip 1.gim.gz 1.gim |
Цитата:
Насчёт fb не помню, вроде нужео ещё и букву указывать b|k|m (в байтах | килобайтах | мегабайтах) А почему бы тебе просто не пользоваться контекстным меню гуи? Нажимаешь просто правой кнопкой по файлу, выбираешь 7-Zip => Добавить к архиву... В открывшемся Гуи выставляешь gzip, потом выставляешь грубо "Уровень сжатия" и потом более тонко "Размер слова". Скрины Ещё размер архива наиболее тонко регулируется названием архивированного файла. Каждая буква в названии прибавляет 1 байт к архиву. Название архива не имеет значения, т.к. это просто заголовок и он при распаковке отбрасывается. Я, когда запаковывал архивы в PRX, с точностью до байтика регулировал архивы, там название делал чуть-ли не из 100 букв английского и русского алфавита ))) И смысла нет сжимать совсем без сжатия, PSP легко и быстро распаковывает максимальное сжатие. По крайней мере "Нормальное" сжатие (уровень 5-6) будет самое оно, даже меньше необходимого. И это, никогда не было такого, чтобы архив получался нерабочим. Нужно просто правильно вставлять и править размеры в 3-ёх местах. |
Ну всё делается для того, чтобы интегрировать консольную часть 7z в другую софтину, которая написана для того, чтобы распаковывать/упаковывать данные из контейнера, используемого в игре. Я тебя как-то просил глянуть Hysteria Project, так вот по твоему описанию формата написать софтину для распаковки не составило труда, а вот с упаковкой возникли сложности. Я именно 7z вручную и упаковывал файлы после изменения, а потом снова собирал контейнер нашей софтиной.
Почему именно консоль? Мы просто вложим 7z.exe и прога сама будет после этого правильно паковать файлы перед сборкой контейнера. Представь, если все манипуляции для сотни файлов проделывать руками? А так - всё автоматизировано. После релиза перевода можно и выложить будет для людей. Вроде всё получилось. |
Цитата:
Я предполагал сделать такую универсальную утилитку...
Цитата:
|
Тебе то я и так могу кинуть, как будет дописана. Но она заточена под конкретную игру и конкретный алгоритм, не знаю, подойдёт ли тебе.
А так, можно попробовать написать именно такую, как ты хочешь, только подробно расписанное задание нужно и пример файлов, над которыми ставит эксперименты. |
Цитата:
Вот такое скромное задание:
|
Примеры, Эрик, примеры ))
Эксперименты надо же на чём-то ставить... |
Цитата:
Собственно что примеры, они кругом, в PRX-ах, в бинарниках засунуты в недра по нескольку штук и принцип везьде одинаковый, тупо вложен архив и приходится вручную искать на магический хедер 1F8B, часто просто попадаешь на ложное совпадение программного кода, ну там сразу видно, чаще всего идёт 1F8B0808, но не факт. Для примера даю один из них, в нём более 500 GZIP архивов ))) SEPack.dat |
Под лунар у меня есть распаковщик. А вообще если ты можешь просчитать смещения сам, то есть у меня софтинка называется DeArxiver она извлечет по твоим смещением файлы, а потом запросто соберет. Но файлы для сбора должны быть одинакового размера с файлами оригиналами байт в байт. Иначе он будет наслаивать. Если файлы будут разные тебе прийдется пересчитывать смещения.
|
Если новый файл меньше старого, то это вообще не проблема. Тупо добиваешь в хексе 0x00 или 0xFF до нужного размера. Для этого даже софтинка есть "Magic File Resizer"
Эрик, твой заказ попробуем реализовать, только у нас не я главный кодер, так что с праздниками может слегка затянуться. Кроме того, меня тут осенило, что неплохо бы чтоб софтина ещё лог создавала, что с какого смещения вынуто. |
Цитата:
|
Yoti, я тестил твой тул, но проблема была в том, что для gzip приходилось выставлять принудительно размер архива. А здесь предложение более конкретного рода.
|
ErikPshat,
а у меня всё работало, помнится. |
Цитата:
Инструкцию в шапке обновил! Раньше через GUI всё мучался с размером сжатия, хотя это делается более тонко через консоль ))) |
Теперь я до кодера нашего не особо могу достучаться, он чем-то по работе занят. Мне никак софтину не допишет, не говоря уже о чём-то новом :(
Я для себя ьакой вот батник накатал: Код:
@echo off |
lupus,
а почему не del /q? |
/q - это без запроса? Батник и так работает :)
|
lupus,
ну да, типа принудительное удаление. У меня просто все серьёзные (читай как "не make.bat") файлы написаны с использованием ключей. |
Цитата:
Ну так мог бы взять полное управление под себя: Цитата:
А так у тебя всё идёт по-умолчанию: -mx=5 -mfb=32 -mpass=1 |
Текущее время: 12:37. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.