0 votos

Escribir en el Terminal funciona, AppleScript funciona parcialmente

Lo que intento conseguir:

  1. Hacer clic en un enlace de YouTube en una aplicación
  2. Esta URL es utilizada por mi youtube-dl script para descargar el vídeo
  3. youtube-dl está configurado para descargar el vídeo y el audio de mayor calidad, y luego utilizar ffmpeg para combinarlos en un solo archivo

Lo que tengo hasta ahora:

Yo uso Finicky como mi navegador por defecto. Esto me permite controlar qué navegadores abren ciertos enlaces en función de las reglas que escribo para él. El resumen de la herramienta es que detecta los enlaces de YouTube, los convierte de su forma habitual (por ejemplo https://www.youtube.com/watch?v=XxXxXxXXX_X ) a la forma abreviada y fácil de compartir (por ejemplo https://youtu.be/XxXxXxXXX_X ), y luego lo envía a un AppleScript.

El AppleScript se guarda como una aplicación y está abajo.

#!/bin/zsh
on open location input
    do shell script "youtube-dl  " & input
end open location

Esto ejecuta el shell script youtube-dl https://youtu.be/XxXxXxXXX_X . Cuando escribo este comando exacto en Terminal todo funciona perfectamente: youtube-dl hace lo suyo, incluyendo hacer algo con ffmpeg para combinar los archivos descargados. Sin embargo, cuando este AppleScript se ejecuta es como si ffmpeg no estuviera involucrado. Obtengo un archivo de vídeo y un archivo de audio.

Creo que mi problema está en mi AppleScript, pero se me va la pinza con él. ¿Qué puedo hacer para que mi AppleScript ejecute las cosas como se ejecutan en la Terminal?

5voto

Wowfunhappy Puntos 33

¿Qué puedo hacer para que mi AppleScript se ejecute igual que en la Terminal?

Bueno, podrías tell la aplicación Terminal para ejecutar su comando:

tell application "Terminal" to do script "youtube-dl  " & input

¡Pero, no recomiendo esta ruta, porque realmente abrirá una ventana de Terminal!

Hay toda una serie de diferencias entre do shell script y escribiendo comandos en el Terminal. Para empezar, do shell script Los comandos se ejecutan a través de sh en lugar de los más avanzados bash o zsh (Y su línea "#!/bin/zsh" al principio no tendrá ningún efecto en un Applescript).

En cuanto a su problema real, parece que youtube-dl no puede encontrar su copia de ffmpeg-probablemente porque otra diferencia entre la aplicación Terminal y do shell script es que su PATH está configurado de forma diferente. Intente especificar la ubicación de su binario ffmpeg con la función de youtube-dl --ffmpeg-location bandera.

Si ayuda a tener una referencia para mirar, aquí hay un Applescript que uso para descargar videos de mi navegador web con youtube-dl. Ten en cuenta que he estado retocando esto durante muchos años, por lo que ha acumulado un montón de comprobación de errores, y código para la compatibilidad con diferentes navegadores. ¡No te sientas intimidado! https://gist.github.com/Wowfunhappy/c2c8fc097a8b4f47430811fc1d0da041

3voto

Steve Evans Puntos 155

osascript

#!/usr/bin/osascript
on open location input
    do shell script "/usr/local/bin/youtube-dl  " & quoted form of input
end open location

Si se ejecuta como un script, el hash-bang de su script debe ser la ruta de acceso a osascript . Este es el proceso que ejecuta AppleScript (un lenguaje de arquitectura de scripting abierto) en MacOS.

Citar la URL pasó a youtube-dl para que aparezca como un único argumento para la herramienta.

Utilice la ruta completa para youtube-dl para asegurarse de que se encuentra la herramienta. Utilice which youtube-dl en el Terminal para encontrar la ruta.

Argumentos de la línea de comandos

Si al AppleScript se le pasa la URL como primer argumento de la línea de comandos, utilizar el argv manipulador :

#!/usr/bin/osascript
on run argv
   do shell shell script "/usr/local/bin/youtube-dl " & quoted form of (item 1 of argv)
end run

Si este es el caso, considere eliminar el script por completo y pasar el argumento directamente a youtube-dl .

Post-tratamiento

youtube-dl tiene la capacidad de descargas de post-proceso . Se puede controlar mediante un archivo de configuración de youtube-dl .

Para especificar el ffmpeg binario a utilizar añada la siguiente línea a un archivo en /etc/youtube-dl.conf o ~/.config/youtube-dl/config :

--ffmpeg-location /usr/local/bin/ffmpeg

1voto

iapitus Puntos 51

Esto se parece mucho a un problema de ruta - tienes un script youtube-dl y el programa /usr/local/bin/youtube-dl - en su AppleScript, intente darle la ruta completa a su script.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X