Спасибо большое, разобрался!
Я просту думаю как сделать так, чтобы исправить сильный разброс в сжатии 7-zip deflate. В оптимизации PNG 7-zip deflate играет важную роль.
zlib - быстрый, но слабый в сжатии (удобно перебирать параметры сжатия PNG)
7-zip - среднее сжатие и средняя скорость.
kzip, zopfli - сильное сжатие, но медленные.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Как я понимаю, вся проблема в том, что алгоритм 7-zip не может сам выбирать параметры -mfb и -mpass. Поэтому возникает вопрос, можно ли придумать алгоритм, который будет передавать в 7-zip оптимальные параметры сжатия?
Last edit: lorents 2015-11-28
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
можно ли придумать алгоритм, который будет передавать в 7-zip оптимальные параметры сжатия?
Such an algorithm does exist - trial and error. Without extra logic, it will make only 256*15 trials. Speaking seriously, a good choosing algorithm will probably be a new Deflate implementation. It would, however, be possible to reduce the number of trials down to 256 if 7-Zip remembered the best strategy throughout the DivPasses.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Перебирать параметры не хочется, т.к. это занимает время. А мне необходимо минимизировать затраты времени.
Надеюсь Igor Pavlov что нибудь придумает и исправит данную ситуацию.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Igor Pavlov добрый день!
Я просто ищу способа исправить такой сильный разброс в сжатии. Как было написано в справке, чем выше значение параметров -mfb и -mpass, тем сильнее сжатие, и больше времени требуется.
Сейчас получается, что у этого "правила" есть исключения. Я пытаюсь понять почему это происходит? Как я понимаю, это некий "баг" в алгоритме deflate 7-zip.
Если я правильно понял, то задать косвенно количество блоков я тоже не могу.
Проведя ряд тестов, для моего проекта оптимальное значение параметров -mfb=257 -mpass=5, т.к. тратиться небольшое кол-во времени, при этом сжатии на высоком уровне.
Я понимаю, что для Вас алгоритм deflate 7-zip не является приоритетным напраавлением, но я очень прошу, если будет время посмотрите причину сильного разброса в сжатии.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
There was something wrong with my previous post. Briefly: increasing fb may not decrease the size due to different Huffman encodings (and I even think that the optimal choice of this parameter has the complexity at least as the one of match finder's); increasing pass should ideally not increase the size, but due to some reason 7-Zip may choose less optimal encoding.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Подскажите, пожалуйста, какие значения параметров в файле DeflateEncoder.cpp и в других файлах лучше использовать, для получения максимального сжатия, не учитываю время и кол-во памяти необхомое для этого.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Look my post above about NumDivPasses.
Спасибо большое, разобрался!
Я просту думаю как сделать так, чтобы исправить сильный разброс в сжатии 7-zip deflate. В оптимизации PNG 7-zip deflate играет важную роль.
zlib - быстрый, но слабый в сжатии (удобно перебирать параметры сжатия PNG)
7-zip - среднее сжатие и средняя скорость.
kzip, zopfli - сильное сжатие, но медленные.
Сделал новый тест PNG:
Тест 1:
4.32 - 604 590 822 байт
4.43 - 606 198 290 байт
4.56 - 607 400 246 байт
4.57 - 607 225 759 байт
9.20 - 607 559 920 байт
15.12 - 606 368 598 байт
МИН - 603 865 676 байт
4.32 + 4.43 - 604 009 337 байт
Тест 2:
4.32 - 1 184 889 459 байт
4.43 - 1 183 833 371 байт
4.56 - 1 184 629 129 байт
4.57 - 1 184 416 625 байт
9.20 - 1 185 599 649 байт
15.12 - 1 184 129 730 байт
МИН - 1 182 393 931 байт
4.32 + 4.43 - 1 182 714 652 байт
Самое главное нет сильного разброса в сжатии.
Как я понимаю, вся проблема в том, что алгоритм 7-zip не может сам выбирать параметры -mfb и -mpass. Поэтому возникает вопрос, можно ли придумать алгоритм, который будет передавать в 7-zip оптимальные параметры сжатия?
Last edit: lorents 2015-11-28
Such an algorithm does exist - trial and error. Without extra logic, it will make only 256*15 trials. Speaking seriously, a good choosing algorithm will probably be a new Deflate implementation. It would, however, be possible to reduce the number of trials down to 256 if 7-Zip remembered the best strategy throughout the
DivPasses
.Перебирать параметры не хочется, т.к. это занимает время. А мне необходимо минимизировать затраты времени.
Надеюсь Igor Pavlov что нибудь придумает и исправит данную ситуацию.
I don't plan any changes in that Defalte code for near future.
It's too difficult to improve it.
And any possible gain will be small.
Igor Pavlov добрый день!
Я просто ищу способа исправить такой сильный разброс в сжатии. Как было написано в справке, чем выше значение параметров -mfb и -mpass, тем сильнее сжатие, и больше времени требуется.
Сейчас получается, что у этого "правила" есть исключения. Я пытаюсь понять почему это происходит? Как я понимаю, это некий "баг" в алгоритме deflate 7-zip.
Если я правильно понял, то задать косвенно количество блоков я тоже не могу.
Проведя ряд тестов, для моего проекта оптимальное значение параметров -mfb=257 -mpass=5, т.к. тратиться небольшое кол-во времени, при этом сжатии на высоком уровне.
Я понимаю, что для Вас алгоритм deflate 7-zip не является приоритетным напраавлением, но я очень прошу, если будет время посмотрите причину сильного разброса в сжатии.
Автор advancecomp использует такой подход
Last edit: lorents 2015-11-29
There was something wrong with my previous post. Briefly: increasing
fb
may not decrease the size due to different Huffman encodings (and I even think that the optimal choice of this parameter has the complexity at least as the one of match finder's); increasingpass
should ideally not increase the size, but due to some reason 7-Zip may choose less optimal encoding.Igor Pavlov добрый день!
Если не сложно, Вы не могли бы скомпилировать 7za с увеличенным значением kMaxUncompressedBlockSize
Last edit: lorents 2015-12-06
You can compile it, if you need it.
Note that it can change some another properties: memory usage and speed. So any exact number is tradeoff.
Если не трудно, подскажите, пожалуйста, как компилировать 7za?
Install Visual Studio C++ compiler.
call
in CPP\7zip\Bundles\Alone
Спасибо!
del
Last edit: lorents 2015-12-14
Igor Pavlov Проститез за беспокойство.
Подскажите, пожалуйста, какие значения параметров в файле DeflateEncoder.cpp и в других файлах лучше использовать, для получения максимального сжатия, не учитываю время и кол-во памяти необхомое для этого.
I worked with deflate code many years ago.
So now I don't remember details.
Look comments in code.
Понял Вас. Благодарю за ответ!