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.
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.Fuente: https://ffmpeg.org/trac/ffmpeg/ticket/309
fuente
-vf "scale=trunc(ow/a/2)*2:360"
no funciona debido al error de "autorreferencia".En cambio, lo siguiente funciona:
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í? :)
fuente