Comment mettre en pause une vidéo YouTube via un raccourci clavier ou depuis la barre de menus?

13

Existe-t-il un logiciel permettant de mettre en pause (et / ou de mettre en pause) une vidéo YouTube en cours de lecture (ou, idéalement, tout support vidéo / audio en ligne), avec un raccourci clavier ou un bouton facilement accessible (par exemple, un bouton)? qui se trouve dans la barre de menu, située en haut à droite de l'écran)? Moins il y a de clics nécessaires, mieux c'est.

La clé ici est que je veux pouvoir mettre la vidéo en pause dans n’importe quelle application, c’est-à-dire lorsque Google Chrome est activé. ne pas l’application la plus importante (par exemple, TextEdit ou Microsoft Word est l’application la plus importante).

iOS a ce raccourci intégré. Si vous glissez du bas vers le haut de l'écran, les commandes multimédias apparaissent. Ces commandes peuvent manipuler tous les fichiers audio provenant d’un onglet Safari.

Mon navigateur Web est Google Chrome.

OS X El Capitan, version 10.11.6.


Je serais également prêt à accomplir cela avec un AppleScript (qui peut ensuite être attribué à une combinaison de touches dans FastScripts.app). Mais, je ne peux pas imaginer qu'une tâche aussi complexe soit possible via AppleScript.

rubik's sphere
la source
1
Donc, vous cherchez une solution de barre de menus plutôt que de simplement appuyer sur la barre d'espace? Ou un clic de souris sur le bouton Lecture / Pause?
Monomeeth
@Monometh S'il vous plaît voir mon édition. J'ai oublié de mentionner que Chrome n'est pas l'application active. la vidéo joue en arrière-plan. Donc, pour mettre la vidéo en pause, je dois cliquer sur la fenêtre Chrome, cliquer sur l'onglet qui contient la vidéo. Ce n'est qu'alors que je pourrai utiliser la barre d'espace ou un clic gauche pour mettre la vidéo en pause.
rubik's sphere
1
vous cherchez quelque chose comme si j'avais compris la question: beardedspice.github.io
enzo
@enzo j'ai téléchargé BeardedSpice et c'est exactement ce que je cherche BeardedSpice est parfait pour mes besoins. Si vous voulez poster ceci comme réponse, je l'accepterai avec joie. Merci!
rubik's sphere
En fait, je me demande pourquoi Google n'a pas activé le bouton Lecture / Pause (F8) du clavier pour YouTube, étant donné que cela fonctionne normalement lorsque vous visitez Google Play Musique dans Chrome.
calum_b

Réponses:

17

Ce script va cliquer sur le bouton Lecture / Pause sur une vidéo en cours de lecture dans YouTube dans Google Chrome, que cette dernière soit visible ou non.

to clickClassName(theClassName, elementnum)
    tell application "Google Chrome" to (tabs of window 1 whose URL contains "youtube")
    set youtubeTabs to item 1 of the result
    tell application "Google Chrome"
        execute youtubeTabs javascript "document.getElementsByClassName('" & theClassName & "')[" & elementnum & "].click();"
    end tell
end clickClassName    

clickClassName("ytp-play-button ytp-button", 0)

Ceci est la version de script pour travailler avec Safari

to clickClassName2(theClassName, elementnum)
    tell application "Safari"
        tell window 1 to set current tab to tab 1 whose URL contains "youtube"
        do JavaScript "document.getElementsByClassName('" & theClassName & "')[" & elementnum & "].click();" in document 1
    end tell
end clickClassName2

clickClassName2("ytp-play-button ytp-button", 0)

Dans le but de donner à l’opérateur une solution AppleScript complète, j’ai poussé plus loin ma réponse initiale.

METTRE À JOUR

J'ai finalement compris. J'ai créé une application AppleScript dans Xcode. À l'origine, mon projet n'avait démarré que par une fenêtre à un bouton permettant de contrôler les vidéos YouTube actuellement actives dans Chrome ou Safari. Ce projet a évolué dans une application qui contient plusieurs utilitaires. Ce GIF montre le bouton de pause YouTube contrôlant YouTube dans Chrome et Safari. J'ai lié les actions des boutons à l'AppleScript que j'avais écrit à l'origine dans l'éditeur de script.

enter image description here

Ceci est un instantané de l'application Xcode. Utilisation du fichier AppDelegate.applescript.

enter image description here

Voici le code dans ce fichier que j'ai créé pour que le programme fonctionne.

