Wie mache ich mehrere Bildschirmaufnahmen mit genau demselben Teil des Bildschirms?

Ich kann nur den Teil des Bildschirms auswählen, der manuell aufgenommen werden soll. Ich möchte, dass sie alle genau gleich sind, damit, wenn die Videos nacheinander abgespielt werden, alles aneinandergereiht ist.

Geben Sie hier die Bildbeschreibung ein

Ich verwende Quicktime und möchte möglichst einfach dabei bleiben.

Möglicherweise finden Sie dies hilfreich: apple.stackexchange.com/questions/63056/…
Danke, es hat mich in die richtige Richtung gebracht ... Ich werde meine Lösung jetzt posten ...

Antworten (4)

Hier im Jahr 2020 - macOS Catalina und höher ermöglicht das integrierte /usr/sbin/screencaptureTool Optionen zum Festlegen des Erfassungsbereichs. Und wenn Sie es grafisch verwenden, merkt es sich die letzte Auswahl. Wenn Sie sie also nicht ändern, können Sie die App neu starten und dieselben Einstellungen ohne die folgenden Details erhalten.

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

Zum Beispiel:

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

Es gibt eine Menge anderer guter Sachen in der Manpage:

man screencapture
Yay, mein Code ist jetzt überflüssig. Perfekt danke :)

UPDATE: Antwort von @Andre LaBranche ist besser, lies das


Speichern Sie dieses Skript unter 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()
}

Sobald die caperture.swiftDatei gespeichert ist. Sie müssen sicherstellen, dass es ausgeführt werden kann.

Führen Sie in Terminal.app den Befehl aus:

chmod +x caperture.swift

Dann führst du es aus mit:

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

Dadurch wird der QuickTime Player gestartet, der bereit ist, die Aufnahme wie folgt zu starten:

Bildschirmfoto

Es basiert auf AppleScript und Swift, daher muss auch xcode installiert sein.

Das war wirklich nützlich für mich, also habe ich es auf Github als Caperture hochgeladen , falls jemand es verbessern möchte.

Ich denke, das könnte unsere erste Antwort mit Swift-Code sein! Stellar!
Ich habe die Antwort bearbeitet. Aber ich habe keinen Fehler in Ihrem Code bearbeitet, da dies aus irgendeinem Grund beabsichtigt sein könnte. Aber die Zeile let p1 = CGPointMake(x + dx, y + dy)sollte sein, let p1 = CGPointMake(dx, dy)es besteht keine Notwendigkeit, die Ganzzahlen hinzuzufügen, und dies wirft die Grenzen auf falsch, was im Applescript platziert ist. Wenn ich beispielsweise Grenzen verwende, {364, 206, 1038, 726}erhalte ich ein gezogenes Fenster{364, 206, 1402, 932}
Danke Markus. dx und dy stellen tatsächlich Breite und Höhe dar, nicht den Punkt unten rechts, also habe ich umbenannt, um dies widerzuspiegeln. Ich habe auch Ihren Vorschlag zum Zusammenführen in eine einzige Datei eingefügt. Siehe github.com/mattburns/caperture für die aktuelle Version. Beifall
Schön matt. Ich liebe diesen Code, da er für viele Dinge verwendet werden kann. Danke. Übrigens sollten Sie Ihre eigene Antwort akzeptieren ...

Es gibt eine App namens Screeny , die dies und viele andere Dinge tut. 14,99 $ und kann im App Store erworben werden

Ich mag die Antwort von @mat-burns sehr.

Aber da wir das Applescript sowieso von der Befehlszeile aus ausführen würden, um den Swift-Code auszuführen, wollte ich alles aus einer einzigen Datei machen.

Applescript zum Swift-Code hinzufügen:

#!/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()

Sobald der Code gespeichert und wir ausgeführt haben, /bin/chmod +x ~/scripts/clickdrag.swiftum das Skript ausführbar zu machen

Ändern ~/scripts/clickdrag.swiftSie den tatsächlichen Pfad zur Swift-Datei.

Wir können den Code jetzt über die Befehlszeile ausführen:

AKTUALISIEREN

Vorher hättest du die Kommandozeile so eingeben müssen:

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

Aber wenn wir die einfache Methode verwenden, um alle Grenzen zu ermitteln, die Sie benötigen, indem Sie ein Suchfenster öffnen und es auf den Bereich formen, den Sie erfassen möchten.

Führen Sie dann dieses Applescript aus:

tell application "Finder" to get bounds of window 1

Dadurch werden die Grenzen im Ergebnisbereich zurückgegeben.

-> {364, 206, 1038, 726}

Es wäre viel einfacher, es 364, 206, 1038, 726so zu kopieren und in den Befehl einzufügen.

Mit dem obigen Update können Sie den Befehl so ausführen.

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