FFMPEG und Eingabevideo – gibt es eine Möglichkeit, Höhe und Breite dynamisch abzurufen?

FFMPEG und Eingabevideo – gibt es eine Möglichkeit, Höhe und Breite dynamisch abzurufen?

Ich versuche, ein Skript einzurichten, das das Verhältnis von Höhe zu Breite überprüft und dann bestimmt, WELCHE Dimension skaliert werden muss, um HD (1920 x 1080) zu entsprechen. Ist dies mit Standardbefehlen von FFMPEG möglich?

Ich muss auch entweder die Höhe oder die Breite zuschneiden, wenn die resultierende Dimension größer als 1080 bzw. 1920 ist.

Das habe ich schon gelesen Ändern Sie die Größe von Videos mit unterschiedlicher Breite auf eine feste Höhe unter Beibehaltung des Seitenverhältnisses mit ffmpeg

Ich weiß also, wie man skaliert, wenn man im Voraus weiß, WELCHE Dimension des Quellvideos größer ist.

Antwort1

Ich würde ffprobe verwenden, um die Breite und Höhe des vorhandenen Videos zu lesen, und die Berechnung in Bash durchführen, um herauszufinden, welcher der begrenzende Faktor ist.

(Sie haben erwähnt, dass Sie ein „Skript“ einrichten wollten, daher hoffe ich, dass das bedeutet, dass Bash akzeptabel ist.)

#!/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

verwandte Informationen