script AppDelegate

    property parent : class "NSObject"


    -- IBOutlets
    property theWindow : missing value

    to clickClassName(theClassName, elementnum) -- Handler for pausing YouTube in Chrome
        if application "Google Chrome" is running then
            try
                tell application "Google Chrome" to (tabs of window 1 whose URL contains "youtube")
                set youtubeTabs to item 1 of the result
                tell application "Google Chrome"
                    execute youtubeTabs javascript "document.getElementsByClassName('" & theClassName & "')[" & elementnum & "].click();"
                end tell
            end try
        end if
    end clickClassName

    to clickClassName2(theClassName, elementnum) -- Handler for pausing YouTube in Safari
        if application "Safari" is running then
            try
                tell application "Safari"
                    tell window 1 to set current tab to tab 1 whose URL contains "youtube"
                    do JavaScript "document.getElementsByClassName('" & theClassName & "')[" & elementnum & "].click();" in document 1
                end tell
            end try
        end if
    end clickClassName2

    on doSomething:sender -- Calls the Chrome YouTube Handler
        clickClassName("ytp-play-button ytp-button", 0)
    end doSomething:

    on doSomething14:sender -- Calls the Safari YouTube Handler
        clickClassName2("ytp-play-button ytp-button", 0)
    end doSomething14:

    on doSomething2:sender -- Hide and or show the Menu Bar
        tell application "System Preferences"
            reveal pane id "com.apple.preference.general"
        end tell
        tell application "System Events" to tell process "System Preferences" to tell window "General"
            click checkbox "Automatically hide and show the menu bar"
        end tell
        delay 1
        quit application "System Preferences"
    end doSomething2:

    on doSomething3:sender -- Sets Display resolution to the second lowest setting (15 inch Built In Retina Display - MBP)
        tell application "System Preferences"
            reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
        end tell
        tell application "System Events" to tell process "System Preferences" to tell window "Built-in Retina Display"
            click radio button "Scaled" of radio group 1 of tab group 1
            click radio button 2 of radio group 1 of group 1 of tab group 1
        end tell
        quit application "System Preferences"
    end doSomething3:

    on doSomething4:sender -- Sets Display resolution to the second highest setting (15 inch Built In Retina Display - MBP)
        tell application "System Preferences"
            reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
        end tell
        tell application "System Events" to tell process "System Preferences" to tell window "Built-in Retina Display"
            click radio button "Scaled" of radio group 1 of tab group 1
            click radio button 4 of radio group 1 of group 1 of tab group 1
        end tell
        quit application "System Preferences"
    end doSomething4:

    on doSomething5:sender -- Sets Display resolution to the highest setting (15 inch Built In Retina Display - MBP)
        tell application "System Preferences"
            reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
        end tell
        tell application "System Events" to tell process "System Preferences" to tell window "Built-in Retina Display"
            click radio button "Scaled" of radio group 1 of tab group 1
            click radio button 5 of radio group 1 of group 1 of tab group 1
        end tell
        quit application "System Preferences"
    end doSomething5:

    on doSomething6:sender -- Sets Display resolution to the lowest setting (15 inch Built In Retina Display - MBP)
        tell application "System Preferences"
            reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
        end tell
        tell application "System Events" to tell process "System Preferences" to tell window "Built-in Retina Display"
            click radio button "Scaled" of radio group 1 of tab group 1
            click radio button 1 of radio group 1 of group 1 of tab group 1
            delay 0.1
            click button "OK" of sheet 1
            quit application "System Preferences"
        end tell
    end doSomething6:

    on doSomething7:sender -- Displays a dialog with your current IP
        tell current application to display dialog (do shell script "curl ifconfig.io") with icon 2 buttons "OK" default button 1 with title "Your Current IP Address Is.." giving up after 5
    end doSomething7:

    on doSomething8:sender -- Shows hidden files in Finder
        do shell script "defaults write com.apple.finder AppleShowAllFiles TRUE\nkillall Finder"
    end doSomething8:

    on doSomething9:sender -- Hides hidden files in Finder if they are showing
        do shell script "defaults write com.apple.finder AppleShowAllFiles FALSE\nkillall Finder"
    end doSomething9:

    on doSomething10:sender  -- Brightness Highest
        tell application "System Preferences"
            reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
        end tell
        tell application "System Events" to tell process "System Preferences" to tell window "Built-in Retina Display"
        set value of value indicator 1 of slider 1 of group 2 of tab group 1 to 12
        end tell
        quit application "System Preferences"
    end doSomething10:

    on doSomething11:sender -- Brightness Lowest
        tell application "System Preferences"
            reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
        end tell
        tell application "System Events" to tell process "System Preferences" to tell window "Built-in Retina Display"
        set value of value indicator 1 of slider 1 of group 2 of tab group 1 to 0.1
        end tell
        quit application "System Preferences"
    end doSomething11:

    on doSomething12:sender -- Zoom
        tell application "System Events"
            key code 28 using {command down, option down}
        end tell
    end doSomething12:

    on doSomething13:sender -- Dictation On/Off
        tell application "System Events"
            keystroke "x" using {option down}
        end tell
    end doSomething13:

    on doSomething15:sender -- Enables Screensaver as Desktop background
        tell application "System Events"
            do shell script "/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background"
        end tell
    end doSomething15:

    on doSomething16:sender -- Kills Screensaver Desktop background
        try
            tell application id "com.apple.ScreenSaver.Engine" to quit
        end try
    end doSomething16:


    on applicationWillFinishLaunching:aNotification
        -- Insert code here to initialize your application before any files are opened

    end applicationWillFinishLaunching:

    on applicationShouldTerminate:sender
        -- Insert code here to do any housekeeping before your application quits


        return current application's NSTerminateNow
    end applicationShouldTerminate:

    on applicationShouldTerminateAfterLastWindowClosed:sender -- Quits app when clicking red x

        return TRUE

    end applicationShouldTerminateAfterLastWindowClosed:

