Версия для печати темы

Нажмите сюда для просмотра этой темы в оригинальном формате

CTPAX-X _ Программы _ Strippers

Автор: -=CHE@TER=- Jun 2 2007, 19:33

Предлагаю в данной теме рассказывать о программах, которые помогут уменьшить размер тех или иных файлов.
1) Архиваторы не предлагать.
2) Все программы Freeware.
3) Все преобразования должны быть lossless (т.е. без потери качества, когда сами данные не трогаются оставаясь как есть).


---

Первый буду:

Значится сравнивались следующие программы для удаления всего лишнего с .JPG файлов - UJPG (by dwing) (1) по сравнению с JPG/PNG Stripper (by SteelBytes) (2):
+ снимает ещё и 'JFIF'-блок, что слегка уменьшает размер
+ может снимать thumb'наилы и прочий хлам ещё и с фотографий от сотового телефона, чего (2) делать почему-то не умеет
+ гораздо меньше занимает
+ не гадит в реестре и на диске в отличие от (2), который помимо реестра гадит ещё, оказывается, и в %USERPROFILE%\Application Data\SteelBytes\
- не умеет рекурсивно обходить каталог и все подкаталоги, разыскивая там JPEG файлы и обрабатывая их
- не ведёт статистику сколько байт удалось съэкономить - (2), например, делает это очень подробно: сколько всего снято и в среднем (ещё выводит для каждого файла, сколько с него удалось снять и снято ли вообще, а (1) даже на уже почищенный файл, всё-равно выдаёт "OK!" даже ничего с него не сняв)
- не сохраняет дату модификации у файла после его изменения
- ну, (2) ещё умеет и с .PNG файлов снимать информацию лишнюю, но т.к. тут речь идёт только о .JPG, то это, на мой взгляд, не такой уж и большой минус

В общем, после написания этого обзора, стало понятно, что нужно писать свой JPEGStrip не страдающий этими косяками, что и было проделано:

http://www.ctpax-x.org/index.php?goto=cxsoft&show=35


Что делает: снимает с .JPG (.JPEG, .JPE) файлов комментарии и информацию добавляемую туда всякими программами (PhotoShop, ACDSee (по-моему с версии 4.0) и т.д; между прочим замечу, что XNView ничего никогда в изображения "левого" не пихает). Небольшие файлы, после обработки этой программой, могут похудеть в два и более (!) раза. Это очень хорошо, если выкладываете какие-нибудь скриншоты в Интернет - трафика меньше жрётся.
Очень удобная программа - при обработке многих файлов, выводит напротив каждого (если он был обработан) сколько байт с него снято и суммарную информацию по всем файлам - сколько было обработано, сколько всего удалось съэкономить.

Программа работает в консольном режиме - это когда вы набираете где-нибудь в FAR'е:
jpgstrip *.jpg
или
jpgstrip image1.jpg
или
jpgstrip *.* /s
(Ахтунг! Последний пример снимает со всех .JPE/.JPEG./JPG файлов информацию в текущем каталоге и ВО ВСЕХ подкаталогах текущего!)

Для удобной работы с программой рекомендуется поместить её куда-нибудь в C:\WINDOWS\, чтобы была доступна через %PATH%.

ВАЖНО:
Если вы снимаете информацию с фотографий сделанной вашей цифровой камерой, то вы ПОТЕРЯЕТЕ ВСЕ ДАННЫЕ О МОДЕЛИ КАМЕРЫ, ДАТЕ И ВРЕМЕНИ, А ТАКЖЕ ВСЕХ НАСТРОЙКАХ ПРИ КОТОРЫХ БЫЛА СДЕЛАНА ФОТОГРАФИЯ - ОСТАНЕТСЯ ТОЛЬКО САМО ИЗОБРАЖЕНИЕ (превью тоже выкидывается)!



Немного насчёт JPGStrip. Берём .JPG файл-фотографию и натравливаем на него эту программу.
У меня получилось так: до - 648363 байта, после - 629012 байта. Т.е. в нашем случае разница (размер файла, а не на диске): 648363-629012=19351 байт или 18 Кб.
А теперь представим, что у нас файл сам занимает 10 Кб от силы. Допустим 50x50 обложка, скажем, диска какого-нибудь на сайте. Я не говорил, что эта программа для всех файлов (любых размеров) делает в два и более раза меньше, я сказал, что только для небольших заметна разница или, добавлю, для тех, у которых много чего в заголовок понаписано. Для других файлов будет выигрышь при их количестве. Т.е. допустим у нас, в среднем, пусть не 18 Кб, а, скажем, 15 Кб с файла удаляется. Теперь представим, что у нас в Интернете сайт, с собственной галлереей, где мы разместили превьюшки. Нехитрым подсчётом вычисляем:
1024 Кб (мегабайт) / 15 Кб = 62.2(6) - округляем до 62.
Таким образом получаем, что на каждые, примерно, полсотни картинок (неважно какого размера, хоть 2 на 2 писеля), мы экономим метр трафика. Это при том - что 15 Кб, как видно - не предел (в нашем случае - если это фотография, то всегда будет одинаковый размер информации - 18Кб).
Чудес не бывает. (*улыбается*) И .JPG файл не сжать в килобайт не потеряв при этом качество. Может показаться немного маразматично так страдать из-за какого-то метра, но гора песка состоит из ма-а-аленьких песчинок. В конце концов всё просто: не хотите - не пользуйтесь. (*улыбается*)

