¿Se puede usar Applescript para automatizar una sesión de grabación de pantalla en OS X?

Necesito realizar las siguientes tareas desde un script:

  1. Iniciar una grabación de pantalla (con audio del sistema).
  2. Después de un retraso establecido, detenga la grabación.
  3. Guardar en un archivo.
  4. Cierra la grabación.

Probé algunos enfoques diferentes aquí y me encontré con obstáculos. Una cosa que probé, por ejemplo, fue un script de QuickTime que se encuentra aquí .

tell application "QuickTime Player"
    set newScreenRecording to new screen recording
    tell newScreenRecording
        start
        delay 10
        stop
    end tell
    set newDoc to last item of (documents whose name contains "Untitled")
    set f to "" & (path to desktop) & "quicktimeFile"
    export newDoc in f using settings preset "Quicktime Movie"
end tell

Este script no da error, pero tampoco guarda nada.

En el pasado, usé iShowU HD , pero me encontré con importantes problemas de rendimiento que me obligaron a volver a la mesa de dibujo.

Estoy dispuesto a pagar por una aplicación de terceros siempre que cumpla con mis requisitos, así que no dude en sugerir cualquier cosa que pueda hacer el trabajo.

Ejecutando OS X 10.8 Mountain Lion.

Respuestas (3)

Prueba este guión:

tell application "QuickTime Player"
    set newScreenRecording to new screen recording
    tell newScreenRecording
        start
        delay 3
        stop
    end tell
    tell last item of documents
        close
    end tell
end tell

Hará una nueva grabación durante 3 segundos (edite la delay 3línea para cambiar la duración), que se guardará automáticamente en el directorio Películas de su directorio de inicio y luego cerrará la ventana de grabación.

Si desea exportar automáticamente a un formato diferente, puede hacerlo agregando la línea export in ("" & (path to desktop) & "quicktimeFile.m4v") using settings preset "480p"antes de la closelínea. Los ajustes preestablecidos entre los que puede elegir se definen en el cuadro de diálogo Archivo > Exportar :

opciones de exportación

Consulte el cuadro de diálogo real para obtener más detalles sobre los ajustes preestablecidos (tenga en cuenta que están "hasta" la resolución enumerada; se ajustará a los píxeles horizontales disponibles, por lo que "480p" le brinda 640x400 para una grabación 16:10). Hasta donde yo sé, no puedes hacer ajustes preestablecidos personalizados.

Si desea capturar los sonidos del sistema y no el audio de entrada de línea/micrófono, consulte esta pregunta: ¿ Puedo obtener el sonido del sistema junto con la grabación de pantalla de QuickTime Player?

Para los curiosos, hay un par de notas sobre por qué el script original no funciona y las peculiaridades de AppleScript de QuickTime Player:

  • La set newDoc […]línea intenta tomar el documento más reciente con la cadena "Sin título" para dar cuenta de que la newScreenRecordingreferencia se vuelve inválida una vez que se detiene la grabación (lo que probablemente sea una mala decisión de diseño, pero bueno). Sin embargo, QuickTime Player bajo Lion (y posiblemente Snow Leopard) guarda automáticamente las grabaciones de pantalla como "Grabación de pantalla", "Grabación de pantalla 2", etc., por lo que no encontró ningún documento. Hacer que tome solo el documento más reciente resuelve esto y lo prueba en el futuro hasta cierto punto.

  • La exportlínea hace referencia a un ajuste preestablecido que ya no existe (o ha sido renombrado). Desafortunadamente, ni QuickTime ni AppleScript dan ningún error al respecto, simplemente fallan silenciosamente (diseño más pobre).

  • El diccionario AppleScript para QuickTime Player enumera una saveacción, pero no pude hacer que funcionara. Sospecho que la funcionalidad se eliminó, pero la entrada del diccionario no se eliminó. Notará que no hay funcionalidad Guardar en la GUI, solo exportar (y guardar automáticamente). Entonces, si desea cambiar la ubicación de guardado sin exportar un nuevo archivo, deberá obtener la ubicación del archivo y luego moverlo a través del Finder.

