ด้วยเวอร์ชัน 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
ตอนนี้เราจะใช้คำสั่งตัวกรอง super complex ที่Jim Worrall เขียนไว้ :
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
ฉันจะไม่อธิบายว่าสิ่งนี้ทำอะไร แต่โดยพื้นฐานแล้วคุณสามารถให้อาหารวิดีโอใด ๆ ได้และมันจะลดระดับลงเท่านั้น หากคุณทำเสร็จคุณสามารถแยกตัวกรองออกเป็นนิพจน์ของตัวกรอง มันอาจเป็นไปได้ที่จะย่อให้สั้นลง แต่ก็ใช้งานได้เช่นกัน