FFmpeg有一个非常强大的缩放过滤器,可用于完成各种任务。其中一些列在这里。更多信息可以在官方文档中找到。

在所有示例中,起始图像(input.jpg)将是这一个(535⨉346像素):

简单重新缩放

如果您只需将视频大小调整为特定大小(例如320⨉240),则可以使用最基本形式的缩放滤镜:

ffmpeg -i input.avi -vf scale = 320:240 output.avi

同样适用于图像:

ffmpeg -i input.jpg -vf scale = 320:240 output_320x240.png

生成的图像如下所示:

如您所见,纵横比与原始图像不同,因此图像显示为拉伸。

保持宽高比

如果我们想保持纵横比,我们只需要指定一个组件(宽度或高度),并将另一个组件设置为-1。例如,这个命令行:

ffmpeg -i input.jpg -vf scale = 320:-1 output_320.png

将输出图像的宽度设置为320像素,并根据输入图像的宽高比计算输出图像的高度。生成的图像的尺寸为320×207像素。

一些编解码器要求宽度和高度的大小为n的倍数。您可以通过将宽度或高度设置为-n来实现此目的:

ffmpeg -i input.jpg -vf scale = 320:-2 output_320.png

输出现在为320⨉206像素。

使用变量

还有一些有用的变量可用于代替数字,以指定输出图像的宽度和高度。

例如,如果要以这样的方式拉伸图像以仅使输入图像的宽度加倍,则可以使用类似这样的内容(iw =输入宽度,ih =输入高度):

ffmpeg -i input.jpg -vf scale = iw * 2:ih input_double_width.png

输出图像如下所示:

如果你想要图片大小的一半,只需乘以.5或除以2:

ffmpeg -i input.jpg -vf“scale = iw * .5:ih * .5”input_half_size.png
ffmpeg -i input.jpg -vf“scale = iw / 2:ih / 2”input_half_size.png

避免升级

有时您想要缩放图像,但如果尺寸太小,请避免放大图像。这可以使用min表达式完成:

ffmpeg -i input.jpg -vf“scale ='min(320,iw)':'min(240,ih)'”input_not_upscaled.png

输出宽度将被评估为320的最小值和输入宽度。如果您的输入图像宽度仅为240像素,则min函数的结果将为240 - 这将是您的目标值。

适合矩形/静态大小的播放器

有时您需要缩放输入图像以使其适合指定的矩形,例如在合并来自不同来源的材料时。

您可以使用force_original_aspect_ratio选项实现此目的。它有两个可能的值:

  • 减少:如果需要,输出视频尺寸将自动减小。
  • 增加:如果需要,输出视频尺寸将自动增加。

这允许您强制图像适合320x240框,使用正确的宽高比缩小它:

ffmpeg -i input.jpg -vf scale = w = 320:h = 240:force_original_aspect_ratio =减少output_320.png

这产生了我们之前看到的320x207图像。

您可能有其他约束,例如添加黑条(柱状和letterboxing)以在缩放到某个矩形时填充剩余空间。您还可以使用pad过滤器添加黑色边框:

ffmpeg -i input.jpg -vf“scale = 320:240:force_original_aspect_ratio = decrease,pad = 320:240:(ow-iw)/ 2:(oh-ih)/ 2”output_320_padding.png

更多的例子可以发现在这个超级用户答案

指定缩放算法

您可以使用-sws_flags选项指定用于调整大小的算法。例如,要使用双线性而不是默认的双三次缩放:

ffmpeg -i test.tif -vf scale = 504:376 -sws_flags bilinear out.bmp

有关详细信息,请参阅缩放器文档。要设置多个标志,您可以将它们与+号组合。例如:

-sws_flags lanczos + full_chroma_inp

您还可以直接在比例过滤器中指定选项,例如:

-vf scale = 1920x1080:flags = lanczos

ffmpeg缩放视频尺寸
标签: