Я устал выполнять 8 команд параллельно, чтобы полностью использовать процессор и ускорить преобразование видео, что-то вроде этого:
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 до 3 из них останавливаются. Почему это происходит? Это ограничение FFmpeg? Я пробовал это на 16-ядерных и 4-ядерных машинах, EC2 c1.xlarge и cc2.8xlarge. Такое же поведение Я пробовал сложные команды и простые, все те же, 2 или 3 останавливаются.
ffmpeg
multi-core
multi-processor
d33pika
источник
источник
Ответы:
Отвечая на первоначальный вопрос о том, почему некоторые задания прекращаются, ffmpeg в командной строке является интерактивным. Это постоянно чтение ввода в командной строке. Чтобы запустить все из них в фоновом режиме, вы должны изменить это:
к этому:
добавление
</dev/null
ffmpeg запрещает искать ввод, и все ваши задания должны выполняться в фоновом режиме.источник
> /dev/null 2>/dev/null
.Просто подумайте о вашей команде: гораздо более простой способ разбить машину одной командой - объединить все в одну строку:
Возможно, вы захотите добавить (в зависимости от вашей версии ffmpeg) флаг, чтобы указать серверу использовать все доступные процессоры
Для справки: http://ffmpeg.org/trac/ffmpeg/wiki/Creating%20multiple%20outputs
источник