end script

J'ai mis à jour le code afin que l'onglet YouTube dans Chrome n'ait pas besoin d'être l'onglet visible ou actif lorsque vous cliquez sur le bouton de pause YouTube créé dans Xcode.

Voici un lien pour télécharger l'intégralité du projet Xcode

enter image description here

AVERTISSEMENT: la fonction d'économiseur d'écran du bureau gèlera l'application. Après avoir forcé la fermeture et la réouverture, la fonction d’économiseur d’écran du bureau pour quitter l’économiseur d’écran actif fonctionnera.

Après les pensées: J'aurais probablement dû encapsuler chacun des codes AppleScript dans des instructions "try" pour éviter toutes sortes de messages d'erreur à ceux qui jouent avec ce projet, qui n'ont pas le même système et le même type d'ordinateur que moi. (MacBook Pro 15 "OS Sierra 10.12.6)

Pour que la fonction zoom fonctionne, elle doit être activée dans les préférences système.

enter image description here

Pour que la fonction "Dictée activée / désactivée" soit activée correctement, le raccourci permettant d'activer les commandes de dictée dans les préférences système doit correspondre au raccourci utilisé dans le script.

enter image description here

on doSomething13:sender -- Dictation On/Off
    tell application "System Events"
        keystroke "x" using {option down}
    end tell
end doSomething13:

Actuellement, je travaille sur la possibilité de basculer entre l'application exécutée avec fenêtre ou la barre de menus uniquement.

wch1zpink
la source
Mettre de côté le display dialing ... vous n'avez besoin que de cette ligne de code tell application "Google Chrome" to execute front window's active tab javascript "document.getElementsByClassName('ytp-play-button ytp-button')['0'].click();". Étant donné que l'OP souhaite "suspendre (et annuler la pause) une vidéo YouTube en cours de lecture", Google est déjà ouvert et peut être réduit au minimum si l'onglet actif est en cours de lecture et la ligne de code susmentionnée agira en conséquence. Donc pas besoin d’activer la fenêtre ou comme dans votre code, utilisez launch comme c'est ce qui est indiqué dans la documentation, continué dans le commentaire suivant ...
user3439894
3
C'est une solution très intelligente! J'ai décidé d'utiliser le programme tiers, BeardedSpice, comme suggéré précédemment dans un commentaire par enzo, car BeardedSpice fonctionne même si la fenêtre de Chrome contenant la vidéo est réduite et cette fenêtre restera réduite. BeardedSpice fonctionne également avec une litanie de lecteurs multimédias en ligne (pas seulement YouTube). Mais, je suis étonné que vous ayez trouvé comment faire cela dans AppleScript.
rubik's sphere
1
Ce serait très bien si vous archiviez les fichiers de projet Xcode en archive zip et fournissiez un lien de téléchargement pour l'archive. :)
user3439894
1
Je nettoie juste un peu le code et je ferai ce que vous demandez sous peu :)
wch1zpink
1
Merci de partager les fichiers du projet. Si je pouvais voter à nouveau votre réponse, je le ferais. :)
user3439894
1