Раз уж начал писать офф-топ, то хочется сказать, что во многих играх и программах, любят всякие разности пихать в файлы, и получается, что тут немного + тут немного + тут немного = ого-го! Я считаю, что в программе, а уж тем более мультимедиа файлах не должно быть ничего лишнего.

Автор: -=CHE@TER=- Jun 3 2007, 17:20

"Продолжаем разговор" (с) Карлсон

http://mdf2iso.berlios.de/

Вот небольшая программа, которая переводит .MDF файлы-образы CD в обычный .ISO. Можете съэкономить на этом около полсотни мегабайт. У меня 565 метровый .MDF диск похудел до 514 метров.
Программа настоятельно рекомендуется к использованию тем, кто не умеет делать .ISO образы и шляпает их в .MDF для игр, где нет никакой сверхсложной защиты CD, хоть как-то бы оправдывающей столь нерациональное использование свободного пространства.
Также программа пригодится тем, кто получил "по наследству" (грубо говоря такой дали/скачал) образ диска в .MDF, где защита обходится в полпинка и никакой .MDF не нужен.


Туда же:
http://gregory.kokanosky.free.fr/v4/linux/nrg2iso.en.html

Правда у этой утилиты есть одно большое "но": если с её помощью пытаются перевести мультисессионный .NRG в .ISO, то переводится только первая дорожка (у меня почему-то так работала).


Внимание: .NRG (не знаю, как там с .MDF) может содержать аудиодорожки. В стандарте .ISO, по-моему, поддержка аудиодорожек не предусмотрена.


P.S. Кому-нибудь эта тема вообще интересна - или это только у меня паранойя, с тех времён, когда жёсткие диски были 20 Мб величиной?..

Автор: jTommy Jun 3 2007, 18:28

QUOTE
Раз уж начал писать офф-топ, то хочется сказать, что во многих играх и программах, любят всякие разности пихать в файлы, и получается, что тут немного + тут немного + тут немного = ого-го! Я считаю, что в программе, а уж тем более мультимедиа файлах не должно быть ничего лишнего.
а может разрабы игр специально всякого не нужного туда записывают, надо же чем-то заполнять 4.7Гб. smile.gif

QUOTE(-=CHE@TER=- @ Jun 3 2007, 09:20 PM) *
http://mdf2iso.berlios.de/
Сам часто "конвертирую" mdf -> iso когда есть кряк. Только пользуюсь Nero'ой. Плюс, просто люблю, когда образ в одном файле, а не в двух и более (привет BlindWrite'у).

QUOTE(-=CHE@TER=- @ Jun 3 2007, 09:20 PM) *
Внимание: .NRG (не знаю, как там с .MDF) может содержать аудиодорожки. В стандарте .ISO, по-моему, поддержка аудиодорожек не предусмотрена.
Точно, NRG и MDF поддерживают Audio-CD, а ISO не поддерживает.

QUOTE(-=CHE@TER=- @ Jun 3 2007, 09:20 PM) *
P.S. Кому-нибудь эта тема вообще интересна - или это только у меня паранойя, с тех времён, когда жёсткие диски были 20 Мб величиной?..
Ну как тебе сказать... Я не страдаю этим, потому что на борту 250Гб + 320Гб, везде NTFS с включенным сжатием.
Хотя, все равно не хватает, потому что периодически качаю HDTV фильмы и Lossless музыку. И такая экономия мне не поможет.

В JPEG предпочитаю не лезть - Exif информация бывает полезна.
MDF, как я уже сказал, обычно в ISO "конвертирую".
NRG не пользую из принципа, если встречается что-то что ISO не поддерживает - пользую CUE/BIN связку.

Вот такие вот дела. smile.gif

Автор: Siberian GRemlin Jun 4 2007, 11:06

QUOTE(jTommy @ Jun 4 2007, 02:28 AM) *
MDF, как я уже сказал, обычно в ISO "конвертирую".
NRG не пользую из принципа, если встречается что-то что ISO не поддерживает - пользую CUE/BIN связку.

+1. Только я использую UltraISO для конвертирования и создания образов дисков старых игр.

Автор: -=CHE@TER=- Jun 5 2007, 17:31

QUOTE(jTommy @ Jun 3 2007, 06:28 PM) *
а может разрабы игр специально всякого не нужного туда записывают, надо же чем-то заполнять 4.7Гб. smile.gif
О да. Особенно я торчу, когда в игре 20% ресурсов есть (звуки/текстуры) которые нигде никогда не используются и их просто поленились перед релизом вычистить.


QUOTE(jTommy @ Jun 3 2007, 06:28 PM) *
В JPEG предпочитаю не лезть - Exif информация бывает полезна.
Не спорю - если это фотография с цифровика. А, скажи, оно тебе нужно, для какой-нибудь обоины из Интернета знать, что она создана в Adobe Photoshop version 5.0 Aug 11, 2004 13:14:15 и тому подобное бла-бла? (*улыбается*) Мне - нет.




