11
3
The 7z command-line tool lets you specify multiple compression methods, e.g.:
# 7-zip archive type, strongest (9) compression, methods PPMd, BCJ2, LZMA2
$ 7z a -t7z -mx=9 -m0=PPMd -m1=BCJ2 -m2=LZMA2 myarchive.7z somefile.xml
All methods get used in some way, or at least specified in the metadata:
$ 7z l -slt myarchive.7z
7-Zip [64] 9.22 beta Copyright (c) 1999-2011 Igor Pavlov 2011-04-18
Listing archive: myarchive.
7z
--
Path = myarchive.7z
Type = 7z
Method = LZMA2 PPMD BCJ2
[..]
----------
Path = somefile.xml
[..]
Method = PPMD:o32:mem192m BCJ2 LZMA2:48m
Block = 0
It does not appear to run the file through all three methods, picking the best. Rather, it apparently always picks the first, as changing the order of the method affects the file size significantly.
Even if I add multiple files, such as one XML file (PPMd yields best compression) and one binary file (LZMA2 does), it still lists all methods for both files, and doesn't appear to switch dynamically per file.
In fact, the documentation specifically says that "You can use any number of methods.", but it does not say wherefore.
What I'm trying to achieve is a per-file "try multiple methods, pick whichever is best" archive. I can of course manually achieve this with a little scripting, but presumably, chaining compression methods should do exactly that?
Changing the order of compression methods should change the compressed size even if all methods are applied in sequence. Most compression typically comes from the first method applied. The result from that typically has high entropy, so is hard to compress further. There are exceptions for tranforms that aren't expected to compress the data themselves, but which encode it to be more compressible - e.g. the sequence 1, 2, 3, 4, 5 has no repetition of values, but has repetition of differences, so a delta transform improves compressibility. That's what Daniel B's answer is about. – Steve314 – 2014-08-07T21:11:25.740
I don't actually know what 7zip does, though - just commenting on your "as changing the order of the method affects the file size significantly" logic. – Steve314 – 2014-08-07T21:14:49.267