Come faccio a registrare più schermate con la stessa identica porzione dello schermo

3

Posso solo selezionare la parte dello schermo per registrare manualmente. Li voglio tutti esattamente uguali in modo che quando i video vengono riprodotti in sequenza, tutto si allinei.

Sto usando quicktime e, idealmente, preferirei limitarmi a farlo se possibile.

    
posta matt burns 13.03.2015 - 17:48
fonte

3 risposte

6

Salva questo script come 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 volta salvato il file caperture.swift . Dovrai assicurarti che possa essere eseguito.

In Terminal.app esegui il comando:

chmod +x caperture.swift

Quindi lo esegui con:

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

Questo farà avviare il lettore QuickTime pronto per iniziare la registrazione in questo modo:

SibasasuAppleScripteswift,quindiavraianchebisognodixcodeinstallato.

Questoèstatomoltoutilepermequindil'homessosugithubcome caperture nel caso qualcuno volesse migliorarlo.

    
risposta data 13.03.2015 - 19:13
fonte
1

Mi piacciono molto le @ mat-burns.

Ma dal momento che dovremmo eseguire Applescript dalla riga di comando per eseguire comunque il codice swift, ho voluto eseguire tutto da un singolo file.

Aggiunta di Applescript al codice 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 volta che il codice è stato salvato e abbiamo eseguito /bin/chmod +x ~/scripts/clickdrag.swift per rendere eseguibile lo script

Modifica ~/scripts/clickdrag.swift nel percorso effettivo del file swift.

Ora possiamo eseguire il codice dalla riga di comando:

UPDATE

Prima avresti dovuto inserire la riga di comando in questo modo:

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

Ma se usiamo il modo semplice di elaborare i limiti necessari aprendo una finestra del Finder e plasmandola sull'area che desideri acquisire.

Quindi esegui questo file di applicazione:

tell application "Finder" to get bounds of window 1

Ciò restituirà i limiti nel riquadro dei risultati.

- > {364, 206, 1038, 726}

Sarebbe molto più facile copiare e incollare 364, 206, 1038, 726 nel comando così com'è.

L'aggiornamento sopra ti consente di eseguire il comando in questo modo.

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

    
risposta data 13.03.2015 - 21:29
fonte
0

C'è un'app chiamata Screeny che fa questo e molte altre cose. $ 14,99 e può essere acquistato dall'app store

    
risposta data 13.03.2015 - 18:50
fonte

Leggi altre domande sui tag