我下载了一些 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))
在此示例中你可以看到库文件和音频是用于创建输出的编码器。