A guide to upscaling or downscaling video with FFmpeg

How to do video scaling using FFmpeg with examples for different types of upscaling and downscaling methods.

Scaling a video means to make it either larger (higher resolution) or smaller (smaller resolution).

ffmpeg video scaling guide

The basis of scaling a video with FFmpeg uses the scale flag after the filtergraph (-vf), then you can either do basic video scaling such as upscaling the video to twice the original resolution:

ffmpeg -i input.mp4 -vf scale=iw*2:ih*2 output.mp4

Or an advanced scale with flags and encoding:

ffmpeg -i input.mp4 -vf scale=2560x1440:flags=lanczos -c:v libx264 -preset slow -crf 20 output_compress_1440p.mp4

There is no flag or parameter to do either upscaling or downscaling rather this is determined by the values set for the scale flag.

Scaling by resolution

If you know the desired resolution, simply setting the specific width and height for scaling with the scale flag:

ffmpeg -i input.mp4 -vf scale=3840:2560 output4k.mp4

This will upscale input.mp4 to be 4k resolution.

Scaling by ratio

To scale the video file by “times its self” such as twice as large or twice as small you can use variables * or / along with iw and ih to specify the input width and input height respectively.

To double a videos resolution:

ffmpeg -i input.mp4 -vf scale=iw*2:ih*2 output.mp4

Make a video half its original size:

ffmpeg -i input.mp4 -vf scale=iw/2:ih/2 output.mp4

Scaling by resolution with the ratio

If you want to scale a video to a custom width but keep the ratio you can input -1 after the width:

ffmpeg -i input.mp4 -vf scale=1280:-1 output.mp4

This sets the width of the video as 1280 and then will automatically calculate the height keeping with the ratio of the input video. So if it was a video of 16:9 ratio then output.mp4 will be 1280×720.

Scaling video with an encode

Scale a video and also encode or compress it at the same time:

ffmpeg -i input.mp4 -vf scale=3840:2560 -c:v libx264 -preset fast -crf 22 output.mp4

You can read more about the encoding options here and here.

Scaling with a video scaling algorithm

The most complex of them all, specifying what video scaling algorithm to use when scaling.

This is a very complex methodology, more than a few sentences can fully explain. However, this link here from user slhck gives a good run down for image/video algorithms.

The default is bicubic, with lanczos being very popular.

video interpolation outcomes
matplotlib.org scale algorithms

The image above edited from matplotlib.org compares the scaling algorithm methods.

You can apply a certain algorithm with flags=

ffmpeg -i input.mp4 -vf scale=2560:1440:flags=lanczos output.mp4

The above command will scale the video to 2560×1440 with lanczos.