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!
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.
d13
gian
akash dubey