21 votes

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

J'ai essayé de lancer 8 commandes en parallèle pour utiliser pleinement le CPU 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 s'arrêtent. Pourquoi cela arrive-t-il ? Est-ce une limitation de FFmpeg ? J'ai essayé sur des machines à 16 cœurs et 4 cœurs, des EC2 c1.xlarge et cc2.8xlarge. Même comportement. J'ai essayé des commandes complexes et simples, même résultat, 2 ou 3 s'arrêtent.

25voto

DingoNV Points 351

En répondant à la question originale, pourquoi certains des travaux s'arrêtent, ffmpeg en ligne de commande est interactif. Il lit constamment des entrées sur la ligne de commande. Pour que vous puissiez exécuter tous ces travaux en arrière-plan, vous devriez changer ceci :

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

à ceci :

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

l'ajout de indique à ffmpeg de ne pas chercher d'entrée, et tous vos travaux devraient s'exécuter en arrière-plan.

8voto

Gryff Points 21

Juste une réflexion sur votre commande : une manière beaucoup plus simple de marteler la machine avec une seule commande est de 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 (selon 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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X