¿Cómo consigo que Automator procese imágenes usando ImageMagick en un script de comando?

Estoy creando un flujo de trabajo de Automator que usa la acción del script de shell para procesar una selección de imágenes con el comando compuesto imagemagick. Solo que tengo problemas para que funcione. De acuerdo con los resultados que obtengo cuando ejecuto el flujo de trabajo, todo funciona, sin embargo, sé que no se debe al hecho de que los cambios que esperaría ver en la carpeta de imágenes no están presentes. Sé que el comando imagemagick que estoy usando es correcto ya que funciona correctamente desde la consola. (Hice eco del comando compuesto en la salida y lo copié en una sesión de Terminal. Funcionó a la perfección). Por cierto: el flujo de trabajo es para procesar un fundido de entrada en una película stop motion que hice. Sí, sé que podría usar herramientas de video para lograr lo mismo, pero a las que tengo acceso arruinan la calidad de la imagen en la salida.

aquí está el guión

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

Al principio pensé que la causa del problema podrían ser los espacios en las rutas, pero eliminé esta posibilidad cambiando los archivos a una ruta sin espacios, pero eso no tuvo ningún efecto.

Estoy casi seguro de que el problema está relacionado con algo en el comando bash, pero no sé bash en absoluto, esta es la primera vez que escribo scripts de comandos bash, pero estoy muy bien informado sobre las secuencias de comandos de la consola de Windows y no tendría ningún problema. hacer que esto funcione allí.

Si el error en la secuencia de comandos no es lo suficientemente obvio como para detectarlo, ¿alguien propondría un método para depurar esto para que pueda averiguar por qué las imágenes no se procesan a pesar de que la secuencia de comandos se ejecuta sin errores?

Tal vez sea un problema de PATH. ¿Funciona cuando reemplaza compositecon su ruta absoluta (se puede determinar ejecutando which compositeen la Terminal)?
Parece que a la siguiente línea de código le faltan las comillas: porcentaje=$(escala=2; $porcentaje+$tasa"|bc)
Gracias por señalar eso, Kaydell. También le faltaba su eco.
El compuesto está instalado correctamente. Usé el instalador ImageMagick de Cactus Labs, que instala ImageMagick y lo agrega a la ruta. Muy útil.
¿Funcionó cambiar $fa fo fue solo un error de transcripción? También su uso de mayúsculas fileNamees inconsistente.
Errores de transcripción, ambos.
DE ACUERDO. Hice el script de arriba en un script de shell. Lo llamó fader.command y le dio permiso de ejecución y lo ejecutó como ./fader.command IMG*.jpg. Funciona de maravilla. Entonces, ¿por qué no funciona en Automator? ¿Alguien tiene alguna idea? Me gustaría que funcione en Automator, ya que es una ruta fácil para la selección de rutas fácil de usar. Bastante molesto que no "simplemente funciona". Aparte, también intenté agregar #!/bin/bash al script de Automator. No tuvo efecto. desanimado.

Respuestas (2)

Simplemente haría todo en la línea de comando como un script de shell en lugar de usar Automator para iniciarlo. Póngalo #!/bin/bashcomo la primera línea y ejecútelo como

myscript.sh image*.png

¿ Dónde image*.pngestá su conjunto de archivos de imagen que aparentemente está seleccionando en Automator?

Si necesita ejecutarlo en todos los archivos de una carpeta, también puede hacerlo.

También puede probar su secuencia de comandos en Automator usando echo ${f%.*}en lugar de los comandos en sí.

Reemplazar for $fcon for f. for $f in aa; do :; doneda como resultado un error como `$f': not a valid identifier.

Además, si compositeno está en la ruta, especifique la ruta completa (como /usr/local/bin/composite).