Eu cansei de executar 8 comandos em paralelo para utilizar totalmente a CPU e acelerar as conversões de vídeo, algo como isto:
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 &
2 a 3 deles são parados. Por que isso acontece? Isso é uma limitação do FFmpeg? Eu tentei isso em máquinas de 16 e 4 núcleos, EC2 c1.xlarge e cc2.8xlarge. Mesmo comportamento. Eu tentei comandos complicados e simples, mesmo assim, 2 ou 3 são interrompidos.
ffmpeg
multi-core
multi-processor
d33pika
fonte
fonte
Respostas:
Ao responder à pergunta original, por que alguns dos trabalhos são interrompidos, o ffmpeg na linha de comando é interativo. Ele está constantemente lendo as entradas na linha de comando. Para executar todos eles em segundo plano, você deve alterar isso:
para isso:
a adição de
</dev/null
instrui o ffmpeg a não procurar informações e todos os seus trabalhos devem ser executados em segundo plano.fonte
> /dev/null 2>/dev/null
.Apenas um pensamento sobre o seu comando: uma maneira muito mais fácil de martelar a máquina com um único comando é concatenar tudo em uma única linha:
Você pode adicionar (dependendo da versão do ffmpeg) um sinalizador para informar ao servidor para usar todos os processadores disponíveis
Para referência: http://ffmpeg.org/trac/ffmpeg/wiki/Creating%20multiple%20outputs
fonte