Scale (resize) the input video, using the libswscale library.
The scale filter forces the output display aspect ratio to be the same of the input, by changing the output sample aspect ratio.
If the input image format is different from the format requested by the next filter, the scale filter will convert the input to the requested format.
Options
The filter accepts the following options, any of the options supported by the libswscale scaler, as well as any of the framesync options.
See the ffmpeg-scaler manual for the complete list of scaler options.
- width, w, height, h
-
Set the output video dimension expression. Default value is the input dimension.
If the width or w value is 0, the input width is used for the output. If the height or h value is 0, the input height is used for the output.
If one and only one of the values is -n with n >= 1, the scale filter will use a value that maintains the aspect ratio of the input image, calculated from the other specified dimension. After that it will, however, make sure that the calculated dimension is divisible by n and adjust the value if necessary.
If both values are -n with n >= 1, the behavior will be identical to both values being set to 0 as previously detailed.
See below for the list of accepted constants for use in the dimension expression.
- eval
-
Specify when to evaluate width and height expression. It accepts the following values:
- init
-
Only evaluate expressions once during the filter initialization or when a command is processed.
- frame
-
Evaluate expressions for each incoming frame.
Default value is init.
- interl
-
Set the interlacing mode. It accepts the following values:
- 1
-
Force interlaced aware scaling.
- 0
-
Do not apply interlaced scaling.
- -1
-
Select interlaced aware scaling depending on whether the source frames are flagged as interlaced or not.
Default value is 0.
- flags
-
Set libswscale scaling flags. See the ffmpeg-scaler manual for the complete list of values. If not explicitly specified the filter applies the default flags.
- param0, param1
-
Set libswscale input parameters for scaling algorithms that need them. See the ffmpeg-scaler manual for the complete documentation. If not explicitly specified the filter applies empty parameters.
- size, s
-
Set the video size. For the syntax of this option, check the "Video size" section in the ffmpeg-utils manual.
- in_color_matrix, out_color_matrix
-
Set in/output YCbCr color space type.
This allows the autodetected value to be overridden as well as allows forcing a specific value used for the output and encoder.
If not specified, the color space type depends on the pixel format.
Possible values:
- auto
-
Choose automatically.
- bt709
-
Format conforming to International Telecommunication Union (ITU) Recommendation BT.709.
- fcc
-
Set color space conforming to the United States Federal Communications Commission (FCC) Code of Federal Regulations (CFR) Title 47 (2003) 73.682 (a).
- bt601, bt470, smpte170m
-
Set color space conforming to:
-
ITU Radiocommunication Sector (ITU-R) Recommendation BT.601
-
ITU-R Rec. BT.470-6 (1998) Systems B, B1, and G
-
Society of Motion Picture and Television Engineers (SMPTE) ST 170:2004
-
- smpte240m
-
Set color space conforming to SMPTE ST 240:1999.
- bt2020
-
Set color space conforming to ITU-R BT.2020 non-constant luminance system.
- in_range, out_range
-
Set in/output YCbCr sample range.
This allows the autodetected value to be overridden as well as allows forcing a specific value used for the output and encoder. If not specified, the range depends on the pixel format. Possible values:
- auto/unknown
-
Choose automatically.
- jpeg/full/pc
-
Set full range (0-255 in case of 8-bit luma).
- mpeg/limited/tv
-
Set "MPEG" range (16-235 in case of 8-bit luma).
- in_chroma_loc, out_chroma_loc
-
Set in/output chroma sample location. If not specified, center-sited chroma is used by default. Possible values:
- auto, unknown
- left
- center
- topleft
- top
- bottomleft
- bottom
- force_original_aspect_ratio
-
Enable decreasing or increasing output video width or height if necessary to keep the original aspect ratio. Possible values:
- disable
-
Scale the video as specified and disable this feature.
- decrease
-
The output video dimensions will automatically be decreased if needed.
- increase
-
The output video dimensions will automatically be increased if needed.
One useful instance of this option is that when you know a specific device’s maximum allowed resolution, you can use this to limit the output video to that, while retaining the aspect ratio. For example, device A allows 1280x720 playback, and your video is 1920x800. Using this option (set it to decrease) and specifying 1280x720 to the command line makes the output 1280x533.
Please note that this is a different thing than specifying -1 for w or h, you still need to specify the output resolution for this option to work.
- force_divisible_by
-
Ensures that both the output dimensions, width and height, are divisible by the given integer when used together with force_original_aspect_ratio. This works similar to using
-n
in the w and h options.This option respects the value set for force_original_aspect_ratio, increasing or decreasing the resolution accordingly. The video’s aspect ratio may be slightly modified.
This option can be handy if you need to have a video fit within or exceed a defined resolution using force_original_aspect_ratio but also have encoder restrictions on width or height divisibility.
The values of the w and h options are expressions containing the following constants:
- in_w, in_h
-
The input width and height
- iw, ih
-
These are the same as in_w and in_h.
- out_w, out_h
-
The output (scaled) width and height
- ow, oh
-
These are the same as out_w and out_h
- a
-
The same as iw / ih
- sar
-
input sample aspect ratio
- dar
-
The input display aspect ratio. Calculated from
(iw / ih) * sar
. - hsub, vsub
-
horizontal and vertical input chroma subsample values. For example for the pixel format "yuv422p" hsub is 2 and vsub is 1.
- ohsub, ovsub
-
horizontal and vertical output chroma subsample values. For example for the pixel format "yuv422p" hsub is 2 and vsub is 1.
- n
-
The (sequential) number of the input frame, starting from 0. Only available with
eval=frame
. - t
-
The presentation timestamp of the input frame, expressed as a number of seconds. Only available with
eval=frame
. - pos
-
The position (byte offset) of the frame in the input stream, or NaN if this information is unavailable and/or meaningless (for example in case of synthetic video). Only available with
eval=frame
. Deprecated, do not use. - ref_w, rw, ref_h, rh, ref_a, ref_dar, rdar, ref_n, ref_t, ref_pos
-
Eqvuialent to the above, but for a second reference input. If any of these variables are present, this filter accepts two inputs.
Examples
-
Scale the input video to a size of 200x100
scale=w=200:h=100
This is equivalent to:
scale=200:100
or:
scale=200x100
-
Specify a size abbreviation for the output size:
scale=qcif
which can also be written as:
scale=size=qcif
-
Scale the input to 2x:
scale=w=2*iw:h=2*ih
-
The above is the same as:
scale=2*in_w:2*in_h
-
Scale the input to 2x with forced interlaced scaling:
scale=2*iw:2*ih:interl=1
-
Scale the input to half size:
scale=w=iw/2:h=ih/2
-
Increase the width, and set the height to the same size:
scale=3/2*iw:ow
-
Seek Greek harmony:
scale=iw:1/PHI*iw scale=ih*PHI:ih
-
Increase the height, and set the width to 3/2 of the height:
scale=w=3/2*oh:h=3/5*ih
-
Increase the size, making the size a multiple of the chroma subsample values:
scale="trunc(3/2*iw/hsub)*hsub:trunc(3/2*ih/vsub)*vsub"
-
Increase the width to a maximum of 500 pixels, keeping the same aspect ratio as the input:
scale=w='min(500\, iw*3/2):h=-1'
-
Make pixels square by combining scale and setsar:
scale='trunc(ih*dar):ih',setsar=1/1
-
Make pixels square by combining scale and setsar, making sure the resulting resolution is even (required by some codecs):
scale='trunc(ih*dar/2)*2:trunc(ih/2)*2',setsar=1/1
-
Scale a subtitle stream (sub) to match the main video (main) in size before overlaying. ("scale2ref")
'[main]split[a][b]; [ref][a]scale=rw:rh[c]; [b][c]overlay'
-
Scale a logo to 1/10th the height of a video, while preserving its display aspect ratio.
[logo-in][video-in]scale=w=oh*dar:h=rh/10[logo-out]
Commands
This filter supports the following commands:
- width, w, height, h
-
Set the output video dimension expression. The command accepts the same syntax of the corresponding option.
If the specified expression is not valid, it is kept at its current value.