Ich erstelle einen Automator-Workflow, der die Shell-Skriptaktion verwendet, um eine Auswahl von Bildern mit dem Befehl imagemagick composite zu verarbeiten. Nur habe ich Probleme, es zum Laufen zu bringen. Gemäß den Ergebnissen, die ich beim Ausführen des Workflows erhalte, funktioniert alles, aber ich weiß, dass dies nicht daran liegt, dass die Änderungen, die ich im Bildordner erwarten würde, nicht vorhanden sind. Ich weiß, dass der von mir verwendete imagemagick-Befehl korrekt ist, da er von der Konsole aus korrekt funktioniert. (Ich habe den zusammengesetzten Befehl an die Ausgabe zurückgegeben und in eine Terminalsitzung kopiert. Lief wie ein Zauber). Übrigens: Der Workflow ist für die Verarbeitung einer Einblendung in einem Stop-Motion-Film, den ich gemacht habe. Ja, ich weiß, ich könnte Video-Tools verwenden, um dasselbe zu erreichen, aber die, auf die ich Zugriff habe, vermasseln die Bildqualität bei der Ausgabe.
Hier ist das Skript
imagesCount=$#
rate=$(echo "scale=2; 100/$imagesCount"|bc)
percentage=$rate
for f in "$@"; do
fileName=${f%.*}
composite -blend "$percentage" -size 1280x720 "$f" xc:black -alpha Set "$fileName-1.jpg"
percentage=$(echo "scale=2; $percentage+$rate"|bc)
done
Zuerst dachte ich, die Ursache des Problems könnten Leerzeichen in den Pfaden sein, aber ich habe diese Möglichkeit beseitigt, indem ich die Dateien in einen Pfad ohne Leerzeichen verschoben habe, aber das hatte keine Auswirkung.
Ich bin mir fast sicher, dass das Problem mit etwas im Bash-Befehl zusammenhängt, aber ich kenne Bash überhaupt nicht. Dies ist das erste Mal, dass ich Bash-Befehlsskripts schreibe, aber ich kenne mich mit Windows-Konsolenskripten sehr gut aus und hätte keine Probleme damit das dort funktioniert.
Wenn der Fehler im Skript nicht offensichtlich genug ist, um ihn abzufangen, würde jemand eine Methode zum Debuggen vorschlagen, damit ich herausfinden kann, warum die Bilder nicht verarbeitet werden, obwohl das Skript ohne Fehler ausgeführt wird?
Ich würde das Ganze einfach in der Befehlszeile als Shell-Skript ausführen, anstatt es mit Automator zu starten. Setzen Sie #!/bin/bash
als erste Zeile und führen Sie sie als aus
myscript.sh image*.png
Wo image*.png
ist Ihr Satz von Bilddateien, die Sie anscheinend in Automator auswählen?
Wenn Sie es für alle Dateien in einem Ordner ausführen müssen, können Sie dies auch tun.
Sie können Ihr Skript auch in Automator testen, indem Sie echo ${f%.*}
anstelle der Befehle selbst verwenden.
Ersetzen Sie for $f
durch for f
. for $f in aa; do :; done
führt zu einem Fehler wie `$f': not a valid identifier
.
Auch wenn composite
sich nicht auf dem Pfad befindet, geben Sie den vollständigen Pfad dazu an (wie /usr/local/bin/composite
).
Perzival Odysseus
composite
durch seinen absoluten Pfad ersetzen (kann durch Ausführenwhich composite
auf dem Terminal ermittelt werden)?Kaydell
Greg
Greg
Beroe
$f
Hat die Umstellung funktioniertf
oder war das nur ein Übertragungsfehler? Auch Ihre Groß- und KleinschreibungfileName
ist inkonsistent.Greg
Greg