¿Cómo hago varias grabaciones de pantalla con exactamente la misma parte de la pantalla?

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

ingrese la descripción de la imagen aquí

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

Gracias, me puso en la dirección correcta... Publicaré mi solución ahora...

Respuestas (4)

/usr/sbin/screencaptureAquí en 2020, macOS Catalina y versiones posteriores permiten que la herramienta integrada tenga opciones para especificar el área de captura. Y si lo usa gráficamente, recuerda la última selección, por lo que, a menos que lo cambie, puede reiniciar la aplicación y obtener la misma configuración sin los detalles a continuación.

  -R<x,y,w,h> capture screen rect
  -v        capture video recording of the screen

Por ejemplo:

screencapture -R10,10,500,500 -v cap.mov

Hay un montón de otras cosas buenas en la página del manual:

man screencapture
Yay, mi código ahora es redundante. Perfecto gracias :)

ACTUALIZACIÓN: la respuesta de @Andre LaBranche es mejor, ve a leer eso


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()
}

caperture.swiftUna vez guardado el archivo. 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 así:

captura de pantalla

Se basa en AppleScript y Swift, por lo que también necesitará tener instalado xcode.

Esto fue realmente útil para mí, así que lo puse en github como caperture en caso de que alguien quiera mejorarlo.

¡Creo que esta podría ser nuestra primera respuesta con código rápido! ¡Estelar!
Edité la respuesta. Pero no edité un error en su código, ya que puede ser intencional por alguna razón. Pero la línea let p1 = CGPointMake(x + dx, y + dy)debería ser let p1 = CGPointMake(dx, dy)no hay necesidad de agregar los números enteros y al hacerlo arroja los límites para ser incorrectos de lo que se coloca en el applescript. Ejemplo, si uso límites, {364, 206, 1038, 726}lo que obtendré es una ventana arrastrada{364, 206, 1402, 932}
gracias marca dx y dy en realidad representan el ancho y la altura, no el punto en la parte inferior derecha, por lo que he cambiado el nombre para reflejar eso. También incorporé su sugerencia de fusionar en un solo archivo. Consulte github.com/mattburns/caperture para ver la versión actual. Salud
Bonito mate. Me encanta este código, ya que puede usarse para muchas cosas. Gracias. Por cierto, deberías aceptar tu propia respuesta...

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

Me gusta mucho la respuesta de @mat-burns.

Pero dado que 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 guardado el código y lo hemos ejecutado /bin/chmod +x ~/scripts/clickdrag.swiftpara hacer ejecutable el script

Cambie ~/scripts/clickdrag.swifta su ruta real al archivo Swift.

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

ACTUALIZAR

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

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

Pero si usamos la forma simple de calcular los límites que necesita abriendo una ventana del buscador y dándole forma al á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 pegar 364, 206, 1038, 726en el comando tal como está.

La actualización anterior le permite ejecutar el comando así.

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