Wie bringe ich Automator dazu, Bilder mit ImageMagick in einem Befehlsskript zu verarbeiten?

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?

Vielleicht ist es ein PATH-Problem. Funktioniert es, wenn Sie es compositedurch seinen absoluten Pfad ersetzen (kann durch Ausführen which compositeauf dem Terminal ermittelt werden)?
In der folgenden Codezeile scheint ein Anführungszeichen zu fehlen: Prozentsatz=$(scale=2; $Prozent+$Satz"|bc)
Danke für den Hinweis, Kaydell. Es fehlte auch sein Echo.
Composite ist korrekt installiert. Ich habe das ImageMagick-Installationsprogramm von Cactus Labs verwendet, das ImageMagick installiert und dem Pfad hinzufügt. Sehr praktisch.
$fHat die Umstellung funktioniert foder war das nur ein Übertragungsfehler? Auch Ihre Groß- und Kleinschreibung fileNameist inkonsistent.
Übertragungsfehler, beides.
OK. Ich habe das obige Skript in ein Shell-Skript umgewandelt. Benannte es fader.command, gab ihm die Ausführungsberechtigung und führte es als ./fader.command IMG*.jpg aus. Klappt wunderbar. Warum funktioniert es in Automator nicht? Hat jemand Ideen? Ich würde es gerne in Automator zum Laufen bringen, da dies ein einfacher Weg zu einer benutzerfreundlichen Pfadauswahl ist. Eher ärgerlich, dass es nicht „einfach funktioniert“. Nebenbei habe ich auch versucht, #!/bin/bash zum Automator-Skript hinzuzufügen. Hatte keine Wirkung. Verblüfft.

Antworten (2)

Ich würde das Ganze einfach in der Befehlszeile als Shell-Skript ausführen, anstatt es mit Automator zu starten. Setzen Sie #!/bin/bashals erste Zeile und führen Sie sie als aus

myscript.sh image*.png

Wo image*.pngist 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 $fdurch for f. for $f in aa; do :; doneführt zu einem Fehler wie `$f': not a valid identifier.

Auch wenn compositesich nicht auf dem Pfad befindet, geben Sie den vollständigen Pfad dazu an (wie /usr/local/bin/composite).