Я пытаюсь создать один скрипт, который будет проверять соотношение высоты к ширине, а затем определять, КАКОЕ измерение масштабировать, чтобы соответствовать HD (1920x1080). Возможно ли это с помощью стандартных команд FFMPEG?
Мне также нужно обрезать либо высоту, либо ширину, если результирующий размер больше 1080 или 1920 соответственно.
Я уже это прочитал Изменить размер видео с разной шириной до фиксированной высоты с сохранением соотношения сторон с помощью ffmpeg
поэтому я знаю, как масштабировать, если заранее известно, КАКОЙ размер исходного видео больше.
решение1
Я бы использовал ffprobe для считывания ширины и высоты существующего видео и выполнил бы математические вычисления в bash, чтобы выяснить, какой фактор является ограничивающим.
(Вы упомянули, что хотели бы настроить один «скрипт», поэтому я надеюсь, что это означает, что bash приемлем.)
#!/bin/bash
W=$( ffprobe input.mp4 -show_streams |& grep width )
W=${W#width=}
H=$( ffprobe input.mp4 -show_streams |& grep height )
H=${H#height=}
# Target a 1920x1080 output video.
TARGETW=1920
TARGETH=1080
# I'm not familiar with the resizing parameters to ffmpeg,
# so I'm writing the below code based on the question you linked to.
if [ $(( $W * $TARGETH )) -gt $(( $H * $TARGETW" )) ]; then
# The width is larger, use that
SCALEPARAM="scale=$TARGETW:-1"
else
# The height is larger, use that
SCALEPARAM="scale=-1:$TARGETH"
fi
ffmpeg -i input.mp4 -vf $SCALEPARAM output.mp4