21 votos

¿Cómo pausar un video de YouTube mediante un atajo de teclado o desde la barra de menú?

¿Existe un software que permita pausar (y reanudar) un video de YouTube que se esté reproduciendo actualmente (o, idealmente, cualquier medio de video/audio en línea), con un atajo de teclado o un botón convenientemente accesible (por ejemplo, un botón que se encuentre en la barra de menú, ubicado en la parte superior derecha de la pantalla)? Cuantos menos clics necesarios, mejor.

Lo importante aquí es que quiero la capacidad de pausar el video en cualquier aplicación, es decir, cuando Google Chrome no es la aplicación principal (por ejemplo, TextEdit o Microsoft Word es la aplicación principal).

iOS tiene este atajo incorporado. Si uno desliza desde la parte inferior de la pantalla hacia arriba, aparecen los controles multimedia. Estos controles pueden manipular todo el audio que proviene de una pestaña de Safari.

Mi navegador web es Google Chrome.

OS X El Capitán, versión 10.11.6.


También estaría abierto a lograr esto con un AppleScript (que luego se puede asignar a una combinación de teclas en FastScripts.app). Sin embargo, no puedo imaginar que una tarea tan compleja sea posible a través de AppleScript.

1 votos

Entonces, ¿estás buscando una solución de barra de menú en lugar de solo presionar la tecla de Espacio? ¿O haciendo clic en el botón de Reproducir/Pausa con el ratón?

1 votos

@Monomeeth Por favor, mira mi edición. Olvidé mencionar que Chrome no es la aplicación activa; el vídeo se reproduce en segundo plano. Por lo tanto, para pausar el vídeo, tengo que hacer clic en la ventana de Chrome, hacer clic en la pestaña que contiene el vídeo y solo entonces puedo usar la barra espaciadora o un clic izquierdo para pausar el vídeo.

1 votos

Estás buscando algo así si entendí bien la pregunta: beardedspice.github.io

22voto

wch1zpink Puntos 11

********** SOLUCIÓN ACTUALIZADA **********

Esta actualización es una solución directa a la pregunta original del OP.

Este código AppleScript siguiente añadirá un elemento de menú de estado "Reproducir/Pausar YouTube" con las opciones para reproducir o pausar cualquier vídeo de YouTube en Google Chrome o Safari, tanto si los navegadores están visibles como si no. Guarde este código AppleScript siguiente como una aplicación "permanecer abierto" en script Editor.app.

use framework "Foundation"
use framework "AppKit"
use scripting additions

property StatusItem : missing value
property selectedMenu : ""
property defaults : class "NSUserDefaults"
property internalMenuItem : class "NSMenuItem"
property externalMenuItem : class "NSMenuItem"
property newMenu : class "NSMenu"

my makeStatusBar()
my makeMenus()

on makeStatusBar()
    set bar to current application's NSStatusBar's systemStatusBar
    set StatusItem to bar's statusItemWithLength:-1.0
    -- set up the initial NSStatusBars title
    StatusItem's setTitle:"Play/Pause YouTube"
    -- set up the initial NSMenu of the statusbar
    set newMenu to current application's NSMenu's alloc()'s initWithTitle:"Custom"
    newMenu's setDelegate:me (*
    Requied delegation for when the Status bar Menu is clicked  the menu will use the delegates method (menuNeedsUpdate:(menu)) to run dynamically update.*)
    StatusItem's setMenu:newMenu
end makeStatusBar

