Tengo un reproductor de video html 5 que tiene 700 px de ancho y 400 px de alto. Estoy tratando de usar avconv
ffmpeg para cambiar el tamaño (manteniendo la relación de aspecto) y asegurándome de que se ajuste a mi reproductor.
La entrada puede ser un archivo de cualquier tamaño, por lo que necesito cambiar el tamaño de los más grandes pero centrar los más pequeños con barras negras. Hasta ahora he intentado: -s
y -aspect
he visto que pad
se usa con el -vf
interruptor, pero no entiendo cómo funciona lo suficiente como para obtener lo que necesito.
Esta es una idea aproximada de lo que necesito. No estoy seguro de si es posible. Es casi como el ancho máximo / alto máximo de CSS. Me doy cuenta de que esto puede ser solo una mezcla de palabras, pero si alguien entiende lo que estoy hablando, agradecería ayuda, gracias.
comando avconv:
avconv -y -i control.avi -vcodec libx264 -b 2000k -bufsize 20M -acodec aac -strict experimental -ar 44100 -ab 256k bigbuck_out.mp4
fuente
Respuestas:
Un método simple es usar la
force_original_aspect_ratio
opción en el filtro de escala .Imagen original. Representa un video de 640x480, relación de aspecto 4: 3.
En estos ejemplos, la imagen original se escalará para ajustarse a una salida de relación de aspecto 16: 9 mientras se conserva la relación de aspecto original. Para hacer esto puedes:
Pillarbox o buzón
Imagen en caja de pilares. Ajuste de una entrada de 640x480 (4: 3) en una salida de 1280x720 (16: 9).
Esto aumentará la imagen. Si desea evitar el aumento de escala, consulte el siguiente ejemplo.
En cambio, Letterboxing ocurriría si la relación de aspecto de entrada es más amplia que la relación de aspecto de salida. Por ejemplo, una entrada con una relación de aspecto de 2,35: 1 en una salida de 16: 9 dará como resultado un buzón.
Igual que el anterior pero sin escalar
Entrada de 640x480 (4: 3) en salida de 1280x720 (16: 9) sin aumento de escala.
Cosecha
Imagen recortada Relación de aspecto de entrada 4: 3, relación de aspecto de salida 16: 9.
fuente
color
opción, comopad=1280:720:(ow-iw)/2:(oh-ih)/2:color=red
(o puede usar el hexadecimal si lo prefiere). Ver lista de colores .Aquí está el comando que agregaría pilares o buzones para un ancho de salida fijo. Es un poco largo, pero tendrá que especificar el relleno de alguna manera.
Primero, en su shell defina el ancho y la altura de salida:
Luego ejecuta el comando:
Esto se reduce a los elementos esenciales necesarios para cambiar el tamaño y la almohadilla: agregue sus otras opciones de video y audio como mejor le parezca. Tenga en cuenta que los números para
width
yheight
tienen que ser divisibles por 2 para que funcionen para la mayoría de los códecs.Aquí está la explicación de lo que está sucediendo:
min()
) y elegimos solo ese factor para cambiar el tamaño.iw*min(…):ih*min(…)
).$width:$height
es el ancho y la altura de salidascale
filtro.fuente
-movflags +faststart
al ejemplo de slhck. Permitirá que su video descargado progresivamente comience a reproducirse antes de que se descargue por completo, y también vea la Guía de codificación FFmpeg y x264 y la Guía de codificación FFmpeg y AAC para obtener más instrucciones y ejemplos de codificación.pad=$width:$height:(ow-iw)/2:(oh-ih)/2"
ow-iw
.Me parece que debes hacer esto en tres pasos:
FFmpeg / avconv puede escalar / rellenar con filtros de video en un solo paso, transcodificando solo una vez. Por ejemplo, para tomar un video 16: 9, escale el ancho y luego escriba los resultados en un buzón:
... pero para el primer paso (detectar la relación de aspecto y compararlo con el 7: 4 que necesita) deberá usar un script de algún tipo.
... obtendrá la relación de aspecto del video, que se verá como '16: 9 'o' 4: 3 '. En un script bash, usaría algo como:
Obviamente tendrás que adaptarlo a tus necesidades.
fuente