使用 ffmpeg 修改视频文件的分辨率

发布于 2020-02-10  207 次阅读


这种方法是在 Linux 系统(几乎任何发行版)中调整视频文件大小的最佳方法之一,也是 Windows 和 Mac 用户的绝佳替代方案。

更改视频文件的分辨率将是我们在处理视频文件时将执行的最常见操作之一,因此 ffm​​peg 能够完美地完成此操作。我们应该想要更改视频文件的分辨率有几个原因,例如:

  • 减少视频的大小。这可以通过降低视频的分辨率来实现。如果我们采用高清(1920x1080 像素)的视频,但我们知道我们永远不会在支持比 1024x768 更高分辨率的屏幕上看到,我们可以降低视频分辨率以适应这种新分辨率,从而节省大量存储空间空间,如果在互联网上使用,也可以节省带宽。
  • 很多时候,视频文件的分辨率会发生变化,从而使其格式标准化。也就是说,如果我们有几个视频并且我们希望它们都在同一分辨率下,则必须经历这个改变分辨率的过程。

在现代网站的开发中,根据它们出现的位置来分辨各种分辨率的视频是非常有用的。我们可以开发具有响应式设计的网站,其中最适合用户的视频播放。例如,如果我们有各种格式的视频 - 我们说 1920x1080,1280x720 和 640x360 - 我们可以设计一个响应式网站,让访问者根据访问者浏览器节省带宽重现正确的视频分辨率(请记住,移动用户通常支付传输数据,因此最好尽可能少地传输流量)

在这个例子中,我们将高清格式(1920x1080 像素)的视频分辨率降低到 640x360(对于宽高比 16:9,这是一个相当常用的配置):

ffmpeg -i video_1920.mp4 -vf scale=640:360 video_640.mp4 -hide_banner

仅需要使用 - vf scale = 640:360 以新的所需分辨率(640:360)指示缩放视频滤波器  。要考虑:

  • 我们可以指出我们想要的任何分辨率,但生成的视频将始终具有相同的宽高比。也就是说,它不会扭曲图像,如果视频的宽高比为 16:9,它将保持视频的 16:9 宽高比。该程序将调整生成的视频,使其符合我们给出的分辨率。
  • 更改分辨率时,视频必须再次进行编码过程,因此根据输出格式和用于输出的编解码器,过程可能会很慢。
  • 我们还没有提到它,但大多数时候  将视频转换为更高的分辨率  是没有意义的,因为视频质量没有任何改善。

更改视频宽高比

如果我们想要改变视频的外观,知道图像会显得扭曲,我们可以使用额外的过滤器 “setdar”。想象一下,在前一种情况下,我们想要将 16:9 的宽高比改为 4:3,因此视频的分辨率为 4:3 宽高比,在这种情况下,它将是 640x480。进行此转换的 ffmpeg 命令将是:

ffmpeg -i video_1920.mp4 -vf scale=640:480,setdar=4:3 video_640x480.mp4 -hide_banner

我们在这种情况下获得的视频输出  _video640x480.mp4  改变了原始视频的外观并且稍微扭曲了图像,但它将以新的外观获得我们想要的分辨率。

另一方面,如果我们不想依赖于使用可能 “更正常”  (4:3,16:9)的宽高比  ,或者如果我们想要对具有未定义宽高比的其他分辨率进行更改,我们是我们不会害怕可能出现的图像变形,我们可以使用 “setsar”  过滤器,这样可以避免必须保持这些宽高比。通过这种方式,我们可以使用以下命令将之前的视频转换为 200x400 的分辨率:

ffmpeg -i video_1920.mp4 -vf scale=200:400,setsar=1:1 video_200x400.mp4 -hide_banner

从 1920x1080 分辨率的 200x400 分辨率的结果使视频输出具有扭曲的外观。

视频大小调整的示例

我们将看到一些使用 ffmpeg 调整视频大小的示例。我们有一个原始视频,分辨率为 320x180 像素。这里是。

正如我们之前看到的,我们可以将视频大小调整为原始大小的一半。我们使用以下命令将其从 320x180 像素分辨率调整为 160x90 像素分辨率:

ffmpeg -i video_320x180.mp4 -vf scale=160:90 video_180x90.mp4 -hide_banner

该视频的大小从 1.18MB 变为 354KB 视频(四分之一)。结果如下:

请注意,视频较小,但我们可以告诉浏览器将其放大,与原始视频相比会有一些质量损失。

现在让我们将原始视频宽高比从 16:9 更改为 4:3。为此,我们使用以下命令将视频从 320x180 调整为 320x240:

ffmpeg -i video_320x180.mp4 -vf scale=320:240,setdar=4:3 video_320x240.mp4 -hide_banner

这是结果(你可以看到图像看起来扭曲):

现在终于我们将调整视频大小,就好像它必须适合垂直屏幕一样,因此我们将尺寸从 320x180 像素调整为 180x320 像素。这是执行任务的命令:

ffmpeg -i video_320x180.mp4 -vf scale=180:320,setsar=1:1 video_180x320.mp4 -hide_banner

这是扭曲的结果:

_请注意,在此视频中,我还包含了 webm 格式的源代码,以实现最大兼容性。我这样做了所以如果您的浏览器无法直接使用 mp4 文件,您可以在类似的 webm 文件中看到结果。


或许明日太阳西下倦鸟已归时