on makeMenus()
    newMenu's removeAllItems() -- remove existing menu items
    set someListInstances to {"Play/Pause YouTube - Safari", "Play/Pause YouTube - Chrome", "Quit"}
    repeat with i from 1 to number of items in someListInstances
        set this_item to item i of someListInstances
        set thisMenuItem to (current application's NSMenuItem's alloc()'s initWithTitle:this_item action:("someAction" & (i as text) & ":") keyEquivalent:"")
        (newMenu's addItem:thisMenuItem)
        (thisMenuItem's setTarget:me) -- required for enabling the menu item
    end repeat
end makeMenus

on someAction1:sender
    clickClassName2("ytp-play-button ytp-button", 0)
end someAction1:

on someAction2:sender
    clickClassName("ytp-play-button ytp-button", 0)
end someAction2:

on someAction3:sender
    quit me
end someAction3:

to clickClassName2(theClassName, elementnum)
    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

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

enter image description here

Si quieres que tu nueva... Play Pause YouTube Status Menu.app sólo sea visible en el menú de estado y no en el Dock, puedes hacer clic con el botón derecho del ratón sobre la aplicación en el Finder y seleccionar la opción "Mostrar contenido del paquete". En la carpeta Contents, abre el archivo Info.plist en cualquier editor de texto y añade las dos líneas siguientes. Luego guarda y cierra ese archivo.

<key>LSBackgroundOnly</key>
<true/>

Si no se siente cómodo editando el archivo .plist directamente, el siguiente código AppleScript le permitirá elegir la aplicación que desea ocultar del Dock cuando se esté ejecutando.

Si la aplicación elegida ya está configurada para estar oculta en el Dock, la única opción que se le dará es la de desocultar la aplicación para que no sea visible en el Dock mientras se está ejecutando Y viceversa.

Este script es especialmente útil para evitar que los iconos de las aplicaciones de los gestores de inactividad aparezcan en el Dock mientras se ejecutan.

property fileTypes : {"com.apple.application-bundle"}
property plistFileItem : "  <key>LSBackgroundOnly</key>" & linefeed & " <true/>"

activate
set chosenApp to (choose application with prompt ¬
    "Choose  The Application You Want Hidden From The Dock While It Is Running" as alias)

tell application "System Events" to set appName to name of chosenApp
set plistFile to ((POSIX path of chosenApp) & "/Contents/info.plist") as string
set plistFileContents to (read plistFile)
set plistFileItemExists to plistFileItem is in plistFileContents

if plistFileItemExists then
    activate
    set theChoice to button returned of (display dialog ¬
        "Would you like to un-hide " & quote & appName & quote & ¬
        " from the Dock while it's running?" buttons {"Cancel", "Un-Hide"} ¬
        default button 2 cancel button 1 with title "Make A Choice")
else
    activate
    set theChoice to button returned of (display dialog ¬
        "Would you like to hide " & quote & appName & quote & ¬
        " from the Dock while it's running?" buttons {"Cancel", "Hide"} ¬
        default button 2 cancel button 1 with title "Make A Choice")
end if

if theChoice is "Hide" then
    tell application "System Events" to tell contents of property list file plistFile ¬
        to make new property list item at end with properties ¬
        {kind:string, name:"LSBackgroundOnly", value:true}
else if theChoice is "Un-Hide" then
    tell application "System Events" to tell contents of property list file plistFile ¬
        to make new property list item at end with properties ¬
        {kind:string, name:"LSBackgroundOnly", value:false}
else
    return
end if


************ SOLUCIÓN ORIGINAL ************

Este script hará clic en el botón de reproducción/pausa de un vídeo que se esté reproduciendo en YouTube en Google Chrome, independientemente de que Google Chrome esté visible o no.

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)

Esta es la versión del script para trabajar con 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)

En un esfuerzo por dar al OP una solución completa de AppleScript, he llevado mi respuesta original un paso más allá..

ACTUALIZACIÓN

Por fin me he dado cuenta. He creado una aplicación AppleScript en Xcode. Originalmente, mi proyecto sólo comenzó con una ventana de un botón para controlar los vídeos de YouTube actualmente activos en Chrome o Safari. Este proyecto ha crecido un poco hasta convertirse en una aplicación que contiene varias utilidades. Este GIF muestra el botón de pausa de YouTube que controla YouTube en Chrome y Safari. He vinculado las acciones del botón al AppleScript que escribí originalmente en el editor script.

enter image description here

Esta es una instantánea de la aplicación de Xcode que trabaja en el archivo AppDelegate.applescript.

enter image description here

Aquí está el código de ese archivo que he creado para que el programa funcione.

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

He actualizado el código para que la pestaña de YouTube en Chrome no tenga que ser la pestaña visible o activa al hacer clic en el botón de pausa de YouTube creado en Xcode

Aquí hay un enlace para descargar el proyecto completo de Xcode

enter image description here

ADVERTENCIA: La función de salvapantallas del escritorio congelará la aplicación. Después de forzar la salida y volver a abrir, la función de salvapantallas de escritorio para salir del salvapantallas activo funcionará.

A posteriori: Probablemente debería haber envuelto cada uno de los códigos AppleScript en sentencias "try" para evitar todo tipo de mensajes de error para aquellos que jueguen con este proyecto, que no tienen el mismo sistema y tipo de ordenador que yo. (MacBook Pro 15" OS Sierra 10.12.6)

Para que la función de zoom funcione, debe estar activada en las preferencias del sistema.

enter image description here

Para que la activación/desactivación del "Dictado" funcione correctamente, el atajo para activar los comandos de dictado en las preferencias del sistema debe coincidir con el atajo utilizado en el script.

enter image description here

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

Actualmente estoy trabajando en la capacidad de alternar entre la aplicación que se ejecuta en la ventana o en la barra de menús solamente

0 votos

Dejando de lado el marcar la visualización... solo necesitas esta línea de código decir a la aplicación "Google Chrome" que ejecute el javascript de la pestaña activa de la ventana principal "document. getElementsByClassName('ytp-play-button ytp-button') ['0']. click (); ". Dado que el OP quiere "pausar ( y reanudar ) un vídeo de YouTube que se esté reproduciendo actualmente", Google ya está abierto y podría estar minimizado con la pestaña activa reproduciéndose y la línea de código mencionada actuará sobre ella. Por lo tanto, no es necesario activar la ventana o, como en tu código, usar lanzar como se indica en la documentación, continuado en el siguiente comentario...

0 votos

¡Si una aplicación ya está en ejecución, enviarle un comando de inicio no tiene ningún efecto! Lo que nos lleva al controlador clickClassName , ¿por qué está ahí, no es en absoluto necesario ya que theClassName y elementnum se pueden establecer directamente como en la línea citada en el primer comentario. Tener ese controlador está bien si tienes más de un uso de getElementsByClassName, sin embargo, en este caso y según lo veo no lo tienes, a menos que vayas a construir un programa para hacer lo que BeardedSpice ya está haciendo. Lo que por supuesto requeriría una considerable codificación. ¡Aquí está la codificación superflua! :)

0 votos

El controlador está ahí y configurado en caso de que alguien quiera agregar al código, pueden llamarlo en cualquier parte del script ahora. Si recuerdo correctamente, intenté ejecutar el script sin el comando de lanzamiento y terminó trayendo Chrome a la ventana frontal, mientras que el comando de lanzamiento realizó la acción con Chrome oculto.. espera... Creo que lo intenté con un comando de activación primero, luego usé "lanzar" en su lugar. Iré y probaré el código sin ninguna línea ahora, vuelvo enseguida.

1voto

Pirooz Puntos 486

Así es como se puede ingresar en la barra de menú con código AppleScript puro. Guardar Como Aplicación con mantener abierta después de ejecutar el controlador :

P.D. Robé el código para las funciones de reproducción / pausa reales de @wch1zpink, así que por favor vota también su respuesta

- AppleScript: script de barra de menú - Creado el 2017-03-03 por Takaaki Naganoya adaptado por Josh Brown
- 2017 Piyomaru Software
usar versión de AppleScript "2.4"
usar adiciones de scripting
usar marco "Foundation"
usar marco "AppKit"
- http://piyocast.com/as/archives/4502

propiedad aStatusItem: valor faltante

en ejecución
      init() de mí
fin ejecución

en init()
    establecer aList en {"Google Chrome", "⏯", "", "Safari", "⏯​", "", "Salir"}
    establecer aStatusItem en (barra de estado actual de la aplicación NSStatusBar de la aplicación NSStatusBar) itemWithLength: (longitud de la variable NSVariableStatusItem de la aplicación actual)

    aStatusItem's setTitle: "

1 votos

Dos problemas que veo, el primero es que si sales desde la barra de menú, la aplicación AppleScript Dock Tile todavía está allí y la aplicación luego debe cerrarse por separado. Podrías agregar un quit comando al if aTitle is "Quit" then bloque después de la línea de current application's ... de código para resolver esto. El segundo problema es que los símbolos que estás utilizando no se ven bien cuando se selecciona la Preferencia del Sistema General Usar barra de menú y Dock oscuros. Realmente no puedes ver los símbolos hasta que pases el ratón por encima de ellos. Podrías considerar agregar texto al elemento del menú con los símbolos, por ejemplo: Play/Pause YouTube

0 votos

Gracias por las sugerencias respecto al modo oscuro, las ajustaré. También arreglaré el problema al salir.

1 votos

Además, al crear una aplicación de menú adicional como esta, me gusta ocultar el Icono del Dock de la aplicación con LSUIElement = 1 añadido al archivo name.app/Contents/Info.plist. En mi opinión, no es necesario que el Icono del Dock de la aplicación se muestre para este tipo de aplicación de menú adicional.

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