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.