Voici comment accéder à la barre de menus avec AppleScript pur. Enregistrer en tant qu'application avec stay open after run handler:

P.S. J'ai volé le code pour les fonctions de lecture / pause réelles de @ wch1zpink, donc s'il vous plaît, contrôlez leur réponse également

--AppleScript: menu bar script -- Created 2017-03-03 by Takaaki Naganoya adapted by Josh Brown
--2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "AppKit"
--http://piyocast.com/as/archives/4502

property aStatusItem : missing value

on run
    init() of me
end run

on init()
    set aList to {"Google Chrome", "⏯", "", "Safari", "⏯​", "", "Quit"}
    set aStatusItem to current application's NSStatusBar's systemStatusBar()'s statusItemWithLength:(current application's NSVariableStatusItemLength)

    aStatusItem's setTitle:"🎛"
    aStatusItem's setHighlightMode:true
    aStatusItem's setMenu:(createMenu(aList) of me)
end init

on createMenu(aList)
    set aMenu to current application's NSMenu's alloc()'s init()
    set aCount to 1
    repeat with i in aList
        set j to contents of i
        if j is not equal to "" then
            set aMenuItem to (current application's NSMenuItem's alloc()'s initWithTitle:j action:"actionHandler:" keyEquivalent:"")
        else
            set aMenuItem to (current application's NSMenuItem's separatorItem())
        end if
        (aMenuItem's setTarget:me)
        (aMenuItem's setTag:aCount)
        (aMenu's addItem:aMenuItem)
        if j is not equal to "" then
            set aCount to aCount + 1
        end if
    end repeat

    return aMenu
end createMenu

on actionHandler:sender
    set aTag to tag of sender as integer
    set aTitle to title of sender as string

    if aTitle is "Quit" then
        current application's NSStatusBar's systemStatusBar()'s removeStatusItem:aStatusItem
    end if
    #Chrome
    if aTitle is "⏯" then
        clickClassName("ytp-play-button ytp-button", 0)
    end if
    #Safari
    if aTitle is "⏯​" then
        clickClassName2("ytp-play-button ytp-button", 0)
    end if
end actionHandler:

to clickClassName(theClassName, elementnum)
    tell application "Google Chrome" to (tabs of window 1 whose URL contains "youtube")
    set youtubeTabs to item 1 of the result
    tell application "Google Chrome"
        execute youtubeTabs javascript "document.getElementsByClassName('" & theClassName & "')[" & elementnum & "].click();"
    end tell
end clickClassName

to clickClassName2(theClassName, elementnum)
    tell application "Safari"
        tell window 1 to set current tab to tab 1 whose URL contains "youtube"
        do JavaScript "document.getElementsByClassName('" & theClassName & "')[" & elementnum & "].click();" in document 1
    end tell
end clickClassName2
JBis
la source
1
Je vois deux problèmes, le premier étant que si vous quittez la barre de menus, la mosaïque AppleScript Application Dock est toujours présente et que l’application doit ensuite être fermée séparément. Vous pouvez ajouter un quit commander au if aTitle is "Quit" then bloc après le current application's ... ligne de code pour résoudre cela. Le deuxième problème est que les symboles que vous utilisez ne s'affichent pas bien lorsque le Utiliser la barre de menus sombre et le Dock La préférence système générale est sélectionnée. Vous ne pouvez vraiment pas voir les symboles jusqu'à ce que vous les survoliez. Vous pourriez envisager d’ajouter du texte à l’élément de menu avec les symboles. Play/Pause YouTube ⏯​
user3439894
Merci pour les suggestions concernant le mode obscur. Je vais régler le problème de cessation
JBis
1
De plus, lors de la création d’une application supplémentaire de menu telle que celle-ci, j’aime masquer le pavé de dock de l’application avec LSUIElement = 1 ajouté au name.app/Contents/Info.plist fichier. IMO Il n'est pas nécessaire que l'application Dock Tile de l'application apparaisse pour ce type d'application de menu supplémentaire.
user3439894
@ user3439894 Je savais que j’avais plus d’applications que j’avais oublié d’ajouter, n'hésitez pas à les éditer.
JBis
Notez également que le --http://piyocast.com/as/archives/4502 commenter dans le code n'est plus valable cependant cette réponse Applescript exécuté depuis la barre de menu? par l'auteur du code d'origine contient le code d'origine qui se trouvait à cette URL. La réponse comprend également le defaults commander pour cacher la tuile de quai, par exemple: defaults write /Applications/name_of_app.app/Contents/Info.plist LSUIElement -bool yes
user3439894