![Wie führe ich eine On-the-Fly-FFMPEG-Konvertierung (Pipe) parallel aus?](https://rvso.com/image/154453/Wie%20f%C3%BChre%20ich%20eine%20On-the-Fly-FFMPEG-Konvertierung%20(Pipe)%20parallel%20aus%3F.png)
Ich möchte folgende Konvertierung durchführen:
for f in *.m4a; do
( ffmpeg -i "$f" -f wav - | opusenc --bitrate 38 - "${f%.m4a}.opus" ) &
done
Ich weiß, ich könnte es gebrauchenffmpegdirekt in Opus konvertieren, aber ich möchte verwendenAbonnierenin diesem Fall, da es eine neuere Version ist.
Wenn ich opusenc nach ffmpeg ausführe, funktioniert es einwandfrei, aber wenn ich versuche, das oben genannte auszuführen, erhalte ich nur eine Menge Stopped
und nichts passiert.
Antwort1
Wenn Sie GNU Parallel verwenden, funktioniert dies:
parallel 'ffmpeg -i {} -f wav - | opusenc --bitrate 38 - {.}.opus' ::: *m4a
Vielleicht ist das gut genug?
Es bietet den zusätzlichen Vorteil, dass nur ein Job pro CPU-Thread ausgeführt wird, sodass Ihr Computer auch bei 1.000 Dateien nicht überlastet wird.
Antwort2
Ich habe mir diese Konstruktion ausgedacht (... &)
, bin mir aber nicht sicher, warum sie funktioniert:
for f in R*.mp3
do
(time ffmpeg -loglevel 0 -i "$f" -ac 1 -y "${f%mp3}new.mp3" && date && ls -l "$f" &)
done
Mit 4 Dateien:
real 0m0.784s
user 0m0.795s
sys 0m0.048s
So 10 Sep 2023 16:36:43 UTC
-rw-r--r-- 1 root root 1363436 10.Sep 10:04 REC-005.mp3
real 0m1.037s
user 0m1.064s
sys 0m0.040s
So 10 Sep 2023 16:36:43 UTC
-rw-r--r-- 1 root root 1540076 10.Sep 10:04 REC-003.mp3
real 0m1.822s
user 0m1.882s
sys 0m0.055s
So 10 Sep 2023 16:36:44 UTC
-rw-r--r-- 1 root root 2948588 10.Sep 10:04 REC-002.mp3
real 0m2.196s
user 0m2.253s
sys 0m0.061s
So 10 Sep 2023 16:36:44 UTC
-rw-r--r-- 1 root root 3402476 10.Sep 10:04 REC-004.mp3
Die größte Datei endet zuletzt. Ich habe time
und ein bash- list
. Aber ohne (...&) bekomme ich auch „Gestoppte“ Jobs (mit nicht erweiterten Variablen).