Ok, pude hacer funcionar la línea de exportación gracias a su conocimiento. Ahora tengo otro problema: parece que Applescript no espera a que exportse complete la línea antes de pasar a la siguiente línea. Si cierro la ventana de grabación antes de que finalice la exportación, falla. Entonces, supongo que de alguna manera necesito averiguar cuánto tiempo llevará una exportación, retrasar esa cantidad y luego cerrar la ventana.
Eso es extraño, no el comportamiento que tengo. Cuando ejecuto el script (con el exportafter tell last item of documentsy before close), se abre una ventana de exportación separada, se ejecuta la exportación y luego se cierra la ventana de grabación. Pero no interrumpe el proceso de exportación. Esto está usando Quicktime X en Lion.
Podría ser porque estoy en 10.8 entonces (debería haber puesto eso en la descripción, mi error). Podría codificar un retraso, pero eso me parece sucio. Algunos videos pueden tardar mucho más en exportarse que otros, así que estaría jugando a las adivinanzas.
Otra nota de 10.8: mis grabaciones de pantalla no se guardan automáticamente en ~/Movies.
Ah bien. Desafortunadamente, no tengo una instalación 10.8 a mano para probar cosas. Es posible que el savecomando funcione para usted (no parece hacer nada en 10.7). También puede eliminar el comando de cierre y cerrarlo manualmente una vez que se haya completado la codificación.
El botón Guardar tampoco pareció hacer nada por mí. Probablemente tenga razón sobre la eliminación de la funcionalidad. Desafortunadamente, no puedo cerrar la ventana manualmente, todo el proceso de principio a fin tiene que ser automatizado.
¿Tiene que ser completamente AppleScript? Veo que Automator tiene una acción de codificación QT. No estoy seguro de los resultados que podría obtener, pero podría intentar usar Automator con algunos de los Applescript como acciones internas (es decir, hacer la grabación con una acción de Applescript, luego usar la opción de codificación de Automator y finalmente cerrarla con otro Applescript).
No necesariamente tiene que ser applescript, solo tiene que ser algo que se pueda llamar desde el código. Mi aplicación está escrita en Ruby y realiza una llamada al sistema /usr/bin/osascriptcada vez que necesito acceder a la capa de AppleScript.

Recientemente escribí un script que no depende en absoluto de la versión de QuickTime.

Simplemente simula las acciones reales del usuario para guardar/exportar la película. Toma como entrada el directorio al que desea que se exporte el archivo de película y la cantidad de segundos que desea que continúe la grabación.

Consulte el script (y la publicación de blog asociada) en http://www.neerajkumar.net/blog/2013/02/16/script-to-record-screen-on-mac-osx-and-save-on- disco/

Tiene buena pinta, lo probaré. Terminé volviendo a iShowU HD porque me permite recortar un área específica de la pantalla para mi grabación. ¿Sabes si QuickTime permite esto?
Sí, QuickTime te permite hacer eso. Existe un método de exportación de películas en el que puede seleccionar el área que desea exportar.
El sitio ya no está disponible.
Supongo que nadie ha logrado esto con el simulador de iOS, estaría encantado de saberlo.

No uso applescript pero sigue siendo útil; Encontré una solución que funciona muy bien. Puede grabar con ffmpeg usando un dispositivo de entrada llamado avfoundation.

Detalles Más opciones Opciones de ffmpeg

Aquí hay un comando de ejemplo:ffmpeg -f avfoundation -pix_fmt yuyv422 -i "1:1" -t 10 -vf crop=1280:720:1:65 -r 30 output.mkv

  • Es posible que se le pida o no que especifique -pix_fmtcuándo no se incluye esta opción; puede valer la pena probar otros formatos para ver si obtiene un mejor rendimiento.
  • Como se explica en el enlace de detalles, -iselecciona tanto la entrada de video como la de audio. Si desea capturar el audio que se reproduce en su computadora, necesitará algo como iShowU Audio Capture. Para que eso funcione, deberá presionar la opción + F11, seleccionar iShowU Audio Capture como dispositivo de entrada y como dispositivo de salida. Notará que una vez que lo seleccione como dispositivo de salida, ya no podrá escuchar el audio a través de sus parlantes o auriculares. Una solución rápida es abrir la configuración de Audio MIDI, crear un dispositivo de salida múltiple y agregar iShowU Audio Capture y su dispositivo de salida normal. Seleccione este nuevo dispositivo de salida múltiple en sus salidas de sonido y listo, ahora puede escuchar el audio y capturarlo. Desafortunadamente, ahora no puede controlar los niveles de audio... si alguien sabe una solución a esto, hágamelo saber.
  • -tes el tiempo en segundos para grabar.
  • -vfes muy útil para recortar y compensar. La configuración actual se recorta a 1280 ancho 720 alto, desplazando 1 píxel a la izquierda y 65 píxeles desde la parte superior. Deberá usar una herramienta de terceros para obtener las medidas exactas de píxeles de su pantalla.
  • -res la velocidad de fotogramas