Das HandbrakeCLI-bash-Batch-Skript transkodiert nur eine Datei und wird beendet
722
David Okwii
Ich schreibe ein bash-Skript, das Webm-Dateien durchläuft und sie mithilfe von HandbrakeCLI nach .mp4 transkodiert. Zu meiner Überraschung transkodiert Handbrake jedoch nur eine Datei anstelle von allen. Hier ist mein Skript.
#!/bin/bash trxcode(){ fp=$1 new_fp=$2 HandBrakeCLI --preset "Normal" -i "$fp" -o "$new_fp" } find ~/Videos/zik_vids/ -iname "*.webm" -type f | while read fp; do fd=$(dirname "$") fn=$(basename "$") f="$"; new_fp="$/$.mp4" trxcode "$fp" "$new_fp" done
Handbremse sagt "Encode done!
Handbrake ist beendet worden. "
Das einzige, was ich falsch sehe, sind die Zuweisungen in `trxcode ()`: Diese sollten in Anführungszeichen gesetzt werden (`fp =" $ 1 "; new_fp =" $ 2 "`); Sie schlagen fehl, wenn in beiden Dateipfaden Leerzeichen vorhanden sind.
AFH vor 7 Jahren
0
Ich habe das Skript erneut ausgeführt, es wird nur beendet, nachdem der erste Codierungsauftrag abgeschlossen ist. Es geht nicht weiter mit der Schleife
David Okwii vor 7 Jahren
0
Was passiert, wenn Sie `echo` vor dem` HandBrakeCLI'-Aufruf platzieren? Bekommen Sie mehr als einen Befehl in der Liste? Wie wäre es, wenn Sie es vor dem 'trxcode'-Aufruf platzieren? Macht das einen Unterschied?
AFH vor 7 Jahren
0
Tatsächlich eine leere Zeichenfolge mit einem Echo versehen und wie eine Handbremse wie "" | | HandbrakeCLI --preset "Normal" -i "$ fp" -o "$ new_fp" löst das Problem. Ich habe gelesen, dass es etwas mit Handbrake und der While-Schleife zu tun hat, die in der Standardeingabe in Konflikt stehen. Ich verstehe das nicht wirklich, aber es löst jetzt mein Problem.
David Okwii vor 7 Jahren
0
OK. Ohne zu wissen, was Handbrake macht, hätte ich nie gedacht, dass es aus der Standardeingabe liest, wenn ein '-i'-Parameter angegeben wird. Wenn Sie die Verwendung der Standardeingabe ganz vermeiden möchten, können Sie die Handhabung für jede Datei in ein Skript (z. B. `CallHB`) einfügen und` find ... -exec CallHB {} \; `verwenden. Normalerweise bevorzuge ich diese Art der Verarbeitung der "find" -Ausgabe, anstatt zu "while ..." zu leiten, obwohl es einige Fälle gibt, in denen letztere bevorzugt werden kann.
AFH vor 7 Jahren
0
0 Antworten auf die Frage
Verwandte Probleme
-
1
Pausieren Sie alle Aufgaben außer x CPU-intensiven Aufgaben
-
10
Wie kann ich die Bash-Historie durchsuchen und einen Befehl erneut ausführen?
-
2
Kann die Ausgabe eines Befehls an zwei andere Befehle weitergeleitet werden?
-
8
Benennen Sie eine Gruppe von Dateien mit einem Befehl um
-
2
Warum aktualisiert sich mein Pfad nicht * jetzt *?
-
5
Wie entferne ich einen symbolischen Link zu einem Verzeichnis?
-
8
Rette mich vor dem Kauderwelsch
-
4
Verbinden Sie zwei h.264-Filmdateien und fügen Sie Kapitel zusammen.
-
9
Wie kann ich jeder Zeile einer Textdatei eine Zeilennummer und einen Tabulator voranstellen?
-
1
Wann sollte ich Konfigurationen in .bashrc vs einfügen? .bash_profile?