15

Я устал выполнять 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 останавливаются.

2 ответа2

19

Отвечая на первоначальный вопрос о том, почему некоторые задания прекращаются, ffmpeg в командной строке является интерактивным. Это постоянно чтение ввода в командной строке. Чтобы запустить все из них в фоновом режиме, вы должны изменить это:

ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 > /dev/null 2>&1 &

к этому:

ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 </dev/null > /dev/null 2>&1 &

добавление </dev/null указывает ffmpeg не искать ввод, и все ваши задания должны выполняться в фоновом режиме.

7

Просто подумайте о вашей команде: гораздо более простой способ разбить машину одной командой - объединить все в одну строку:

ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 \
 -f mp4 /mnt/b.mp4 \
 -f mp4 /mnt/c.mp4 \
 -f mp4 /mnt/d.mp4 \
 -f mp4 /mnt/e.mp4 \
 -f mp4 /mnt/f.mp4 \
 -f mp4 /mnt/g.mp4 \
 -f mp4  /mnt/h.mp4 > /dev/null 2>&1

Возможно, вы захотите добавить (в зависимости от вашей версии ffmpeg) флаг, чтобы указать серверу использовать все доступные процессоры

-threads 0

Для справки: http://ffmpeg.org/trac/ffmpeg/wiki/Creating%20multiple%20outputs

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .