I'm trying to resize a larger video to fit an area that I have. In order to achieve this I calculate first the dimensions of the resized video so That it fits my area, and then I try to add padding to this video so that the final result will have the desired dimension, keeping the aspect ratio as well.
So let's say that I have the original video dimensions of 1280x720 and to fit my area of 405x320 I need first to resize the video to 405x227. I do that. Everything is fine at this point. I do some math and I find out that I have to add 46 pixels of padding at the top and the bottom.
So the padding parameter of the command for that would be -vf "pad=405:320:0:46:black"
. But each time I run the command I get an error like Input area 0:46:405:273 not within the padded area 0:0:404:226
.
The only docs for padding that I found is this http://ffmpeg.org/libavfilter.html#pad.
I don't know what I'm doing wrong. Anyone had this problem before? Do you have any suggestions?
try
-vf "scale=iw*min(405/iw\,320/ih):ih*min(405/iw\,320/ih),pad=405:320:(405-iw)/2:(320-ih)/2"
Edit to clarify what's going on in that line: you are asking how to scale one box to fit inside another box. The boxes might have different aspect ratios. If they do, you want to fill one dimension, and center along the other dimension.
Here is a generic filter expression for scaling (maintaining aspect ratio) and padding any source size to any target size:
Replace
TARGET_WIDTH
andTARGET_HEIGHT
with your desired values. I use this to pull a 200x120 padded thumbnail from any video. Props to davin for his nice overview of the math.Try this:
According to FFmpeg documentation, the
force_original_aspect_ratio
option is useful to keep the original aspect ratio when scaling: