
In all the examples, the starting image (input.jpg) will be this one (535×346 pixels):
The default for matrix in untagged input and output is always limited BT.601. One should always remember that YCbCr 4:4:4 8 bit is not enough to preserve RGB 8 bit, YCbCr 4:4:4 10 bit is required. Dither can be turned off using -vf scale=sws_dither=none. Limited range RGB is not supported at all. Conversion from YCbCr limited to RGB 16 bit is broken, use zscale instead of swscale. For those -vf scale=out_range=pc should be used. Yet for x265 the workaround was implemented, but not for jpeg2000 and AV1. yuvjxxxp pixel formats are deprecated. Use -vf scale=flags=accurate_rnd to fix that. When going from BGR (not RGB) to yuv420p the conversion is broken (off-by-one). The correct syntax for SAR=2:3 is setsar=2/3, or setsar=1 for the above example.
In this special case it accidentally gives the correct result SAR=1:1, but for example setsar=2:3 would give the wrong result SAR=2:1. The above example is highly misleading because setsar=1:1 is equivalent to setsar=r=1:max=1. For example:įfmpeg -i input.mp4 -vf scale=320:240,setsar=1:1 output.mp4
You have to manually set the SAR value to 1:1 to make the players display it in the way you want.
In some cases, FFmpeg will set the Sample Aspect Ratio to compensate for the ratio change. To achieve the same results for complex filter chains, you have to explicitly set the scaling algorithm via the flags=bicubic option. When using -filter_complex/ -lavfi, the default scaling flags are not applied, so the default algorithm is not bicubic, but bilinear.