avconv auf mehreren Threads

9

Ist es möglich, Jobs auf mehreren Prozessoren oder Threads auszuführen, um avconv zu beschleunigen?
Ist eine Funktion in Bearbeitung, wenn nicht, frage ich mich warum?

Shubham Chaudhary
quelle

Antworten:

11

Sie sind nach der -threads Option von avconv. Die sicherste Einstellung wäre:

 -threads auto

Sie können dort aber auch eine Ganzzahl festlegen, wenn Sie ein wenig experimentieren möchten. Ein modernes FFmpeg (jetzt der Standard in Ubuntu) legt dies auto standardmäßig fest, wie in diesem Abschnitt der 'ffmpeg-all'-Manpages gezeigt:

threads integer (decoding/encoding,video)

Set the number of threads to be used, in case the selected
codec implementation supports multi-threading.

  Possible values:

     auto, 0
     automatically select the number of threads to set

 Default value is auto.

Anmerkung 2 wichtige Punkte:

  1. Diese Einstellung wird nur wirksam, wenn der ausgewählte Codec Multithreading unterstützt
  2. Es ist möglich, die Thread-Anzahl für einzelne Streams festzulegen, anstatt einfach eine globale Thread-Einstellung zu versuchen
andrew.46
quelle
1
Korrigieren Sie mich, wenn Sie eine gegenteilige Quelle haben, aber ich habe den Eindruck, dass Avconv und avplay weiterhin standardmäßig -threads auto verwenden, sofern nicht anders angegeben. Der Systemmonitor scheint dies zu sichern.
Elder Geek
1
Ich glaube, dass es vom Codec abhängt, der für die Transcodierung verwendet wird. Dies könnte formal getestet werden, was sicherlich zu einem interessanten Test führen würde. Informationen, die ich online zu diesem Thema finden konnte, sind nicht besonders hilfreich. Ein weiteres Problem wäre die Version von FFmpeg, die verwendet wird. Die Thread-Optionen wurden in älteren Versionen anders verwendet ...
andrew.46
1
Ja. FFmpeg und avconv sind seit der Gabelung in etwas andere Richtungen gegangen. Weitere Untersuchungen haben ergeben, dass -threads auto in avconv die Standardeinstellung ist, wenn Sie eine der Voreinstellungen in der Befehlszeile verwenden.
Elder Geek
3

Wenn Sie viele Dateien mit Audio transkodieren, sollten Sie GNU Parallel verwenden. Es wird eine Liste von Dateien als Eingabe verwendet und diese basierend auf der Anzahl der Kerne in Ihrem System parallel verarbeitet. Hier ist zum Beispiel ein Bash-Beispiel, das Musik parallel mit ffmpeg in das Opus-Audioformat konvertiert.

find ./* -depth -type f -name \*.ogg -o -name \*.flac -o -name \*.m4a -o -name \*.mp3 -o -name \*.ogg | parallel -j+0 --gnu nice -n 19 ffmpeg -i "{}" -acodec libopus "{.}.opus" -loglevel quiet
mmstick
quelle