Ну и на закуску (ещё хотел большую статью про .PNG написать, но не знаю как со временем будет):

http://mpesch3.de1.cc/mp3dc.html

Эта программа позволяет редактировать MP3 файлы БЕЗ ПЕРЕЖАТИЯ. Работа идёт пофреймово. Можно вырезать пустоту в начале или конце файла или вообще - сохранить отдельно какой-либо кусок. Ещё раз повторю - работа с файлами идёт БЕЗ ПЕРЕЖАТИЯ - только по уже сформированный фреймам, т.е. качество остаётся неизменным.
Из возможностей программы: поиск пустот (указывается уровень), нормализация звука (тоже указывается уровень). В общем - смотрите сами. Мне понравилась.

Имеется русский язык для интерфейса (коим я не пользуюсь в ввиду привычки (*улыбается*)) + не прописывается в реестре - так что чтобы uninstall'ировать, достаточно просто удалить папку и ярлык на рабочем столе.


И, туда же, http://sylvana.net/jpegcrop/ небольшие удобные тулзы для lossless работы с JPEG файлами.

Автор: -=CHE@TER=- Sep 26 2007, 16:58

Для начала о смешном (взято http://delphi.newswhat.com/geoxml/forumhistorythread?groupname=borland.public.delphi.nativeapi.win32&messageid=42ff84fb$1@newsgroups.borland.com):

QUOTE
Re: Unwanted resources in EXE and DLL
Jean [Aug 17 2005, 07:36]

>
> What is your problem with this? The size increase is negligible.
>

The problem is that almost every user in Russia tries to break-up every
program. The units in these resources may reveal my own secrets.
Рыдал над этим Jean'ом. Он думает, что убрав PACKAGEINFO и DVCLAL он сможет избежать того, чтобы его программу взломали. "Какие мы наивные!" ©

С другой стороны, если мы пишем на чистом WinAPI, то мусор который в .EXE с завидным постоянством пихает компилятор Borland просто дико раздражает.

Так что давайте немножко "похудеем" нашу программу.

Предлагаю скачать и кинуть куда-нибудь программу http://www.angusj.com/resourcehacker/ (Freeware, если что) и сделать вот такой файл dreshack.bat:
CODE
@echo off
if _%1 == _ goto help
upx.exe -d "%1"
if not _%2 == _1 goto keepdvl
C:\ResourceHacker\ResHacker.exe -delete "%1", "%1", RCData,DVCLAL,
:keepdvl
if not _%3 == _1 goto keepstr
C:\ResourceHacker\ResHacker.exe -delete "%1", "%1", StringTable,,
:keepstr
C:\ResourceHacker\ResHacker.exe -delete "%1", "%1", RCData,PACKAGEINFO,
C:\ResourceHacker\ResHacker.exe -delete "%1", "%1", Cursor,,
C:\ResourceHacker\ResHacker.exe -delete "%1", "%1", Bitmap,,
C:\ResourceHacker\ResHacker.exe -delete "%1", "%1", Dialog,,
C:\ResourceHacker\ResHacker.exe -delete "%1", "%1", CursorGroup,,
upx.exe -9 --exact "%1"
goto quit
:help
Echo Usage: %0 filename.exe [keepdvl] [keepstr]
:quit

После чего натравливать его на все необходимые программы:
dreshack program.exe --- снять всё нафиг (если пишем на чистом WinAPI)
dreshack program.exe 1 --- не трогать DVCLAL (если используем DBE)
dreshack program.exe 0 1 --- не трогать StringTable (если используем Dialogs или ещё что)
dreshack program.exe 1 1 --- не трогать DVCLAL и StringTable


DVCLAL необходим для работы BDE и некоторых других компонент Delphi! Иначе они откажутся работать (там просто тупая проверка, но чтобы заставить такой .EXE работать придётся либо подламывать его, либо пересобирать те компоненты Delphi, которые проверяют DVCLAL). Подробнее об этом ОБЯЗАТЕЛЬНО http://assarbad.net/stuff/!export/dvclal/jeremyres.html!

Если удалить StringTable, и при этом пользоваться, например, юнитом Dialogs, то можно получить вместо "OK", "Cancel", "Yes", "No" и прочих, просто кнопки без текста - смотрится более чем дико. (*улыбается*) Если Dialogs и другие, подобные, юниты не используются - StringTable можно смело херить.

ОБРАЩАЮ ВАШЕ ВНИМАНИЕ НА ТО, ЧТО СТРОЧКИ:
CODE
C:\ResourceHacker\ResHacker.exe -delete "%1", "%1", Cursor,,
C:\ResourceHacker\ResHacker.exe -delete "%1", "%1", Bitmap,,
C:\ResourceHacker\ResHacker.exe -delete "%1", "%1", Dialog,,
C:\ResourceHacker\ResHacker.exe -delete "%1", "%1", CursorGroup,,
ЦЕЛИКОМ ХЕРЯТ ВСЕ РЕСУРЫ! Т.е. если вы используете курсоры, картинки или ещё что-нибудь, то херьте только то, что суёт туда Borland (можно посмотреть номера ресурсов в том же ResHacker'е)! Иначе схерются также и ваши ресурсы!

Автор: Grom PE Oct 10 2007, 21:49

Несколько полезных программ, работающих с командной строкой:

http://advsys.net/ken/utils.htm#pngout — лучший оптимизатор PNG. http://advsys.net/ken/util/pngout.htm.

И совсем для маньяков оптимизации:
http://www.walbeehm.com/download/ — программа, позволяющая уменьшить размер PNG, ZIP и GZIP (.gz, .tgz) на 1-500 байт.
Применять ее стоит на последнем этапе, когда другими способами файл уменьшить уже нельзя.

Автор: Axsis Nov 12 2007, 10:22

наткнулся вот на програмку для уменьшения mp3 без перекодировки, и соответственно без потерь - исключительно за счёт махинаций с mpeg фреймами. также позволяет конвертировать CBR<->VBR опять же без потерь качества - судя по всему за счёт изменения заголовка файла и расширения низкобитрейтных VBR фреймов до полноразмерных CBR

инфа от автора

QUOTE

What it does:
Attempts to save space by storing frame data in the smallest possible frame. Usually MP3s are already stored in the most efficient way possible. However, for high-bitrate CBR files (like --preset insane) there can be a lot of wasted space

Features:
* Can make --preset insane files up to 10% smaller LOSSLESSLY (depending on the LAME version used)
* Squeezes out all the padding it can from any MP3 (Will not produce a larger file, unless you use the -b switch or something goes wrong)
* Writes valid LAME/XING header for proper VBR seeking
* Many people also use this backwards, to losslessly turn VBR into larger CBR files to humor players which can't handle VBR
* Includes a brute-force compression optimization option as of 1.10 to further compress files
* Finally works on directories again!
* Works on Windows, Linux, 64-bit Linux, Linux through WINE, and should work perfectly on any other platform with an OCaml port
* GPL, so anybody can tweak it as long as it stays GPL

A few caveats:
* The program will always output an MP3 that doesn't use CRCs, even if the input file uses CRC. This is primarily laziness on my part, but nobody really needs them, and it saves 600 bits per second... (it's a feature, not a bug!)

прога консльная, официальная ветка форума о ней вроде бы http://www.hydrogenaudio.org/forums/index.php?showtopic=32379, присутствуют исходники
в http://www.hydrogenaudio.org/forums/index.php?showtopic=40780 для неё есть GUI-шный фронтенд, так на всякий случай smile.gif

лично прогу не тестил пока, судя по отзывам она уменьшает файл в среднем на несколько сотен-тысяч байт (хотя по заверению автора до 10%). всё равно думаю наших "маньяков уменьшения всего и вся" она заинтересует laugh.gif
а если серьёзно, то для разбора ealayer3, думаю, будет нелишним знать внутреннее устройство mp3 файлов, и исходники данной проги могут быть полезны cool.gif

Автор: -=CHE@TER=- Nov 12 2007, 12:11

Axsis!
О, спасибо большое!
Обязательно попробую.
Кстати, вот ссылка на официальный сайт: http://omion.dyndns.org/.

P.S. Надпись снизу:
"There have been 13256278887989457685606511039607113920 visitors since February 11, 2007"
просто поразила до невозможности. (*улыбается*)

Автор: useretail May 23 2010, 21:12

мож немножко оффтоп, но опять мои 5 коп. smile.gif
ISO действительно не поддерживает мультитрековость и CDDA само собой.. я лично предпочитаю BIN/CUE.. если стоит проблема в MDF, то монтирую через алкоголь и снимаю образ с виртуала.. так как тот-же UltraISO при конвертации дописывает свою инфу типа "Created by UltraISO бла-бла-бла".. а вот образы UltraISO (вроде-бы) снимает уже один к одному smile.gif

Автор: Siberian GRemlin May 28 2010, 16:54

ISO прекрасно хранит внутри себя несколько дорожек, только чтобы получить доступ к остальным кроме первой к ISO необходимо иметь CUE.

Автор: -=CHE@TER=- Mar 25 2011, 07:00

Иногда после использования JPEGCrop (см. выше) результирующий файл несмотря на lossless преобразование почему-то занимает больше, чем оригинал. Товарищ Grom PE подсказал, что надо делать вот такое:
http://sylvana.net/jpegcrop/jpegtran/ -copy none -optimize -progressive input.jpg output.jpg
И действительно, файл резко худеет без потери качества.

Автор: Siberian GRemlin Mar 25 2011, 09:44

Для преобразования образов в ISO советую использовать бесплатную программу http://www.isobuster.com. Она не работает с образами как с файлам и не приписывает свои реквизиты, она их (образы) только снимает, поэтому образ с лишней сотней метров корректирующих данных вставляем в виртуальный привод и снимаем образ в нужном режиме. Также с её помощью удобно снимать образ дорожками в связке ISO+WAV+CUE, что также избавляет от мусорных корректирующих данных (CUE+BIN без них никак), а также позволяет сжимать звуковые дорожки без потерь для хранения и с помощью редактирования CUE помогает избавиться от избыточного дублирования повторяющихся дорожек (игра на нескольких дисках и везде одна и та же музыка, или несколько версий одной игры). А ещё в таком виде звуковые дорожки можно слушать в WinAmp напрямую без самого образ.

P.S.: существуют ли уже готовые программные решения для срезания мусорных блоков у RIFF (WAV\AVI) и других мультимедийных контейнеров? Без пережатия потоков, естественно.

Автор: -=CHE@TER=- Mar 25 2011, 09:53

QUOTE(Siberian GRemlin @ Mar 25 2011, 09:44) *
P.S.: существуют ли уже готовые программные решения для срезания мусорных блоков у RIFF (WAV\AVI) и других мультимедийных контейнеров? Без пережатия потоков, естественно.

Я не знаю. Сам в своё время что-то такое написать хотел, да потом забил.
Если что - можешь http://www.ctpax-x.org/?goto=files&show=70 программу переделать - я там как раз с .AVI работал. С .WAV всё проще, главное не забывать что в нём может сжатый звук быть, так что "fact" трогать нельзя в таком случае (у несжатого звука - можно).

Автор: -=CHE@TER=- May 25 2013, 16:31

Искал чем можно заоптимизить .OGG - нашёл аж целую кучу утилит (там и для .OGG была): http://nikkhokkho.sourceforge.net/static.php?page=FileOptimizer
Чтобы не искать на странице ссылку на закачку: http://sourceforge.net/projects/nikkhokkho/files/FileOptimizer/

Автор: Siberian GRemlin Feb 20 2014, 04:12

jpegtran портит изображение при повороте на 270 градусов: полоса верхней части изображение отражается зеркально и рисуется в самом низу, смещая большую часть вверх. Проверил на нескольких изображениях.

Автор: -=CHE@TER=- Feb 20 2014, 23:47

Вынужден тебя огорчить - я не нашёл ни одной программы у себя (jpegtran, XnView, ACDSee и т.д.), которая поворачивала бы нормально. Проблема возникает только на изображениях, где количество пикселей не умещается ровно в блоки на которые разбит весь файл (если ты, конечно, в курсе как jpeg кодируется). К примеру, у тебя изображение разбито на блоки по 4x4 пикселей, а твоя картинка 399x400 пикселей - три крайних правых столбца пикселей т.н. "non-transformable edge blocks" ("нетрансформируемые краевые блоки").
Ты можешь увидеть эти блоки, если откроешь в http://sylvana.net/jpegcrop/ свои файлы, затем выберешь View -> Block Grid.
Так что все существующие программы либо криво их поворачивают, либо отрезают при повороте.
В jpegtran для этого есть ключик "-trim" (см. справку), который как раз такие блоки отбрасывает:

jpegtran.exe -trim -rotate 270 input.jpg output.jpg

Изображение, в нашем примере, уменьшится до 396x400 (чтобы там только целые блоки были), но повернётся без проблем.

Автор: Siberian GRemlin Feb 21 2014, 02:24

А как тогда объяснить тот факт, что на 90 градусов она переворачивает без ошибок? Причём я пробовал сначала на 90, потом на 180 повернуть — порча всё равно происходит. Мне кажется, тут всё же какой-то просчёт.

«Photoshop» переворачивает нормально, но там думаю, растр несжатый. Но это ещё не всё: программа «ALSee» переворачивает тоже нормально! Но есть подозрения, что она тоже пережимает изображение: размер файла уменьшается значительнее чем в любой другой программе, хотя стоит 100% качества и изображение никак не меняется, во всяком случае, я пристально рассматривал и сравнивал — разницы не увидел. Затем перегнал в BMP картинки сохранённые разными программами и вот там уже была разница в байтах.

Автор: -=CHE@TER=- Feb 21 2014, 11:34

QUOTE(Siberian GRemlin @ Feb 21 2014, 02:24) *
А как тогда объяснить тот факт, что на 90 градусов она переворачивает без ошибок? Причём я пробовал сначала на 90, потом на 180 повернуть — порча всё равно происходит. Мне кажется, тут всё же какой-то просчёт.
Ну, если тебе кажется, то креститься надо исходные коды jpegtran, а также документацию по форамту JPEG в руки и вперёд - исправлять просчёт. (*улыбается*)
См. своё изображение в jpegcrop, в частности расположение блоков - у тебя, видимо, с высотой всё нормально (блоки целиком умещаются), а с шириной нет (# - полный блок, $ - неполный краевой):
###$
###$
при повороте на 90 (напомню, что поворот идёт по часовой стрелке) превращается в:
##
##
##
$$
Снизу и справа могут быть "куцые блоки" (алгоритм так работает), но слева или сверху - нет (потому что декодирование идёт слева-направо, затем сверху-вниз).

QUOTE(Siberian GRemlin @ Feb 21 2014, 02:24) *
«Photoshop» переворачивает нормально, но там думаю, растр несжатый. Но это ещё не всё: программа «ALSee» переворачивает тоже нормально!
Программы у которых нет "lossless JPEG transform" всегда пережимают изображение.

QUOTE(Siberian GRemlin @ Feb 21 2014, 02:24) *
Затем перегнал в BMP картинки сохранённые разными программами и вот там уже была разница в байтах.
Что и требовалось доказать. (*улыбается*)

Автор: -=CHE@TER=- Apr 30 2016, 07:08

Возможно для кого-то это покажется дикостью, но есть и негативные последствия использования программ для уменьшения размера.
Залил кто-то на VirusTotal мою программу в архиве.
Программа была упакована при помощи http://advsys.net/ken/utils.htm#kzip с ключом /rn, который случайным образом формировал блоки данных для упаковки.
Потом я обновил программу, а старую версию удалил (не имею привычки держать старые кривые версии).
Затем я обнаружил, что VirusTotal ругается на мой сайт. Посмотрел из-за чего и решил убрать эту программу из списка угроз, которые когда-то были на моём сайте. Так сказать, почистить историю.
Начался адовый ад - мне пришлось удалять все изменения в коде и перекомпилировать программу, чтобы она была такая же, как и старая версия. Особый головняк был с датой в заголовке PE - хорошо хоть на VirusTotal есть информация о PE-файле и я оттуда взял дату, прописал в заголовке, поправил контрольную сумму и мой файл (наконец-то!) совпал по MD5 с тем что был на VirusTotal. Я его снова залил, написал отчёты о ложном срабатывании в те антивирусы, которые там что-то находили и, в итоге, моя программа прошла проверку без проблем.
Но она была в архиве созданном KZIP c ключом /rn. И, не смотря на то что в архиве больше не было других файлов, в истории моего сайта висел именно отчёт об архиве, а не о файле, который там был.
Сутки я мучил kzip с ключом /rn пытаясь получить такой же результат. Из логов VirusTotal я знал размер и MD5 архива. В итоге у меня было штук 30 архивов нужного размера, но ни у одного не совпадал MD5 (да, дату создания файла программы в заголовке .ZIP архива я тоже перебирал посекундно в диапазоне +/- один день). И я сейчас даже не говорю о куче других архивов, которые были больше или меньше нужного размера, созданных в процессе. Я, вообще, для автоматизации перебора программу написал, но не суть. А суть в том, что нужного архива я так и не смог получить.
Итого: я больше не пользуюсь ключом /rn в KZIP, ибо повторить результат в случае необходимости можно только чудом, а также держу теперь резервные копии старых версий программ. Да, этот ключ можно использовать когда в архиве нет исполняемых файлов, а, скажем, только текстовые или графические, но кто знает где и как этот архив потом будет использоваться, а ты не сможешь, в случае необходимости, его повторить?

Автор: Grom PE Apr 30 2016, 16:21

-=CHE@TER=-, если ты хочешь ещё большего уровня сжатия, чем kzip, лучше не перебирать случайные таблицы в нём, а воспользоваться алгоритмом zopfli, который сейчас лучше всех жмёт DEFLATE. Для zip утилита с этим алгоритмом называется http://www.advancemame.it/doc-advzip.

Автор: -=CHE@TER=- May 1 2016, 19:51

Во! Спасибо! Годные штуки - действительно, лучше Ken'овских утилит жмут.
advzip.exe -a -4 -i 20 test-1.zip test.exe
advzip.exe -a -4 -i 20 test-2.zip test.exe
Пот этом "test-1.zip" и "test-2.zip" будут идентичны. Ещё бы не забыть при скольких итерациях архив создавался. (*улыбается*)
Единственная проблема, которую обнаружил с "advzip.exe" - даты без учёта часового пояса почему-то сохраняются. Упаковал-распаковал и +X часов от своего часового пояса потерял. Тестировал распаковку как через WinRAR, так и через unzip (GNU'шный zip) и даже официальный DOS'овский pkunzip 2.04g - везде при распаковке часы теряются. Не смертельно, но KZIP-то жал правильно. Ещё как-нибудь при упаковке показывалась бы какая сейчас итерация идёт, а то, кроме имени файла, вообще ничего нет.
А ещё "advpng.exe" не умеет дату у файла сохранять, но это я могу внешней программой сделать.

Автор: Grom PE May 1 2016, 22:42

QUOTE(-=CHE@TER=- @ May 2 2016, 03:51) *
Единственная проблема, которую обнаружил с "advzip.exe" - даты без учёта часового пояса почему-то сохраняются.

Действительно. Предлагаю три варианта:
1. Создавать архив без сжатия, а этой утилитой пережимать;
2. Поменять в исходниках в zip.cc time2zip() вызов gmtime на localtime и скомпилировать;
3. Пропатчить вызов gmtime на localtime в бинарнике (он там третий по счёту, 0xB701: 7B → 2B).

Автор: -=CHE@TER=- May 2 2016, 14:13

Во! Третий вариант - это то что нужно! Спасибо большое!
А пережимать ей всё равно иногда придётся, потому что она каталоги сжимать не умеет.

Автор: -=CHE@TER=- May 15 2022, 19:07

QUOTE(Grom PE @ May 1 2016, 22:42) *
Действительно. Предлагаю три варианта:
1. Создавать архив без сжатия, а этой утилитой пережимать;
2. Поменять в исходниках в zip.cc time2zip() вызов gmtime на localtime и скомпилировать;
3. Пропатчить вызов gmtime на localtime в бинарнике (он там третий по счёту, 0xB701: 7B → 2B).
Надо же, оказывается 6 лет уже не обновлял эти программы.
Я использую вариант №1, но на случай, если кому-то понадобится вариант №3, то для последней версии advancecomp программы advzip.exe v2.3 (2022.04.15) смещение будет такое: 0x6BAC: 98 → A0.

Автор: necros2k7 Aug 10 2022, 03:19

Приветствую! Поделюсь своими изысканиями по данной теме. Вообщем перелопачено было много чего и остановился пока на следующей подборке - основной комбайн по переработке - File optimizer от друга из солнечной Испании Nikkho) Сразу оговоримся что речь идет о практическом уменьшении обьема файлов c выбросом за борт метаданных. Т.е. соотношение скорость - размер. Есть утилиты которые оптимизируют по максималке до талого но будь готов на неделю оставить комп чтобы скажем картинок 20 в PNG утрамбовало) Так вот PNG , OGG, PDF, MP3, GIF идет в Fileoptimizer, JPG в Papa`s optimizer. Остальные форматы глубоко не копал типа JS LUA CSS - из прикладного думаю можно это встретить в ресурсах браузеров и соотв. пожать. Давно мучал Firefox но после сжатия CSS были ошибки и забросил. Вообще FO интересная штука - жаль автор не дает менять ключи запуска консольных прог в ней, ибо они не оптимизированы и есть простор для экспериментов, на все реквесты он не быстро реагирует. Пробовал вручную добавлять параметры в екзешник но видимо прога считает контрольную сумму, помню была какая-то утилита делать выравнивание вроде после изменения но не помню название ее. Ах да EXE DLL OCX SCR идут в UPX (но опять же надо тестить каждый файл) Извиняюсь если сумбурно мысли изложил. По мере восстановления памяти буду дополнять)

Papa optimizer - https://papas-best.com/optimizer_en
EXIFtool тоже может резать мету - но надо тестить

JPG - хотите еще больше ужать - пакуйте в PackJPG - прекрасно открывается в XnView. В моих тестах даже в JXL больше по размеру получается.
PNG - после оптимизации в JXL тоже пробуйте (есессно не ресурсы игр а отдельные картинки)
WAD Doom - Cleanwad > doom-crusher.bat : v2.1.1, можно потом попробовать wadExt v1.1 © 2016 Christoph Oelckers (надо тестить)
MP4 - интересное наблюдение - преобразовываем в MKV > File optimizer - размер меньше)

В свою очередь есть вопрос - на гитхабе есть проекты по перепаковке PAK от UE4 - кому-то удалось сделать батник что бы по драг и дропу просто он разжимался и снова перепаковывался? Все что смотрел - полу костыли с зависимостями от версии движка я так еще понял.

Автор: -=CHE@TER=- Aug 10 2022, 10:13

Приветствую и спасибо за сообщение!
Я в последнее время кроме .ZIP/.PNG/.JPG мало что оптимизирую.
Из последних оптимизаторов, которые пробовал, был http://advsys.net/ken/utils.htm#flacout (чисто ради интереса - у меня и .FLAC файлов-то почти нет).

QUOTE(necros2k7 @ Aug 10 2022, 03:19) *
Ах да EXE DLL OCX SCR идут в UPX (но опять же надо тестить каждый файл)
Сжатие UPX обсуждали в http://www.forum.ctpax-x.org/index.php?showtopic=92. Я сейчас иничего не жму им. Потому что, во-первых, проблемы с некоторыми антивирусами, во-вторых, в последнем сообщении той темы правильно написано, что со сжатыми файлами не работает FileMapping - сжатый файл жрёт оперативной памяти во время работы больше, чем не сжатый, в-третьих, если в программе захочется что-то поменять (см. http://www.forum.ctpax-x.org/index.php?showtopic=236), то её всё равно придётся распаковывать и так далее.
Сразу хочу заметить, что я против всякого шлака в файлах - тут вопрос больше в балансе. Вот, например, в 3D Mark каких-то последних версий, для которых мы распаковщик делали, вместо того чтобы записать размер файла как 4 байта целое, его побайтно записывали с индикацией по первому биту (если память не изменяет). Проблем и головняка при работе с такими данными (когда их все нужно прочитать, чтобы понять какой там размер поля) - выше крыши. А экономии - 1-2 килобайта, на несколько гигабайт файла-архива. Иными словами - ну его нафиг, такая экономия, которая создаёт столько проблем, при минимальном выигрыше - не стоит оно того.

QUOTE(necros2k7 @ Aug 10 2022, 03:19) *
MP4 - интересное наблюдение - преобразовываем в MKV > File optimizer - размер меньше)
Лет 10 назад в .MKV принудительно сжатие добавили, что, ИМХО, глупость ужасная, потому что видео и звук и так сжаты, а сжатие субтитров, шрифтов и других данных на общий размер всего файла практически не влияет. Как результат куча проигрывателей (особенно аппаратных и прошивку которых нельзя заменить обновлением) перестало такие файлы открывать. И это я ещё молчу про то, что проигрывание таких видеофайлов стало сильнее нагружать процессор: помимо декодирования видео и звука необходимо ещё и ненужное сжатие распаковывать. Приходится старой версией MKVToolnix пересохранять файлы без сжатия. Возможно, там индексная таблица сжимается или ещё что, поэтому меньше получается. Плюс, насколько я знаю, .MKV поддерживает декодирование, когда текущий кадр распаковывается не на основе предыдущего (back-frame), а на основе кадра где-то в будущем (forward-frame) - вроде бы, эту штуку только .MKV из видеоконтейнеров поддерживает (правда она нагружает процессор сильнее - на слабых компьютерах особенно заметно).
А вот с .MP4 интереснее. Взял музыку (только звук) из видео на YouTube в чистом .AAC формате. Переделал в .M4A (это .MP4, где только звук - для MP3 плеера) при помощи программы MP4Box и размер уменьшился! При это сам .MP4 формат весьма толстый, плюс там индексная таблица добавилась, в отличие от .AAC, где, как и в .MP3, только фреймы звука. Сделал вывод, что, возможно, при сохранении в .MP4 ищутся одинаковые фреймы и на них в таблице смещение указывается - т.е. второй раз они в файл не попадают. За счёт этого, наверное, размер и уменьшается.

QUOTE(necros2k7 @ Aug 10 2022, 03:19) *
В свою очередь есть вопрос - на гитхабе есть проекты по перепаковке PAK от UE4 - кому-то удалось сделать батник что бы по драг и дропу просто он разжимался и снова перепаковывался?
Я не особо интересуюсь UE4 и современными играми/программами (у меня до сих пор Windows XP), так что вряд ли тут чем-то помочь смогу.

Автор: necros2k7 Aug 10 2022, 13:09

Посмотри File optimizer внутри много программ по теме, еще PDF оптимизация тоже не паханое поле) Причем зависит оптимизация видимо от содержимого в PDF потому как иногда размер меньше выходит в File optimizer а иногда и при ручной оптимизации с cpdf

Автор: Siberian GRemlin Aug 10 2022, 13:30

https://jrsoftware.org/striprlc.php.

Автор: -=CHE@TER=- Aug 10 2022, 20:08

QUOTE(necros2k7 @ Aug 10 2022, 13:09) *
Посмотри File optimizer внутри много программ по теме, еще PDF оптимизация тоже не паханое поле) Причем зависит оптимизация видимо от содержимого в PDF потому как иногда размер меньше выходит в File optimizer а иногда и при ручной оптимизации с cpdf
Нашего казначея, товарища kampaster'а, бы сюда. Он как раз всякой оптимизацией и пережатием занимается. Увы, он сейчас загружен сильно, даже на почту редко отвечает.

QUOTE(Siberian GRemlin @ Aug 10 2022, 13:30) *
https://jrsoftware.org/striprlc.php.
У нас даже тема по этой программе есть аж с 2007 года http://www.forum.ctpax-x.org/index.php?showtopic=94. (*улыбается*) Хотя понимаю, что за это время все всё опять забыли (http://www.forum.ctpax-x.org/index.php?showtopic=306). Наш форум за 16 лет существования - просто кладезь мудрости. Главное знать где что лежит. (*улыбается*)

Автор: necros2k7 Aug 23 2022, 11:44

А насколько сложно пропатчить этот File optimizer чтобы добавить туда свои флаги запуска утилитам? Так-то если exe смотреть там в открытом виде строка с флагами типа ect --strict -strip -9 --mt-file=6 --mt-deflate=6 как бы это заменить на ect --strict -strip -9 --mt-file=31 --mt-deflate=31 и чтобы прога запускалась) Это сократило бы время обработки PNG)

Автор: -=CHE@TER=- Aug 23 2022, 17:42

Как я вижу тут нужно строчку на 2 символа увеличить (обе "6" на "31"). Если у строки есть выравнивание, то можно просто увеличить строку в любом hex-редакторе. Но это нужно исполняемый файл смотреть, чтобы понять есть там выравнивание или нет.
А ещё можно сделать совсем хитро.

Вариант 1.
Как я понимаю, "ect" - это имя утилиты. Тогда её можно переименовать, чтобы строка занимала столько же по размеру:

CODE
original (оригинал):
ect --strict -strip -9 --mt-file=6 --mt-deflate=6
required (что нужно):
ect --strict -strip -9 --mt-file=31 --mt-deflate=31
patched (как пропатчить):
z --strict -strip -9 --mt-file=31 --mt-deflate=31
Затем переименовываем "ect.exe" в "z.exe".

Вариант 2.
Так как в указанной строке у утилиты нет расширения (просто "ect", а не "ect.exe"), то можно сделать ещё проще: переименовать "ect.exe", например, в "ect2.exe", затем создать "ect.bat" такого содержания (т.к. расширение у утилиты не задано - просто "ect", то система будет искать файл подставляя расширения из списка: ".exe", ".cmd", ".bat", ".com"):
CODE
@ect2.exe --strict -strip -9 --mt-file=31 --mt-deflate=31 %6
%6 - это шестой аргумент (как я понимаю, имя файла записывается в конец, после всех аргументов).