У нових версіях 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
Я не буду вникати в пояснення того, що це все робить, але в основному ви можете подати на нього будь-яке відео, і це буде лише зменшити масштаб, а не високий масштаб. Якщо ви готові до цього, ви можете розсічити фільтр на окремі вирази. Це може бути скорочено, але це також працює.