0 votes

Taper dans le Terminal fonctionne, AppleScript fonctionne partiellement

Ce que j'essaie d'obtenir :

  1. Cliquez sur un lien YouTube dans une application
  2. Cette URL est utilisée par mon youtube-dl script pour télécharger la vidéo
  3. youtube-dl est configuré pour télécharger la vidéo et l'audio de la plus haute qualité, puis utiliser ffmpeg pour les combiner en un seul fichier.

Ce que j'ai jusqu'à présent :

J'utilise Finicky comme navigateur par défaut. Cela me permet de contrôler les navigateurs qui ouvrent certains liens en fonction des règles que j'écris pour lui. En résumé, l'outil détecte les liens YouTube, les convertit de leur forme habituelle (par ex. https://www.youtube.com/watch?v=XxXxXxXXX_X ) à la forme abrégée et facile à partager (par exemple https://youtu.be/XxXxXxXXX_X ), puis l'envoie à un AppleScript.

L'AppleScript est enregistré comme une application et se trouve ci-dessous.

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

Ceci exécute le shell script. youtube-dl https://youtu.be/XxXxXxXXX_X . Lorsque je tape cette commande exacte dans le Terminal, tout fonctionne parfaitement : youtube-dl fait ce qu'il faut, y compris faire quelque chose avec ffmpeg pour combiner les fichiers téléchargés. Cependant, lorsque cet AppleScript est exécuté, c'est comme si ffmpeg n'était pas impliqué. J'obtiens un fichier vidéo et un fichier audio.

Je pense que le problème se situe au niveau de mon AppleScript, mais je n'y comprends rien. Que puis-je faire pour que mon AppleScript exécute les choses comme elles s'exécutent dans le Terminal ?

1 votes

J'ai annulé votre modification, veuillez poster votre solution en tant que réponse ci-dessous.

5voto

Wowfunhappy Points 6021

Que puis-je faire pour que mon AppleScript exécute les choses comme elles s'exécutent dans le Terminal ?

Eh bien, vous pourriez tell l'application Terminal pour exécuter votre commande :

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

Mais je ne recommande pas cette voie, car elle ouvre une fenêtre de terminal !

Il existe toute une série de différences entre do shell script et en tapant des commandes dans le Terminal. Pour commencer, do shell script Les commandes sont exécutées via sh plutôt que la version plus avancée bash o zsh (Et votre ligne de shabang "#!/bin/zsh" en haut de page n'aura aucun effet dans un Applescript).

En ce qui concerne votre problème actuel, il semble que youtube-dl ne puisse pas trouver votre copie de ffmpeg - probablement parce qu'une autre différence entre l'application Terminal et do shell script est que votre PATH est configuré différemment. Essayez de spécifier l'emplacement de votre binaire ffmpeg avec la commande youtube-dl --ffmpeg-location drapeau.

Si cela peut vous aider à avoir une référence à consulter, voici un Applescript que j'utilise pour télécharger des vidéos depuis mon navigateur web avec youtube-dl. Notez que j'ai peaufiné ce script pendant de nombreuses années, et qu'il a donc accumulé beaucoup de vérifications d'erreurs et de code pour la compatibilité avec différents navigateurs. Ne vous laissez pas intimider ! https://gist.github.com/Wowfunhappy/c2c8fc097a8b4f47430811fc1d0da041

3voto

Graham Miln Points 39606

osascript

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

S'il est exécuté en tant que script, le hash-bang de votre script doit être le chemin d'accès à osascript . Il s'agit du processus qui exécute AppleScript (un langage de l'Open Scripting Architecture) sur MacOS.

Citer l'URL passé dans youtube-dl pour s'assurer qu'il apparaît comme un seul argument à l'outil.

Utilisez le chemin complet vers youtube-dl pour s'assurer que l'outil est trouvé. Utilisez which youtube-dl dans Terminal pour trouver le chemin.

Arguments de la ligne de commande

Si l'AppleScript reçoit l'URL comme premier argument de la ligne de commande, utiliser le argv manipulateur :

#!/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 c'est le cas, envisagez de supprimer entièrement le script et de passer l'argument directement à youtube-dl .

Post-traitement

youtube-dl a la capacité de téléchargements de post-traitement . Vous pouvez le contrôler en utilisant un fichier de configuration youtube-dl .

Pour spécifier le ffmpeg à utiliser, ajoutez la ligne suivante soit dans un fichier à l'adresse /etc/youtube-dl.conf o ~/.config/youtube-dl/config :

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

1voto

iapitus Points 51

Cela ressemble beaucoup à un problème de chemin - vous avez un script. youtube-dl et le programme /usr/local/bin/youtube-dl - dans votre AppleScript, essayez de lui donner le chemin complet de votre script.

0 votes

Pouvez-vous m'expliquer ce que je dois modifier exactement, ou me dire où je peux trouver le chemin d'accès complet ? Je suis novice en matière d'AppleScript. Merci de votre réponse !

0 votes

Ce n'est qu'une supposition basée sur les informations que vous avez partagées, mais je pense que si vous modifiez do shell script "youtube-dl " & input à do shell script "~/youtube-dl " & input vous devriez être en mesure de le faire. Notez que "~/" signifie "dans votre répertoire personnel", donc si votre script se trouve dans un autre répertoire, remplacez "~/" par ce répertoire.

0 votes

Pour plus d'informations sur l'environnement dans AppleScript à l'aide de "do shell script", voir ce document

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X