То, что я пытаюсь сделать, это настроить один скрипт, который будет проверять соотношение высоты к ширине, а затем определять, КАКОЙ размер для масштабирования, чтобы соответствовать HD(1920x1080). Возможно ли это с помощью стандартных команд FFMPEG?

Мне также нужно обрезать либо высоту, либо ширину, если результирующий размер больше, чем 1080 или 1920 соответственно.

Я уже читал это Изменение размера видео с различной шириной до фиксированной высоты с сохранением соотношения сторон с помощью ffmpeg

поэтому я знаю, как масштабировать, если вы знаете заранее, КАКОЕ измерение вашего исходного видео больше.

1 ответ1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .