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. "

0
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