什么存档压缩使 .mp4 文件最小?

O.r*_*rka 7 video compression mp4 ffmpeg bz2

是否有已知的基于存档的压缩格式可以制作最小的 .mp4 视频?

我使用我所知道的唯一存档格式做了一个 1080p 0:12 持续时间的视频测试:

(python3) Joshs-MBP:testing_movie mu$ ls -lS
total 12712
-rw-r--r--  1 mu  staff  2145528 Jun  6 09:26 testing.mov
-rw-r--r--  1 mu  staff  1790044 Jun  6 09:26 testing.mov.zip
-rw-r--r--@ 1 mu  staff  1789512 Jun  6 09:25 testing.mov.gz
-rw-r--r--  1 mu  staff   775138 Jun  6 09:26 testing.mov.bz2
Run Code Online (Sandbox Code Playgroud)

看起来bzip2是最好的。在使文件更小方面还有什么更好的吗?如果需要更长的时间也没关系。

另外,我注意到您不能bzip2创建目录。

Aus*_*arn 17

首先,关于术语的一个小问题:ZIP 是您使用的唯一存档格式。Gzip 和 Bzip2 是压缩格式,而不是存档格式。更具体一点:

  • 归档格式将多个文件和/或目录(通常包括所有权、时间戳和可能的其他数据等元数据)聚合到一个文件中。Tar 是纯存档格式的一个例子,它没有固有的压缩,

  • 压缩格式只是压缩数据,而不是将多个文件合并为一个。Gzip、Bzip2、Brotli、LZ4、LZOP、XZ、PAQ 和 Zstandard 都是压缩格式。其中一些(例如 Gzip 和 LZ4)可能支持压缩多个文件并将它们连接成一个文件,然后可以将其解压缩成多个原始文件(这就是 gzip 目录时发生的情况),但它们不存储路径或其他元数据,因此它们不是存档格式。

某些格式,例如 ZIP、7z 或 RAR,结合了存档和压缩(尽管 ZIP 也可以存储未压缩的文件)。

现在,让我们继续讨论你的主要问题:

music2myear 的评论是正确的。根据所使用的 MP4 编码的具体细节,您的结果会有很大差异。这是因为 MP4 本身包括数据压缩,在这种情况下,优化用于压缩音频和视频数据,而不会显着降低感知质量。它用于此的过程实际上有些复杂(太复杂了,无法在这里解释),但由于它不会降低感知质量的限制,再加上它逐帧压缩而不是作为单个长流,有时会有很大的改进空间(从测试中可以看出)。

现在,虽然我无法在没有更多详细信息的情况下给出结论性答案,但我可以给您一些关于文件压缩的​​一般建议:

  • 在这种情况下,ZIP 和 Gzip 显示出非常相似的结果,因为它们使用相同压缩算法的变体,更具体地说,是 LZW 算法的衍生物,称为 DEFLATE。DEFLATE 并不是一个特别好的压缩算法,但它无处不在(甚至有它的硬件实现),所以它经常被用作比较的标准。除了用作其他文件格式(例如 ZIP)的组件之外,它不再广泛用于存储。在比较压缩算法时,几乎任何基于 DEFLATE(或一般的 LZW)的东西都不会在任何方面获胜。

  • 相比之下,Bzip2 对数据进行一些复杂的转换以使其更有效地压缩,然后使用霍夫曼编码进行实际压缩。在大多数情况下,它比基于 DEFLATE 的压缩器压缩得更好,但它也比 DEFLATE 慢。由于在霍夫曼编码之前对其如何转换输入数据做出了一些假设,因此它对输入数据的结构方式也比许多其他选项更敏感。

  • XZ 使用一种称为 LZMA 的不同算法。就像衍生自 DEFLATE 的 LZW 算法一样,LZMA 最终衍生自一种称为 LZ77 的算法,尽管它的压缩率比基于 DEFLATE 的选项要好得多,并且在大多数情况下比 Bzip2 的压缩率要好得多。除了 LZMA 之外,它还进行了一些转换,使其比其他选项更擅长压缩可执行文件。然而,这样做的代价是压缩数据需要很长时间。7zip 也使用 LZMA,但没有数据转换,因此在比率方面通常不如 XZ。

  • LZOP 使用 LZO 算法,通常压缩比 DEFLATE 差,但工作得更快。就像 Gzip 一样,它不再被广泛使用,因为人们倾向于支持提供更好压缩比或更好性能的替代方案。

  • LZ4 是 Google 开发的更新标准,运行速度非常快(接近内存带宽解压速度),但压缩率比 LZO 还要差。它正在慢慢取代 LZO,因为大多数使用 LZO 的东西都用它来提高速度。

  • Brotli 是 Google 的另一个新产品。它是 HTTP/2 标准的一部分,专门针对流媒体进行了优化,与基于 DEFLATE 的选项相比,它实际上可以获得更好的压缩率和性能。但是,它并未广泛支持纯文件压缩,因此它可能不是您使用的可行选择。

  • PAQ 适合那些非常担心最大化压缩比的人。它使用复杂的统计模型组合来实现绝对疯狂的压缩率(根据原始数据,使用 PAQ 压缩的文件小于原始大小的1/10并不罕见,而 DEFLATE 平均接近 1/2) . 当然,这样做的代价是使用 PAQ压缩任何东西都需要非常长的时间。使用高压缩设置,使用 PAQ 压缩该样本视频可能至少需要半小时。由于需要花费大量时间,几乎没有人使用 PAQ,而且很少有人将它用于存档目的以外的任何其他用途(也就是说,他们只在不太可能更改的文件上使用它)。

  • Zstandard 是最新的,由 Facebook 开发。它混合使用旧方法和新方法(包括一些机器学习技术)来实现与 bzip2 相当或更好的压缩率(有时甚至优于 XZ),同时运行速度明显快于我列出的大多数其他方法除了LZ4。它可能不会在您的使用中击败 XZ(并且绝对不会击败 PAQ),但它可能会获得足够好的比率,因此显着更好的性能是值得的。

  • 作为一个对压缩或视频编码的内部工作原理一无所知的人,令我惊讶的是,如果我们愿意将视频文件保留为无法播放的格式,并且必须首先专门解压缩,而不是进行进一步的压缩,则无法执行进一步的压缩视频压缩可以在您播放时实时进行。 (2认同)
  • @xr280xr 问题是已经使用任何合理压缩算法压缩的数据在通过另一种压缩算法时不能很好地压缩(如果有的话)。由于这一点以及视频文件中的大部分数据是已经压缩的音频和视频数据的事实,视频文件在通过另一种压缩算法运行时往往根本不会压缩。 (2认同)