Tworzę obieg pracy Automatora, który używa akcji skryptu powłoki do przetwarzania wybranych obrazów za pomocą polecenia composite imagemagick. Tylko że mam problemy z uruchomieniem. Zgodnie z wynikami, które otrzymuję, gdy uruchamiam przepływ pracy, wszystko działa, ale wiem, że nie wynika to z faktu, że zmiany, których oczekuję w folderze obrazów, nie są obecne. Wiem, że polecenie imagemagick, którego używam, jest prawidłowe, ponieważ działa poprawnie z konsoli. (Powtórzyłem echo komendy złożonej na wyjściu i skopiowałem ją do sesji terminalu. Działa jak urok). BTW: Przepływ pracy dla przetwarzania zanikania filmu, który stworzyłem. Tak, wiem, że mógłbym użyć narzędzi wideo, aby osiągnąć to samo, ale te, do których mam dostęp, mogą podnieść jakość obrazu na wyjściu.
Oto skrypt
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
Na początku myślałem, że przyczyną problemu mogą być spacje na ścieżkach, ale usunąłem tę możliwość, przenosząc pliki do ścieżki bez spacji, ale to nie miało żadnego efektu.
Jestem prawie pewien, że problem jest związany z czymś w poleceniu bash, ale w ogóle nie znam basha, to jest mój pierwszy raz pisanie skryptów poleceń bash, ale mam dużą wiedzę na temat skryptów konsoli Windows i nie miałbym problemów sprawiając, że tam zadziała.
Jeśli błąd w skrypcie nie jest wystarczająco oczywisty, aby go wyłapać, czy ktoś zaproponuje metodę debugowania tego, żebym mógł dowiedzieć się, dlaczego obrazy nie są przetwarzane, mimo że skrypt działa bezbłędnie?
composite
zastąpisz ścieżką bezwzględną (można to ustalić, wykonującwhich composite
na terminalu)?$f
na,f
czy był to tylko błąd transkrypcji? Również twoja kapitalizacjafileName
jest niespójna.Odpowiedzi:
Zrobiłbym to wszystko w wierszu poleceń jako skrypt powłoki zamiast używać Automatora do jego uruchomienia. Wpisz
#!/bin/bash
jako pierwszy wiersz i uruchom go jakomyscript.sh image*.png
gdzie
image*.png
jest twój zestaw plików graficznych, które najwyraźniej wybierasz w Automatorze?Jeśli chcesz uruchomić go na wszystkich plikach w folderze, możesz to również zrobić.
Możesz również przetestować skrypt w automatorze, używając
echo ${f%.*}
samych poleceń.źródło
Wymień
for $f
sięfor f
.for $f in aa; do :; done
powoduje błąd jak`$f': not a valid identifier
.Również jeśli
composite
nie ma na ścieżce, podaj pełną ścieżkę do niej (jak/usr/local/bin/composite
).źródło