7 votos

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

Sólo puedo seleccionar manualmente la parte de la pantalla que quiero grabar. Las quiero todas exactamente iguales para que cuando se reproduzcan los vídeos secuencialmente, todo quede alineado.

enter image description here

Estoy usando quicktime y me gustaría seguir con eso si es posible.

1 votos

Esto puede resultarle útil: apple.stackexchange.com/questions/63056/

0 votos

Gracias me puso en la dirección correcta ... Voy a publicar mi solución ahora ...

8voto

matt burns Puntos 2094

ACTUALIZACIÓN: La respuesta de @Andre LaBranche es mejor, vaya a leerla


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 el caperture.swift se guarda el archivo. Deberá asegurarse de que puede ejecutarse.

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 empezar a grabar así:

screenshot

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

Esto fue muy útil para mí, así que lo he puesto en github como capertura por si alguien quiere mejorarlo.

1 votos

Creo que ésta podría ser nuestra primera respuesta con código swift. ¡Excelente!

0 votos

He editado la respuesta. Pero no he editado un error en su código, ya que puede ser intencional por alguna razón. Pero la línea deja p1 = CGPointMake(x + dx, y + dy) debe ser let p1 = CGPointMake(dx, dy) no hay necesidad de añadir los enteros y hacerlo arroja los límites a ser incorrecta de lo que se coloca en el applescript. Ejemplo si uso bounds {364, 206, 1038, 726} lo que obtendré es una ventana arrastrada {364, 206, 1402, 932}

0 votos

Gracias Mark. dx y dy en realidad representan la anchura y la altura, no el punto en la parte inferior derecha por lo que he cambiado el nombre para reflejar eso. También he incluido tu sugerencia de fusionarlos en un único archivo. Véase github.com/mattburns/caperture para la versión actual. Saludos

4voto

Andre LaBranche Puntos 56

Aquí en 2020 - MacOS Catalina y posterior permite que el built-in /usr/sbin/screencapture tiene opciones para especificar el área de captura. Y si la utilizas gráficamente, recuerda la última selección, así que, a menos que la cambies, puedes volver a iniciar la aplicación y obtener la misma configuración sin los detalles que aparecen 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 man:

man screencapture

1voto

Malik hassan Puntos 16

Me gusta mucho la respuesta de @mat-burns.

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

Añadir 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 ejecutado /bin/chmod +x ~/scripts/clickdrag.swift para que el script sea ejecutable

Cambia ~/scripts/clickdrag.swift a la ruta real del archivo swift.

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

ACTUALIZACIÓN

Antes habría tenido que introducir la línea de comandos de la siguiente manera:

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

Pero si utilizamos la forma sencilla de calcular los límites que necesites abriendo una ventana del buscador y dándole forma a la zona que quieras capturar.

A continuación, ejecute 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, 726 en el comando tal cual.

La actualización anterior le permite ejecutar el comando de la siguiente manera.

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

1voto

Malik hassan Puntos 16

Existe una aplicación llamada Pantalla que hace esto y muchas otras cosas. Cuesta 14,99 dólares y se puede comprar en la App store.

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