获得相同质量的最小视频,如何使用 FFMPEG?

Joh*_*ith 9 ffmpeg

我知道这是一个“蹩脚”的问题,但是:可以说,我有一个 wmv、avi 等大文件。我想将它转换为 .MP4,文件大小可能最小,当然音频/视频质量相同。如何?我应该使用什么编解码器?我使用 FFmpeg

Ely*_*Ely 19

您可以尝试使用 libx264 CRF 18 进行编码。 CRF 参数设置质量并影响文件大小。较低的值意味着较高的质量,典型值为 18 到 28。默认值为 23。

CRF 18 以产生(可以说)“视觉无损”结果而闻名:

ffmpeg -i input.avi -c:v libx264 -crf 18 -preset veryslow -c:a copy out.mp4
Run Code Online (Sandbox Code Playgroud)

请注意,我使用了一个veryslow预设,它将为您提供尽可能小的文件。如果您想更快地编码,您可以省略它,但文件大小也会更大。

此外,我决定复制音轨而不是重新编码它 ( -c:a copy),主要是因为我假设它在您的样本中已经是 AAC/MP3 立体声。

如果输出对您来说太大,请尝试使用更高的 CRF 值(最多 23),但质量会受到影响。

  • 旧习难改。 (3认同)
  • veryslow 并没有给出可能的最小尺寸。非常慢会提高质量,但会牺牲编码时间和文件大小。我经常发现非常慢实际上会比非常快产生更大的文件大小。 (2认同)

Xys*_*Xys 8

2021年

H265/HEVC 版本:

ffmpeg -i input.mp4 -vcodec libx265 -crf 18 -tag:v hvc1 -preset veryslow output.mp4
Run Code Online (Sandbox Code Playgroud)

  • 注意:-an 将丢弃音频。如果您希望输出中有音频,请不要使用此标志。 (2认同)

old*_*ud0 6

以最少的质量损失获得最小的视频比其他任何事情都更具挑战性。网上散布着一些指南,它们会推荐您在 FFmpeg 上使用的设置,用于游戏捕获、流媒体、DVD 翻录等。

如果你想要无损无损,试试这个:

ffmpeg -i input.mp4 -c:v libx264 -crf 0 output.mp4
Run Code Online (Sandbox Code Playgroud)

重要的部分是将-crf 0其设置为无损的部分。但是,输出文件通常会非常大。您可以将其更改为-crf 18可以为您提供质量可接受且没有大多数工件的东西。

  • 仅供参考 - 根据 FFmpeg wiki - 由于 8 位和 10 位 x264 之间存在一些差异,建议对无损 libx264 使用“-qp 0”而不是“-crf 0”。两种方式可能都没什么大不了的,但我默认使用`-qp 0` 效果很好。尽管如此,它并不是真正的“无损”...... libx264 输出与生成它们的原始输出之间存在细微差别。用肉眼无法看到,但它们是可测量的差异...... - 有关上述维基参考,请参阅:https://trac.ffmpeg.org/wiki/Encode/H.264#LosslessH.264 (3认同)
  • 我不知道你从哪里得到最后一部分,但 x264 无损在数学上是无损的。尝试在原始输入和解码的无损 H.264 流上运行 md5sum,它们将是相同的。 (2认同)