如何知道 7-Zip 的压缩率?

Posted

技术标签:

【中文标题】如何知道 7-Zip 的压缩率?【英文标题】:How to know the compression rate for 7-Zip? 【发布时间】:2015-07-27 09:33:02 【问题描述】:

我有以下代码用于使用 7zip 创建拆分存档。

压缩级别: MX9

分割存档大小: 1MB

static void Main(string[] args)
    
        string zipFileName = @"D:\ZIP\zipfile.7z";
        string temp = @"D:\ZIP\ZM.pdf";
        ProcessStartInfo info = new ProcessStartInfo();
        info.FileName = AppDomain.CurrentDomain.BaseDirectory + @"..\..\7za.exe";
        /**
          * Switch -mx0: Don't compress at all. This is called "copy mode."
          * Switch -mx1: Low compression. This is called "fastest" mode.
          * Switch -mx3: Fast compression mode. Will automatically set various parameters.
          * Switch -mx5: Same as above, but "normal."
          * Switch -mx7: This means "maximum" compression.
          * Switch -mx9: This means "ultra" compression.You probably want to use this.
          **/
        info.Arguments = string.Format("a -t7z \"" + zipFileName + "\" \"" + temp + "\" -v0k " + CompressionLevel.mx9, 1024);
        info.WindowStyle = ProcessWindowStyle.Hidden;
        Process process = Process.Start(info);
        process.WaitForExit();

        Console.WriteLine("Done zipping");
        Console.ReadLine();
    

通常对于 10MB 的文件,我会得到 9 个扩展名为 .7z.001, .7z.002, .7z.003 的 .7z 文件,依此类推。所以对于一个 1MB 的文件,我得到一个扩展名为 .7z.001 的 .7z 文件。如果只生成一个文件,我想要实现的是消除 .001 扩展名。有什么方法可以知道 7zip 会根据其压缩率生成多少拆分档案?我正在处理 PDF 文件。

编辑:

基本上我想做的是决定是否创建拆分档案。所以我不得不猜测生成的文件是否会大于 1MB。

【问题讨论】:

您为什么不停止告诉 7zip 拆分存档?那应该是一个命令行选项。它当然是主 GUI 中的一个选项。 @AdamHouldsworth 是的,我可以从命令行中删除 V 选项。我想知道的是生成的文件大小。 这很困难,而且性能可能与仅进行压缩并检查生成的文件大小相当。您可以围绕已知内容进行一些猜测,但除此之外,这样做会导致收益递减。只需执行压缩,如果您只计算一个使用通配符搜索类似.7z.* 的文件,然后手动重命名它以切断扩展名。 @AdamHouldsworth 这实际上是一个很好的建议。如果只找到 1 个文件,则剪切 .001 【参考方案1】:

不可能知道生成的文件的大小,除非您能够分析大小的内容并检查它的压缩程度。 (据我所知,这只能通过实际压缩来完成。)

例如,仅包含文本的 PDF 文件可能比仅包含压缩图像的文件更易于压缩。最好的解决方案是停止拆分档案,或者在压缩输入后检查 .002(etc.) 文件是否存在。

另一种解决方案是使用 C# LZMA sdk 压缩内存中的文件,然后在适当的情况下手动拆分文件。

【讨论】:

好吧,我真的必须拆分档案,因为这将通过限制为 25 MB 的 Gmail 发送。对于稍微超过 25 MB 的文件,我不确定它是生成 a 25MB and a 1MB file 还是 a 24 MB file - 一切都取决于压缩率。检查.002 的存在实际上很棒。类似于@AdamHouldsworth 的建议。【参考方案2】:

您可以尝试压缩 PDF 文件的各种组合并平均压缩率,然后您会知道粗略的输入大小,之后您会得到多个存档。

也就是说,这并不准确。更简单的方法是等待 7-zip 完成,然后检查您有多少文件,如果您只有一个文件,则删除 .001

【讨论】:

以上是关于如何知道 7-Zip 的压缩率?的主要内容,如果未能解决你的问题,请参考以下文章

7zip的lzma和lzma2算法在啥情况下压缩率不一样

iOS8视频硬编码-压缩率关键参数设置

如何在 iOS 中检查视频的分辨率、比特率

Spark + Parquet + Snappy:spark shuffle 数据后整体压缩率下降

数据压缩压缩率-图像熵-保真度

[20180814]慎用查看表压缩率脚本.txt