Je suis fatigué d'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 sont arrêtés. Pourquoi cela arrive-t-il? S'agit-il d'une limitation FFmpeg? J'ai essayé ceci sur des machines à 16 cœurs et 4 cœurs, 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 s'arrêtent.
ffmpeg
multi-core
multi-processor
d33pika
la source
la source
Réponses:
En répondant à la question d'origine, expliquant pourquoi certaines tâches s'arrêtent, ffmpeg sur la ligne de commande est interactif. Il lit constamment des entrées sur la ligne de commande. Pour que vous puissiez les exécuter tous en arrière-plan, vous devez modifier ceci:
pour ça:
l'ajout de
</dev/null
indique à ffmpeg de ne pas rechercher d'entrée, et tous vos travaux doivent s'exécuter en arrière-plan.la source
> /dev/null 2>/dev/null
.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:
Vous voudrez peut-être ajouter (selon votre version de ffmpeg) un indicateur pour indiquer au serveur d'utiliser tous les processeurs disponibles
Pour référence: http://ffmpeg.org/trac/ffmpeg/wiki/Creating%20multiple%20outputs
la source