नए ffmpeg संस्करणों के साथ, आप scale
फ़िल्टर के force_original_aspect_ratio
विकल्प का उपयोग कर सकते हैं । उदाहरण के लिए, एक वीडियो को 1280 × 720 में फिट करने के लिए, बिना अपस्कूल किए ( अधिक जानकारी के लिए यह पोस्ट देखें ):
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
scale
यदि इनपुट वीडियो इससे बड़ा है , तो यहां फिल्टर 1280 × 720 हो जाता है। यदि यह छोटा है, तो यह अपक्षय नहीं होगा। pad
फिल्टर लक्ष्य आकार से अपने पक्ष अनुपात या आकार अलग है 1280 × 720 करने के लिए उत्पादन वीडियो लाने के लिए, इस मामले में आवश्यक है।
पुराने ffmpeg संस्करणों के साथ, कुछ हद तक हैकई वर्कअराउंड है। सबसे पहले, अपने आउटपुट की चौड़ाई, ऊंचाई और पहलू अनुपात को परिभाषित करें। यह हमें कुछ टाइपिंग से बचाएगा।
width=640; height=360
aspect=$( bc <<< "scale=3; $width / $height") # <= floating point division
अब, सुपर कॉम्प्लेक्स फ़िल्टर कमांड लागू करें जिसे जिम वॉर्ल ने लिखा था :
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
मैं वास्तव में यह नहीं समझाता कि यह सब क्या करता है, लेकिन मूल रूप से आप इसे किसी भी वीडियो को फीड कर सकते हैं, और यह केवल डाउनस्केल होगा, अपस्केल नहीं। यदि आप इसके लिए तैयार हैं तो आप फ़िल्टर को इसके अलग-अलग भावों में बदल सकते हैं। इसे छोटा करना संभव हो सकता है, लेकिन यह उसी तरह काम करता है।