¿Cómo realizo grabaciones de varias pantallas con la misma porción de pantalla?

3

Solo puedo seleccionar la parte de la pantalla para grabar manualmente. Los quiero a todos exactamente iguales para que cuando los videos se reproduzcan secuencialmente, todo se alinee.

Estoy usando QuickTime y, idealmente, me gustaría seguir con eso si es posible.

    
pregunta matt burns 13.03.2015 - 17:48

3 respuestas

6

Guarde este script como caperture.swift :

#!/usr/bin/env xcrun swift
import Foundation

// Start QuickTime Player using AppleScript
func startQT() {
    var scriptToPerform: NSAppleScript?
    let asCommand = "tell application \"QuickTime Player\" \n" +
            " activate \n" +
            " new screen recording \n" +
            " delay 1 \n" +
            " tell application \"System Events\" to key code 49 \n" +
            " delay 1\n" +
            " end tell"

    scriptToPerform = NSAppleScript(source:asCommand)
    var possibleError: NSDictionary?

    if let script = scriptToPerform {
        script.executeAndReturnError(&possibleError)
        if let error = possibleError {
            print("ERROR: \(error)")
        }
    }
}

// Click and drag the mouse as defined by the supplied commandline arguments
func dragMouse() {
    let args = UserDefaults.standard

    let x = CGFloat(args.integer(forKey: "x"))
    let y = CGFloat(args.integer(forKey: "y"))
    let w = CGFloat(args.integer(forKey: "w"))
    let h = CGFloat(args.integer(forKey: "h"))

    let p0 = NSPointToCGPoint(NSMakePoint(x, y))
    let p1 = NSPointToCGPoint(NSMakePoint(x + w, y + h))

    let mouseDown = CGEvent(mouseEventSource: nil, mouseType: CGEventType.leftMouseDown, mouseCursorPosition: p0, mouseButton: CGMouseButton.left)!
    let mouseDrag = CGEvent(mouseEventSource: nil, mouseType: CGEventType.leftMouseDragged, mouseCursorPosition: p1, mouseButton: CGMouseButton.left)!
    let mouseUp = CGEvent(mouseEventSource: nil, mouseType: CGEventType.leftMouseUp, mouseCursorPosition: p1, mouseButton: CGMouseButton.left)!

    let kDelayUSec : useconds_t = 500_000

    mouseDown.post(tap: CGEventTapLocation.cghidEventTap)
    usleep(kDelayUSec)
    mouseDrag.post(tap: CGEventTapLocation.cghidEventTap)
    usleep(kDelayUSec)
    mouseUp.post(tap: CGEventTapLocation.cghidEventTap)
}


if (CommandLine.arguments.count != 9) {
    print("usage:")
    print("    ./caperture.swift -x 100 -y 100 -w 400 -h 300")
} else {
    startQT()
    dragMouse()
}

Una vez que se guarda el archivo caperture.swift . Deberá asegurarse de que se pueda ejecutar.

En Terminal.app ejecuta el comando:

chmod +x caperture.swift

Luego lo ejecutas con:

./caperture.swift -x 100 -y 100 -w 400 -h 300

Esto iniciará el reproductor QuickTime listo para comenzar a grabar de esta manera:

SebasaenAppleScriptyswift,porloquetambiénnecesitarástenerinstaladoxcode.

Estofuerealmenteútilparamí,asíquelopuseengithubcomo caperture en caso de que alguien quiera mejorarlo.

    
respondido por el matt burns 13.03.2015 - 19:13
1

Me gusta @ mat-burns responder mucho.

Pero como estaríamos ejecutando Applescript desde la línea de comandos para ejecutar el código Swift de todos modos, quería hacerlo todo desde un solo archivo.

Agregando el Applescript al código swift:

#!/usr/bin/env xcrun swift
import Foundation

let kDelayUSec : useconds_t = 500_000

func DragMouse(p0: CGPoint, p1: CGPoint) {
    let mouseDown = CGEventCreateMouseEvent(nil, CGEventType(kCGEventLeftMouseDown), p0, CGMouseButton(kCGMouseButtonLeft)).takeUnretainedValue()
    let mouseDrag = CGEventCreateMouseEvent(nil, CGEventType(kCGEventLeftMouseDragged), p1, CGMouseButton(kCGMouseButtonLeft)).takeUnretainedValue()
    let mouseUp = CGEventCreateMouseEvent(nil, CGEventType(kCGEventLeftMouseUp), p1, CGMouseButton(kCGMouseButtonLeft)).takeUnretainedValue()

    CGEventPost(CGEventTapLocation(kCGHIDEventTap), mouseDown)
    usleep(kDelayUSec)
    CGEventPost(CGEventTapLocation(kCGHIDEventTap), mouseDrag)
    usleep(kDelayUSec)
    CGEventPost(CGEventTapLocation(kCGHIDEventTap), mouseUp)
}

func ascript(){


    var scriptToPerform: NSAppleScript?
    let asCommand = "tell application \"QuickTime Player\" \n activate \n new screen recording \n delay 1 \n tell application \"System Events\" to key code 49 \n delay 1\n end tell"

  scriptToPerform = NSAppleScript(source:asCommand)
   var errorInfo = AutoreleasingUnsafeMutablePointer<NSDictionary?>()


    if let script = scriptToPerform {

        script.executeAndReturnError(errorInfo)


    }

}

func main() {
let p0 = CGPointMake( CGFloat(atoi( C_ARGV[1])), CGFloat(atoi( C_ARGV[2])))
let p1 = CGPointMake( CGFloat(atoi( C_ARGV[3])),  CGFloat(atoi( C_ARGV[4])))

DragMouse(p0, p1)
}
ascript()
main()

Una vez que se guarda el código y hemos ejecutado /bin/chmod +x ~/scripts/clickdrag.swift para hacer el script ejecutable

Cambie ~/scripts/clickdrag.swift a su ruta real al archivo swift.

Ahora podemos ejecutar el código desde la línea de comando:

ACTUALIZACIÓN

Antes de que hubieras tenido que ingresar la línea de comando así:

~/scripts/clickdrag.swift -x 364 -y 206 -dx 1038 -dy 726

Pero si utilizamos la forma simple de resolver los límites que necesita, abrimos una ventana del buscador y la configuramos para el área que desea capturar.

Luego ejecuta este Applescript:

tell application "Finder" to get bounds of window 1

Esto devolverá los límites en el panel de resultados.

- > {364, 206, 1038, 726}

Sería mucho más fácil copiar y pasar 364, 206, 1038, 726 en el comando tal como está.

La actualización anterior le permite ejecutar el comando como tal.

~/scripts/clickdrag.swift 364, 206, 1038, 726

    
respondido por el markhunte 13.03.2015 - 21:29
0

Hay una aplicación llamada Screeny que hace esto así como muchas otras cosas. $ 14.99 y se puede comprar en la tienda de aplicaciones

    
respondido por el markhunte 13.03.2015 - 18:50

Lea otras preguntas en las etiquetas