¿Cómo puedo hacer que un servicio de Automator ejecute un script de shell y muestre el resultado?

Estoy usando Automator para ejecutar un script de shell (transcodificación ffmpeg a h264) como un 'Servicio', de modo que puedo hacer clic derecho en el archivo .mov de alta resolución y seleccionar el servicio. Funciona bien, pero como es ffmpeg, sería bueno ver el resultado en una ventana de Terminal. ¿Hay alguna manera de ver la salida en tiempo real?

No debería hacer una diferencia, pero aquí está el script por si acaso:

for f in "$@"
do
/usr/local/bin/ffmpeg -i "$f" -c:v libx264 -vf yadif -pix_fmt yuv420p -crf 21 -preset slow -movflags faststart -c:a copy ${f%.*}_h264_yadif.mov
done

Respuestas (3)

Este AppleScript abrirá una ventana de Terminal con el comando que especificó:

en ejecución {entrada, parámetros}
    Dile a la aplicación "Terminal"
        activar
        establecer cadena de archivos en ""
        repetir con file_ en la entrada
            establezca filesString en filesString & " " & forma citada de (ruta POSIX de file_)
        terminar repetir
        hacer script "for f in" & filesString & "; hacer
/usr/local/bin/ffmpeg -i \"$f\" -c:v libx264 -vf yadif -pix_fmt yuv420p -crf 21 -preset lento -movflags faststart -c:a copy ${f%.*}_h264_yadif. mover
hecho"
    final decir
    entrada de retorno
carrera final

Cree una acción "Ejecutar AppleScript" en Automator y péguela allí.

Funciona de maravilla, muchas gracias. Sabía que probablemente involucraría un AppleScript, pero no estaba seguro del vudú para obtener la ruta del archivo al script de Shell.

Una solución agradable y limpia es mostrar el mensaje a través del Centro de notificaciones. Simplemente ejecute el siguiente comando de terminal en su secuencia de comandos.

osascript -e 'display notification "All files converted" with title "ffmpeg converter"'

El comando 'osascript' ejecuta cualquier AppleScript desde la terminal, 'mostrar notificación' muestra una notificación agradable.

ingrese la descripción de la imagen aquí


También puede usar 'mostrar alerta'. No tiene limitación de longitud de mensaje y es fácil agregarle un OKbotón.

osascript -e 'set alertResult to display alert "Bad news :( Error converting your video file." buttons {"OK"} as warning'

ingrese la descripción de la imagen aquí

Aquí está la referencia de los comandos de Apple Script. Busque 'mostrar notificación' y 'mostrar alerta' para obtener más información.

Gracias, eso es útil para cosas generales, pero realmente me gustaría ver la salida completa de ffmpeg. También tengo un servicio similar que sincroniza un directorio con mi copia de seguridad S3 a través de s3cmd. En ambos casos, la salida completa es esencial para manejar los errores correctamente...

Aquí hay una solución simple que funcionó, que muestra el resultado del comando una vez que finaliza:

  1. Pase la salida de una acción Ejecutar script de Shell a Establecer valor de variable
  2. Utilice esa variable para, por ejemplo, mostrar una notificación.

Por ejemplo, con el test.pyscript de Python, todo lo que estoy haciendo es imprimir los argumentos pasados ​​("Ejecutando un script con..."), así que cuando lo ejecuto, después de terminar, muestra: