FFMPEG y entrada de vídeo: ¿alguna forma de recuperar la altura y el ancho de forma dinámica?

FFMPEG y entrada de vídeo: ¿alguna forma de recuperar la altura y el ancho de forma dinámica?

Lo que estoy tratando de hacer es configurar un script que verifique la relación entre la altura y el ancho y luego determine QUÉ dimensión escalar para que se ajuste a HD (1920x1080). ¿Es esto posible usando comandos FFMPEG estándar?

También necesito recortar el alto o el ancho si la dimensión resultante es mayor que 1080 o 1920 respectivamente.

ya he leído esto Cambie el tamaño de videos con diferentes anchos a una altura fija preservando la relación de aspecto con ffmpeg

Entonces sé cómo escalar si sabes de antemano QUÉ dimensión de tu video fuente es mayor.

Respuesta1

Usaría ffprobe para leer el ancho y el alto del video existente y haría los cálculos en bash para determinar cuál es el factor limitante.

(Mencionaste que querías configurar un "script", así que espero que eso signifique que bash es aceptable).

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

información relacionada