Daha yeni ffmpeg sürümlerinde scalefiltrenin force_original_aspect_ratioseçeneğini kullanabilirsiniz. Örneğin, bir videoyu yükseltme yapmadan 1280 × 720 boyutuna sığdırmak için (daha fazla bilgi için bu gönderiye bakın ):
ffmpeg -i input.mp4 -filter:v "scale='min(1280,iw)':min'(720,ih)':force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2" output.mp4
Burada, scalegiriş videosu bundan daha büyükse filtre 1280 × 720 olarak ölçeklendirilir. Daha küçükse, ölçeklendirilmez. En padboy oranının veya boyutunun hedef boyuttan farklı olması durumunda, çıkış videosunu 1280 × 720'ye getirmek için filtre gereklidir.
Eski ffmpeg sürümlerinde, biraz hileli bir geçici çözüm var. İlk olarak, çıktınızın genişliğini, yüksekliğini ve en boy oranını tanımlayın. Bu bize biraz tasarruf sağlayacaktır.
width=640; height=360
aspect=$( bc <<< "scale=3; $width / $height") # <= floating point division
Şimdi Jim Worrall'ın yazdığı süper karmaşık filtre komutunu uygulayalım :
ffmpeg -i input.mp4 -vf "scale = min(1\,gt(iw\,$width)+gt(ih\,$height)) * (gte(a\,$aspect)*$width + \
lt(a\,$aspect)*(($height*iw)/ih)) + not(min(1\,gt(iw\,$width)+gt(ih\,$height)))*iw : \
min(1\,gt(iw\,$width)+gt(ih\,$height)) * (lte(a\,$aspect)*$height + \
gt(a\,$aspect)*(($width*ih)/iw)) + not(min(1\,gt(iw\,$width)+gt(ih\,$height)))*ih" \
output.mp4
Tüm bunların ne yaptığını açıklamaya gerçekten girmeyeceğim, ancak temelde herhangi bir videoyu besleyebilirsiniz ve sadece ölçeksiz, lüks değil. Eğer hazırsanız, filtreyi kendi ifadelerine ayırabilirsiniz. Bunu kısaltmak mümkün olabilir, ancak aynı şekilde çalışır.