web-dev-qa-db-fra.com

Combien d'instances de commandes FFmpeg puis-je exécuter en parallèle?

Je me suis fatigué à exécuter 8 commandes en parallèle pour utiliser pleinement le processeur et accélérer les conversions vidéo, quelque chose comme ceci:

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 d'entre eux se font arrêter. Pourquoi cela arrive-t-il? Est-ce une limitation de FFmpeg? J'ai essayé ceci sur 16 machines de base et 4 machines de base, EC2 c1.xlarge et cc2.8xlarge. Même comportement. J'ai essayé des commandes compliquées et simples, toujours les mêmes, 2 ou 3 stoppés.

15
d33pika

En répondant à la question initiale, à savoir pourquoi certaines tâches s’arrêtent, ffmpeg sur la ligne de commande est interactif. Il lit constamment les entrées sur la ligne de commande. Pour que vous puissiez tous les exécuter en arrière-plan, vous devriez changer ceci:

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

pour ça:

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

l'ajout de </dev/null indique à ffmpeg de ne pas rechercher les entrées et que tous vos travaux doivent être exécutés en arrière-plan.

19
DingoNV

Juste une pensée sur votre commande: un moyen beaucoup plus facile de marteler la machine avec une seule commande consiste à tout concaténer en une seule ligne:

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

Vous voudrez peut-être ajouter (en fonction de votre version de ffmpeg) un indicateur pour indiquer au serveur d'utiliser tous les processeurs disponibles

-threads 0

Pour référence: http://ffmpeg.org/trac/ffmpeg/wiki/Creating%20multiple%20outputs

7
NublaII