Escalar videos de tamaño variable a una relación de aspecto fija

Tengo 45 videos de diferentes relaciones de aspecto y resoluciones. Necesito escalarlos todos para que encajen perfectamente dentro de un contenedor de 640x360 (16x9) con las siguientes especificaciones:

16x9, 640x360, 1600kbps, H.264, MP4, progresivo, 29,97

Por ejemplo, algunos videos pueden ser de 512x12, otros pueden ser de 480x320, pero todos deben ajustarse, escalarse y centrarse dentro de un nuevo video de salida de 640x360. Si un video no es lo suficientemente ancho para llenar ese espacio, se deben agregar barras negras a la izquierda y a la derecha.

¿Es esto posible con ffmpeg?

Aquí está el código con el que he estado jugando hasta ahora:

ffmpeg -i "input.mov" -b:v 1600k -bufsize 1600k -r 29.97 -vf scale=640:360 -vcodec libx264 output.mp4

Esto parece hacer todo lo que necesito, excepto escalar dinámicamente a esa resolución fija.

¿Alguien sabe cómo lograr el resultado que estoy buscando?

¡Gracias!

Respuestas (1)

Utilizar

ffmpeg -i "input.mov" -vf 
          "scale='if(gt(a*sar,16/9),640,360*iw*sar/ih)':'if(gt(a*sar,16/9),640*ih/iw/sar,360)',
          pad=640:360:(ow-iw)/2:(oh-ih)/2,setsar=1"
       -vcodec libx264 -b:v 1600k -bufsize:v 1600k -r 30000/1001 output.mp4

Los filtros de escala usan la if(a,b,c)expresión condicional ie if a then b else c. Compruebo si el video es más ancho que 16:9. En caso afirmativo, escalo el ancho a 640 y escalo la altura para conservar la proporción. Si no, escalo la altura a 360 y mantengo el ancho proporcional. Luego, el resultado se rellena a 640x360. El setsar se usa para asegurarse de que ffmpeg registre el video como píxel cuadrado.

¡Gracias! ¡Intenté esto, funcionó! Hay un video que codifiqué en el que la relación de aspecto de la salida se estiró horizontalmente entre un 15 % y un 20 %. (El resto de los parámetros, incluido el relleno, funcionaron bien). ¿Tal vez sucedió algo extraño con el archivo fuente? Estas son las especificaciones del vídeo de origen: 720x486, 40656 kb/s, SAR 10:11 DAR 400:297, 29,97 fps, 29,97 tbr, 30k tbn, 30k tbc (predeterminado
Pruebe el comando modificado.