7z에서 압축 방법을 결합하면 실제로 무엇을합니까?


11

7z 명령 줄 도구를 사용하면 다음 과 같은 여러 가지 압축 방법을 지정할 수 있습니다 .

# 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

모든 메소드는 어떤 방식으로 사용되거나 최소한 메타 데이터에 지정됩니다.

$ 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

세 가지 방법을 모두 사용하여 파일을 실행하는 것처럼 보이지는 않습니다 . 오히려 방법의 순서를 변경하면 파일 크기에 큰 영향을 미치기 때문에 항상 항상 첫 번째를 선택합니다.

하나의 XML 파일 (PPMd가 최상의 압축률을 보임)과 하나의 이진 파일 (LZMA2가 수행하는 것)과 같은 여러 파일을 추가하더라도 두 파일에 대한 모든 방법이 여전히 나열되며 파일마다 동적으로 전환되지 않는 것으로 보입니다.

사실, 문서는 특히 "당신은. 방법의 수를 사용할 수 있습니다"하지만 말을하지 않는 것을 말한다 그런즉을 .

내가 달성하려고하는 것은 파일 당 "여러 가지 방법을 시도하고, 가장 좋은 방법을 선택하십시오"아카이브입니다. 물론 작은 스크립팅으로 수동 으로이 작업을 수행 할 수 있지만 체인 압축 방법은 정확히 그렇게해야합니까?


압축 방법 순서를 변경하면 모든 방법이 순서대로 적용 되더라도 압축 크기 가 변경 되어야 합니다. 대부분의 압축은 일반적으로 적용된 첫 번째 방법에서 비롯됩니다. 그 결과는 일반적으로 엔트로피가 높으므로 더 압축하기가 어렵습니다. 데이터 자체를 압축하지는 않지만 더 압축 가능하도록 인코딩하는 변형에는 예외가 있습니다. 예를 들어 시퀀스 1, 2, 3, 4, 5에는 값이 반복되지 않지만 차이는 반복되므로 델타 변환은 압축성을 향상시킵니다. 그것이 Daniel B의 대답에 관한 것입니다.
— Steve314

나는 실제로 7zip이 무엇을하는지 알지 못한다. "메소드의 순서를 변경하면 파일 크기에 큰 영향을 미친다"라는 논리에 주석을 달기 만하면된다.
— Steve314

답변:


5

일반적으로 압축 된 데이터는 효율적으로 압축 될 수 없습니다. 첫 번째 압축 방법을 적용한 후에는 파일 크기를 크게 줄일 수 없습니다.

는 -mN=X주로 필터를 지정하기위한 (Windows 도움말 파일에서 가져온)한다 :

지원되는 필터 :

델타 델타 필터 ( "델타 오프셋을 바이트 단위로 설정할 수 있습니다. 예를 들어 16 비트 스테레오 WAV 파일을 압축하려면"0 = 델타 : 4 "를 설정할 수 있습니다. 기본 델타 오프셋은 1입니다.")

x86 실행 파일 용 BCJ 변환기

x86 실행 파일 용 버전 BCJ2 변환기 (버전 2) ( "BCJ2는 32 비트 x86 실행 파일 용 버전 변환기 (버전 2)입니다. 압축률을 높이기 위해 일부 분기 명령을 변환합니다.")

ARM (Little Endian) 실행 파일 용 ARM 변환기

ARM Thumb (Little Endian) 실행 파일 용 ARMT 변환기

IA-64 실행 파일 용 IA64 변환기

PowerPC (Big Endian) 실행 파일 용 PPC 변환기

SPARC 실행 파일 용 SPARC 변환기

또한 BCJ2 필터의 여러 출력 스트림을 활용하는 고급 예제 인 도움말 파일에서 다음을 수행하십시오.

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

BCJ2 변환기를 사용하여 * .exe 및 * .dll 파일을 아카이브 .7z에 추가하고, 주 출력 스트림 (s0)에 8MB 사전이있는 LZMA, BCJ2의 s1 및 s2 출력 스트림에 대해 512KB 사전이있는 LZMA.


"첫 번째 압축 방법을 적용한 후에는 파일 크기를 크게 줄일 수 없습니다." — 물론. 여러 가지 방법을 지정하면 파일 당 각 지정된 방법을 시도 하고 가장 효율적인 방법을 선택할 수 있기를 바랍니다. 당연히 이것은 압축을 상당히 느리게 만듭니다.
— Sören Kuklau

2

필터를 순서대로 적용 할 수있는 것 같습니다.

작년 의이 게시물에는 좋은 설명이 있습니다.

7-zip의 -m 스위치 뒤의 숫자는 무엇을 의미합니까?

이 번호를 사용하면 한 번에 둘 이상을 사용하는 경우 압축 작업 순서를 설정할 수 있습니다.

다음은 설명서의 예입니다.

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

BCJ2 필터를 사용하여 a.7z를 아카이브하기 위해 * .exe 및 * .dll 파일을 추가합니다. 주 출력 스트림 (s0)에 32MB 사전이있는 LZMA 및 BCJ2의 s1 및 s2 출력 스트림에 대해 512KB 사전이있는 LZMA.

첫 번째 압축은 가장 낮은 숫자이며 0입니다. 이 예에서 0은 BCJ2로 설정됩니다. 그런 다음 LZMA입니다. 2와 3도 LZMA이지만 서로 다른 d 매개 변수를 사용하고 있습니다.

-mb 옵션은 한 압축의 출력을 다른 압축의 입력에 "바인드"하는 데 사용됩니다. 이 예에서 BCJ2에는 하나의 입력과 네 개의 출력이 있습니다. 출력 0은 1 번 압축입니다. 출력 1은 압축 번호 2가됩니다. 출력 2는 압축 번호 3으로갑니다. 출력 3은 바인드되지 않습니다 (다시 압축 할 필요가 없기 때문에).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.