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.
Estoy usando QuickTime e idealmente me gustaría seguir con eso si es posible.
/usr/sbin/screencapture
Aquí 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
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.swift
Una 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í:
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.
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}
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.swift
para hacer ejecutable el script
Cambie ~/scripts/clickdrag.swift
a 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, 726
en el comando tal como está.
La actualización anterior le permite ejecutar el comando así.
~/scripts/clickdrag.swift 364, 206, 1038, 726
ian c
quemaduras mate