Cambie el tamaño de los videos con diferentes anchos a una altura fija conservando la relación de aspecto con ffmpeg

17

Me gustaría convertir muchos archivos de video a video flash para el sitio web de nuestra empresa. Tengo el requisito de que todos los videos deben estar en formato 360p, por lo que su tamaño sería Nx360.

FFMpeg usos -s argumento para especificar la resolución de destino como W x H . No sé W idth, ya que depende de la relación de aspecto archivo de origen. Si la fuente es 640x480, el objetivo será 480x360. Si la fuente es 848x480, el objetivo será 636x360.

¿Hay alguna manera de hacerlo con algún interruptor de ffmpeg? ¿Que conservará la relación de aspecto y solo especificaré la altura del video objetivo?

Podría resolverlo fácilmente haciendo un programa que inicie ffprobe para obtener el tamaño del video fuente, calcular la relación de aspecto y luego calcular un nuevo ancho.

Axarydax
fuente

Respuestas:

15

Podría intentar agregar este filtro de video:

-vf "scale=-1:360" 

-1 en este caso significa variable / desconocido, por lo tanto, este filtro cambia el tamaño del video para preservar la relación de aspecto de la entrada, manteniendo 360 como la altura.

Para mí, esto logró el mismo resultado que buscas.

usuario65600
fuente
6

Todavía no tengo suficientes puntos para comentar una respuesta existente, pero esto sigue a la respuesta del usuario 65600 y va más allá cuando los códecs específicos requieren un ancho / alto que sea divisible por 2 (por ejemplo, libx264)

Cuando usa -1 (variable / desconocido), puede devolver un número impar. Para garantizar un # par, debe usar algo como trunc(ow/a/2)*2, que calculará automáticamente el # par más cercano al tiempo que conserva la relación de aspecto.

-vf "scale=trunc(ow/a/2)*2:360"

Fuente: https://ffmpeg.org/trac/ffmpeg/ticket/309

Toland H
fuente
3

-vf "scale=trunc(ow/a/2)*2:360" no funciona debido al error de "autorreferencia".

En cambio, lo siguiente funciona:

-vf "escala = -1: 360, escala = trunc (iw / 2) * 2: 360"

Por lo tanto, la auto-referenciación se evita mediante dos escalas consecutivas, y el redondeo se realiza en el segundo paso. Lindo, ¿no es así? :)

ddystill
fuente
Filtro simple 'escala = -1: 480; scale = trunc (iw / 2) * 2: 480 'no tiene exactamente una entrada y salida. ¡Error al abrir los filtros!
digitalPBK