ffmpeg 如何制作更小但看起来仍然不错的文件

ffmpeg 如何制作更小但看起来仍然不错的文件

我下载了一些 MP4 视频文件,这些文件相对于其长度和分辨率来说似乎太大了。为了减小它们的大小,我运行了以下命令:

ffmpeg -i input.mp4 output.mp4

这花了一些时间,但命令完成后,我得到了一个文件,output.mp4其大小约为原始文件大小的三分之一input.mp4。我在 VLC 中打开了这两个文件,希望看到一些差异,也许是质量下降,但在我看来,它们的内容完全相同。

我想知道的是这个奇怪的命令到底起什么作用,为什么会产生如此无法预料的结果?

答案1

我想知道的是这个奇怪的命令到底起什么作用,为什么会产生如此无法预料的结果?

它基本上只是将其转换为基于文件扩展名的格式的新文件。使用的设置是所有内容的默认设置;声音、音频等……

至于文件大小较小,虽然您说将一个 MP4 视频转换为另一个 MP4 视频时看到的视频质量相同,但视频和音频的比特率很可能会以某种方式降低。

比特率越高,文件包含的数据越多,因此视频质量越高。

您可能无法从视觉上看到差异,但检查源视频与转换后视频的底层规格,我确信您会看到音频和视频源中的比特率更高。

答案2

ffmpeg 如何制作更小但看起来仍然不错的文件

答案取决于几个因素:

  • 输入的格式和用于创建它的编码器。
  • 输出的格式决定了选择哪种编码器。
  • 可用的编码器取决于您的ffmpeg配置方式。
  • 编码器本身有默认设置。不同编码器的默认设置可能不同。
  • 文件大小还取决于输入和输出流的数量。默认流选择行为每个类型仅选择一个流。因此,如果您的输入有 2 个音频流,它将仅选择 1 个,除非您手动选择流-map
  • 您如何看待品质。您认为好的东西在别人看来可能并不那么好。

MP4 尤其如此

对于绝大多数用户来说,MP4 的默认编码器是:

  • 库文件- H.264 视频编码器。
  • 音频- 内置 FFmpeg AAC 编码器。

x264 不会选择特定的比特率进行速率控制。它选择默认的 CRF 级别来控制质量。默认值是-crf 23质量和文件大小之间的良好折衷。请参阅FFmpeg 维基:H.264了解更多信息。

并非所有格式都相同,并非所有编码器都相同。H.264 已经过时了,但它仍然是一种很好的格式。x264 是最高效的 H.264 编码器。因此,如果您为 x264 提供由糟糕或低效的编码器(或旧的传统格式)创建的输入,那么它将减少文件大小(有时是显著的),而不会产生可怕的发电损失

查看正在使用的编码器

您可以从命令的控制台输出中找出正在使用的编码器:

$ ffmpeg -i input.mkv output.mp4
  Stream mapping:
    Stream #0:0 -> #0:0 (ffv1 (native) -> h264 (libx264))
    Stream #0:1 -> #0:1 (flac (native) -> aac (native))

在此示例中你可以看到库文件音频是用于创建输出的编码器。

相关内容