Dengan versi ffmpeg yang lebih baru, Anda dapat menggunakan opsi scale
filter force_original_aspect_ratio
. Misalnya, agar sesuai dengan video menjadi 1280 × 720, tanpa upscaling (lihat posting ini untuk info lebih lanjut):
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
Di sini, scale
filter menskala hingga 1280 × 720 jika input video lebih besar dari itu. Jika lebih kecil, itu tidak akan ditingkatkan. The pad
filter diperlukan untuk membawa video output ke 1280 × 720, dalam hal rasio aspek atau ukuran berbeda dari ukuran target.
Dengan versi ffmpeg yang lebih lama, ada solusi yang agak kabur. Pertama, tentukan lebar, tinggi, dan rasio aspek dari output Anda. Ini akan menyelamatkan kita dari mengetik.
width=640; height=360
aspect=$( bc <<< "scale=3; $width / $height") # <= floating point division
Sekarang, mari kita terapkan perintah filter super kompleks yang ditulis 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
Saya tidak akan menjelaskan apa yang dilakukan semua ini, tetapi pada dasarnya Anda dapat memberi makan video apa pun, dan itu hanya akan turun, bukan kelas atas. Jika Anda siap, Anda dapat membedah filter ke dalam ekspresi individualnya. Dimungkinkan untuk mempersingkat ini, tetapi berfungsi seperti itu juga.