Die While-Schleife von Fffmpeg wird beendet, bevor alle Dateien verarbeitet wurden

Die While-Schleife von Fffmpeg wird beendet, bevor alle Dateien verarbeitet wurden

Ich habe eine Liste mit 3.000 URLs in einer Textdatei namens „downloadmp3.txt“ im folgenden Format:

url1,filename1
url2,filename2
...
url3000,filename3000

Ich habe den folgenden Code unter Verwendung von Codefragmenten geschrieben, die ich hier gefunden habe:

while read p; do

a=$( echo $p | cut -d',' -f1 )
b=$( echo $p | cut -d',' -f2 )

ffmpeg -nostdin -loglevel quiet -stats -i ${a} ${b}.mp3 &

done <downloadmp3.txt

Mein Problem ist, dass mein Skript etwa 500 der 3.000 MP3s herunterlädt (einige vollständig, andere teilweise) und dann einfach aufhört. Ich bin für jeden Ratschlag dankbar, was ich ändern sollte.

Danke!

Antwort1

Sie haben keine Protokolle angezeigt, die auf das zugrunde liegende Problem hinweisen würden, aber Sie starten im Wesentlichen 3000 Prozesse gleichzeitig, was unerwartete Folgen haben kann (z. B. dass der Remote-Server die Verbindung beendet). Da der &Job in den Hintergrund gestellt wird, sollte die Schleife ziemlich schnell beendet werden, sobald alle ffmpegProzesse hochgefahren sind, aber dann laufen 3000 Jobs …

Ich würde stattdessen empfehlen,GNUparallelherunterladenNSie können mehrere Dateien gleichzeitig speichern.

parallel --dry-run --colsep ',' ffmpeg -nostdin -loglevel error -stats -i {1} -c copy {2}.mp3 :::: downloadmp3.txt

Dadurch wird die Textdatei gelesen und jede Zeile verarbeitet, wobei die Spalten durch aufgeteilt werden ,. Sie können die Spaltenwerte dann als {1}, {2}, usw. verwenden.

Es würden die folgenden Befehle parallel ausgeführt, mit höchstensNJobs gleichzeitig ausgeführt werden. StandardmäßigNist gleich der Anzahl der CPU-Kerne:

ffmpeg -nostdin -loglevel error -stats -i url1 -c copy filename1.mp3
ffmpeg -nostdin -loglevel error -stats -i url2 -c copy filename2.mp3
ffmpeg -nostdin -loglevel error -stats -i url3000 -c copy filename3000.mp3

Entfernen Sie das --dry-run, wenn das Gewünschte gedruckt wird.

Sie können hinzufügen, --joblog jobs.txtdass eine Protokolldatei erstellt wird. Außerdem können Sie hinzufügen --etaoder --progressausdrucken, um Schätzungen darüber abzugeben, wann die Jobs abgeschlossen sein werden. Die Anzahl paralleler Jobs kann mit eingestellt werden -j.

Beachten Sie, dass ich hinzugefügt habe, -c copyda Sie den Audiostream normalerweise nicht neu kodieren möchten, wenn die URL bereits auf eine vorhandene MP3-Datei verweist. Wenn Ihre Eingabe nicht MP3 ist, sollten Sie das „noch einmal“ vielleicht weglassen . Und ich habe es in -c copygeändert, da Sie wahrscheinlich möchten, dass Fehler angezeigt werden.quieterror

verwandte Informationen