FFmpeg MP4 a FLV demasiado lento

Estoy convirtiendo archivos .mp4 a .flv usando ffmpeg en centos. ¡Pero el tiempo de conversión es demasiado lento! Se tarda aproximadamente 1,5 horas en convertir un archivo .mp4 de 500 MB en .flv. Estoy usando un linux vps con 2 GB de RAM dedicada.

Estoy usando el siguiente código:

ffmpeg -i source.mp4 -c:v libx264 -ar 22050 -crf 28 destination.flv

¿Hay alguna forma de acortar el tiempo de conversión? Cualquier ayuda/sugerencia será apreciada.

Respuestas (3)

Dado que está utilizando un VPS, esto no es una sorpresa (suponiendo que solo tiene un único núcleo con 1-3 GHz) y no podrá reducir la conversión a unos pocos minutos. Puede intentar usar -c:v libx264 -presets ultrafast, pero supongo que aún le llevará entre 45 y 60 minutos codificar.

Quita también la -crfopción cuando uses un preset (ellos eligen un valor por defecto que produce un muy buen balance entre velocidad y calidad, solo recomiendo modificar ese valor cuando sepas lo que realmente hace)

Tenga en cuenta que la calidad que obtiene de ese ajuste preestablecido no es exactamente excelente. Si NECESITA una velocidad de codificación rápida sobre todo, hágalo, si no es TAN importante, le sugiero que use fastoder fasteren lugar del ultrafastpreestablecido.

Hola, esto resolvió el problema del tiempo. Sin embargo, el archivo .flv que se genera después de la conversión tiene aproximadamente el doble del tamaño del archivo .mp4 original en el modo "ultrarrápido" y el triple del tamaño del archivo .mp4 original en el modo "rápido". :(
Esa es una de las compensaciones que obtiene por la conversión rápida, no puede tener archivos pequeños que se vean bien y una buena compresión. En ultrarrápido, también usa una tasa de bits más pequeña, lo que explicaría el tamaño más pequeño. -crf 28 lo que usaste antes es una compresión bastante agresiva. Normalmente, usa algo alrededor de 20-22 cuando codifica con calidad constante.
¿Por qué recomienda eliminar -crfcuando se usa un -preset? Si se elimina, se utilizará el valor predeterminado de -crf 23.
Porque los presets funcionan muy bien con los ajustes que proporcionan en ese caso crf 23. Apenas hay razón para modificar ese valor. La compresión aumentará con un preajuste más alto aunque el valor crf sea el mismo para todos los preajustes. Asumo conocimientos de aficionado aquí, si quiere hacer más, no tendrá que hacer preguntas básicas, ya que descubrirá muy rápidamente cómo funcionan realmente estas configuraciones (básicas) y hará sus propias configuraciones ajustadas a su contenido.
editó la pregunta para reflejar eso

Un archivo MP4 normalmente contiene video H.264 y audio AAC, ambos compatibles con el contenedor FLV. Simplemente puede copiar sobre las secuencias:

ffmpeg -i input.mp4 -c copy output.flv

Dado que está copiando las secuencias, esto será lo más instantáneo posible y no provocará ninguna pérdida de calidad.

La RAM no es la parte crítica de una transcodificación, la CPU sí lo es. Dado que funciona de flujo a flujo, en realidad se requiere una cantidad mínima de memoria si el codificador funciona de manera eficiente. La velocidad de la memoria es importante para el espacio libre del procesador, pero no tanto la cantidad.

La CPU (o GPU si usa codificación optimizada para GPU) es lo que hace todo el trabajo y lo más probable es que su VPS no tenga suficiente potencia de procesamiento. La codificación de video es extremadamente intensiva. Es una de las principales razones por las que las estaciones de trabajo de edición de video tienden a ser computadoras grandes y potentes, a menudo con múltiples tarjetas gráficas para distribuir la carga al procesamiento de GPU o periféricos de codificación de hardware dedicados.

Dependiendo de la duración del video representado por ese archivo de 500 mb, esto no es nada sorprendente. Incluso en mi i7 de cuatro núcleos a 2,9 ghz, todavía se necesita aproximadamente de 2 a 3 veces la duración del video original para completar una codificación VBR de 2 pasos de alta calidad (y los 8 núcleos virtuales están al 99 % sin parar todo el tiempo). Es posible que no esté haciendo dos pases, pero también es probable que no tenga tanta potencia de procesamiento.

Hola @AJ Henderson, gracias por la información detallada. Realmente lo aprecio.