FFMPEG и входное видео — есть ли способ динамически получить высоту и ширину?

FFMPEG и входное видео — есть ли способ динамически получить высоту и ширину?

Я пытаюсь создать один скрипт, который будет проверять соотношение высоты к ширине, а затем определять, КАКОЕ измерение масштабировать, чтобы соответствовать 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

Связанный контент