gzip、bzip2 和 zip:压缩率非常低

gzip、bzip2 和 zip:压缩率非常低

我需要将一些电影文件(.MPG)传输(通过 ftp)到远程计算机上。我想先压缩它然后发送。但所有压缩实用程序(gzip、bzip2 和 zip)的压缩率都非常低。例如:

ravbholua@ravbholua-Aspire-5315:~/Desktop/MAIL/SNEHAMILAN$ gzip -l MOV04042.MPG.gz
         compressed        uncompressed  ratio uncompressed_name
           61949207            66970629   7.5% MOV04042.MPG
ravbholua@ravbholua-Aspire-5315:~/Desktop/MAIL/SNEHAMILAN$

正如您在此处看到的,压缩较少。 bzip2 和 zip 的情况也是如此。请建议任何更好的压缩实用程序,以便我可以在很大程度上压缩 400 MB 的电影文件,然后通过 ftp 进行传输。我要做的是:首先我会 tar 所有电影文件,然后将其压缩到远程计算机上的 ftp。

答案1

大多数电影格式/编码(以及图像格式)已经被压缩。您无法通过添加第二个压缩层来进一步压缩它们 - 就像您尝试压缩 bzip2 压缩的存档一样(或相反)。

您找不到可以进一步压缩这些文件的无损压缩算法。事实上,您甚至可能会得到稍微压缩的文件更大在某些情况下比原来的。

进一步压缩媒体文件的最佳机会是使用更高效的编码器重新压缩音频和视频。.mpg例如,您的扩展程序建议您现在正在使用 MPEG-2,因此您可以尝试切换到H.264或者VP8/WebM。您还可以尝试更改现有编码器的参数以获得更小的文件,通过牺牲一些质量来换取更小的文件。您可能会花费更多的 CPU 时间重新编码,而不是在单个文件传输中节省的时间,但如果您要多次传输这些文件,则可能值得这样做。

答案2

大多数无损压缩(如 gzip、bzip2 和 zip 中使用的算法)的工作原理是消除文件中长重复的字节序列。作为一个人为的示例,假设您的文件有多个 100 个空格的实例:文件的压缩版本可能会创建一个非常短的代码,表示 100 个空格,并用此替换这些实例。

问题是,要使其工作,文件必须具有大量重复的字节序列。大多数普通文件都可以,这就是为什么压缩通常效果很好,但压缩文件通常不行(这就是压缩的重点)。这就是为什么双重压缩通常效果不佳的原因:在压缩文件一次之后,您已经删除了使其可压缩的大部分内容。有趣的是,可以制作压缩实际上会制作的文件更大,但从现实的角度来看,这样的文件并不经常出现。

有损压缩实际上并没有那么不同。从最简单的意义上来说,它以某些方式改变文件以使其压缩得更好,但它试图以用户不会注意到的方式来做到这一点。在音频压缩中,这些被称为心理声学算法,因为它是以人类大脑无法察觉的方式改变音频;我认为视频压缩有一个类似的词,但我不知道它是什么。不管怎样,一旦他们完成了这些技巧来使文件更具可压缩性,他们就会以通常的方式压缩它。但这意味着有损压缩文件也不具有无损算法寻找的许多内容。

因此,恐怕你的运气不太好。如果您有权访问原始视频,@WarrenYoung 的答案就可以工作,但如果您只有这些 .mpg 文件,则需要小心重新编码它们:您不会破坏文件或任何内容,但会破坏结果看起来可能不像从原始文件开始那样好。不同的有损算法会丢弃不同类型的数据,但这样做的效果可以叠加并变得明显。完成重新编码后,您应该观察文件以确保它看起来仍然不错。

答案3

有一些更有效的压缩格式可用(例如ZPAQ,豌豆或者克格勃,参见维基百科PAQ文章),但它们是以牺牲处理时间为代价的。

正如马特指出的那样,他们是否会进一步压缩你的(已经压缩的)电影是值得怀疑的。

相关内容