Estoy cansado de ejecutar 8 comandos en paralelo para utilizar completamente la CPU y acelerar las conversiones de video, algo como esto:
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/b.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/c.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/d.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/e.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/f.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/g.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/h.mp4 > /dev/null 2>&1 &
De 2 a 3 de ellos se detienen. ¿Por qué pasó esto? ¿Es esta una limitación de FFmpeg? He intentado esto en máquinas de 16 y 4 núcleos, EC2 c1.xlarge y cc2.8xlarge. Mismo comportamiento. He intentado comandos complicados y simples, aún iguales, 2 o 3 se detienen.
ffmpeg
multi-core
multi-processor
d33pika
fuente
fuente
Respuestas:
Al responder la pregunta original, en cuanto a por qué algunos de los trabajos se detienen, ffmpeg en la línea de comando es interactivo. Está constantemente leyendo la entrada en la línea de comando. Para que pueda ejecutarlos todos en segundo plano, debe cambiar esto:
a esto:
la adición de
</dev/null
le dice a ffmpeg que no busque entradas, y todos sus trabajos deberían ejecutarse en segundo plano.fuente
> /dev/null 2>/dev/null
.Solo piense en su comando: una forma mucho más fácil de martillar la máquina con un solo comando es concatenar todo en una sola línea:
Es posible que desee agregar (según su versión de ffmpeg) un indicador para indicarle al servidor que use todos los procesadores disponibles
Para referencia: http://ffmpeg.org/trac/ffmpeg/wiki/Creating%20multiple%20outputs
fuente