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