What does the number after 7-zip’s -m switch mean

7-zipcompression

7-zip has a command line switch to set the compression method, -m followed by a number, e.g.
-m0=LZMA.

What does the number (0 in the example) mean? Different numbers produce slightly different compression results and performance:

Parameters                      Wall    User    System
-m0=LZMA -mx=9 -ms=on -mmt=off  28.4    27.48   0.85
-m1=LZMA -mx=9 -ms=on -mmt=off  27.45   33.06   0.90
-m0=LZMA -mx=9 -ms=on -mmt=on   12.74   24.39   1.14
-m1=LZMA -mx=9 -ms=on -mmt=on   15.08   33.14   1.28
-m0=LZMA -mx=9 -ms=on -mmt=off  26.5    25.58   0.65
-m1=LZMA -mx=9 -ms=on -mmt=off  27.07   32.84   0.87
-m0=LZMA -mx=9 -ms=on -mmt=on   13.27   24.99   1.00
-m1=LZMA -mx=9 -ms=on -mmt=on   15.32   33.28   1.47

Best Answer

That number lets you set the order of the compression operations if you are using more than one at once.

This is an example from the documentation:

7z a a.7z *.exe *.dll \
    -m0=BCJ2 -m1=LZMA:d25 -m2=LZMA:d19 -m3=LZMA:d19 \
    -mb0:1 -mb0s1:2 -mb0s2:3

adds *.exe and *.dll files to archive a.7z using BCJ2 filter, LZMA with 32 MB dictionary for main output stream (s0), and LZMA with 512 KB dictionary for s1 and s2 output streams of BCJ2.

The first compression is the lowest number, which is zero. In this example, zero is set to BCJ2. Then comes one, which is LZMA. Two and three are also LZMA, but they are using different d parameters.

The -mb option is used to "bind" the output from one compression to the input of another one. In this example, BCJ2 has one input and four outputs. Output zero is going to compression number one. Output one is going to compression number two. Output two goes to compression number three. Output three is not bound (because it does not need to be compressed again).


In your examples, they are only using one compression operation, so it does not matter which number you assign to it.