I’m trying to write a script for a telegram userbot that can convert any video/animation to a .mp4
. I already have it so the script communicates and utilizes the API of cloudconvert.com.
Now my problem lies within the ffmpeg command that I’m passing to CC, as I need to keep videos below 1280 pixels on either side. It doesn’t matter if the final video is 720*1280 or 1280*1280 or something completely else, as long as neither of the two sides surpass 1280 pixels.
Here comes the tricky part, I don’t want to ruin the aspect ratio and I don’t want the video to be upscaled if it’s smaller than 1280.
The part of code that is actually relevant is the scale portion.
This following piece will resize a video to maximum 1280 pixels in height, but doesn’t take the width into account, it just keeps the ratio.
-vf "scale=min'(1280,iw)':-2"
Now how would I have to either adapt it or change it so it will actually resize depending on which side is greater than 1280 pixels?
I hope I’m being specific enough and I’m looking forward to your help.
2
Answers
The problem appears only, if the height is bigger then the width, this increases the number of limits for the width from 2 to 3:
To test for all cases, you would use
min(1280,min(iw,round(1280*iw/ih)))
, creating a filter ofEDIT
In some versions of ffmpeg the line above will not work citing self-referencing issues. In this case we can create an alternative line of thought:
min(iw,1280)
min(ih,1280)
The expression would then be
-vf 'scale=if(gte(iw,ih),min(1280,iw),-2):if(lt(iw,ih),min(1280,ih),-2)'
Don’t forget, that you might run this through some shell parsing mechanism, which would additionally create the need to escape the commas. The expression
Is verified to work with versions 2.7.2 to 3.4.4 on ubuntu Linux