Wie viele Fälle von FFmpeg-Befehlen kann ich parallel ausführen?

25535
d33pika

Ich habe es satt, 8 Befehle parallel auszuführen, um die CPU voll auszulasten und die Konvertierung von Videos zu beschleunigen.

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 bis 3 von ihnen werden gestoppt. Warum passiert das? Ist das eine FFmpeg-Einschränkung? Ich habe dies auf 16 Core- und 4 Core-Rechnern, EC2 c1.xlarge und cc2.8xlarge ausprobiert. Gleiches Verhalten Ich habe komplizierte Befehle ausprobiert und einfache, immer noch gleiche, 2 oder 3 gestoppt.

14
Meines Wissens sollte es in FFmpeg nichts geben, was Sie davon abhält. Könnte ein Shell-Problem sein? slhck vor 11 Jahren 3
Was ist, wenn ich für jeden Befehl unterschiedliche Eingänge habe? Wie kann ich sie unabhängig machen, denn wenn einer aufhört, hören alle auf. Samson vor 10 Jahren 0
Haben Sie Parameter für die Verwendung von Multiprozessoren gefunden ?! Dr.jacky vor 8 Jahren 0
Was meinst du mit "hier aufhören"? bash zeigt sie als pausiert? rogerdpack vor 8 Jahren 0

2 Antworten auf die Frage

18
DingoNV

In answering the original question, as to why some of the jobs stop, ffmpeg on the command line is interactive. It's constantly reading input on the command line. In order for you to run all of them in the background you should change this:

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

to this:

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

the addition of </dev/null tells ffmpeg to not look for input, and all of your jobs should run in the background.

Was ist das: 2> & 1 Dr.jacky vor 8 Jahren 1
Vielen Dank! Ich hatte das gleiche Problem und das funktionierte wie ein Zauber, bitte akzeptieren Sie! fr_andres vor 6 Jahren 0
@ Mr.Hyde Verspätet zu der Party, die ich kenne, aber 2> & 1 sagt dem Fehlerstrom, dass er zur selben Stelle wie der stout-Strom gehen soll - also / dev / null. Es ist die Abkürzung für `> / dev / null 2> / dev / null`. berry120 vor 6 Jahren 2
7
NublaII

Just a thought on your command: a much easier way of hammering the machine with a single command is concatenating everything into a single line:

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 

You might want to add (depending on your ffmpeg version) a flag to tell the server to use all available processors

-threads 0 

For reference: http://ffmpeg.org/trac/ffmpeg/wiki/Creating%20multiple%20outputs

Ich habe es ausprobiert, es werden nicht alle Prozessoren effizient genutzt. Die Last bleibt bei 20-30%, die Hyperthreads werden überhaupt nicht verwendet. d33pika vor 11 Jahren 0
Vielleicht hat es etwas mit EC2-Maschinen zu tun? Ich führe gerade den obigen Befehl auf einer 16-xeon-Kernmaschine mit 16 Ausgängen aus und bekomme Folgendes: [htop screenshot] (http://img841.imageshack.us/img841/6403/ffmpeg.jpg) NublaII vor 11 Jahren 2
Sind Sie auf der neuesten Version von FFmpeg? d33pika vor 11 Jahren 0
@NublaII Was ist> / dev / null 2> & 1!? Dr.jacky vor 8 Jahren 0
@ Mr.Hyde Sie verbirgt die Standardausgabe vor Ihnen und zeigt Ihnen Fehlerausgaben an. Lesen Sie dies: http://www.xaprb.com/blog/2006/06/06/what-does-devnull-21-mean/ Yuri Sucupira vor 7 Jahren 1