मैं स्क्रीन के ठीक उसी हिस्से के साथ कई स्क्रीन रिकॉर्डिंग कैसे कर सकता हूं


3

मैं केवल मैन्युअल रूप से रिकॉर्ड करने के लिए स्क्रीन के हिस्से का चयन कर सकता हूं। मैं उन सभी को बिल्कुल वैसा ही चाहता हूं ताकि जब वीडियो क्रमिक रूप से चलाए जाएं, तो यह सभी लाइनों तक पहुंच जाए।

यहां छवि विवरण दर्ज करें

मैं क्विकटाइम का उपयोग कर रहा हूं और आदर्श रूप से यदि संभव हो तो बस उसी के साथ रहना पसंद करेंगे।


1
: आप इस उपयोगी लग सकता है apple.stackexchange.com/questions/63056/...
इयान सी

धन्यवाद, यह मुझे सही दिशा में ले गया ... मैं अब अपना समाधान पोस्ट करूँगा ...
मैट

जवाबों:


6

इस स्क्रिप्ट को इस रूप में सहेजें 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फाइल सेव हो जाए। आपको यह सुनिश्चित करने की आवश्यकता होगी कि इसे निष्पादित किया जा सकता है।

Terminal.app में कमांड चलाएँ:

chmod +x caperture.swift

फिर आप इसके साथ निष्पादित करते हैं:

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

यह इस तरह से रिकॉर्डिंग शुरू करने के लिए तैयार क्विकटाइम प्लेयर शुरू करेगा:

स्क्रीनशॉट

यह AppleScript पर निर्भर करता है और तेज होता है, इसलिए आपको xcode भी इंस्टॉल करना होगा।

यह मेरे लिए वास्तव में उपयोगी था, इसलिए मैंने इसे जीथब पर रखा है क्योंकि यदि कोई इसे सुधारना चाहता है, तो यह कैपचर के रूप में है।


1
मुझे लगता है कि यह स्विफ्ट कोड के साथ हमारा पहला उत्तर हो सकता है! तारकीय!
इयान सी।

मैंने उत्तर संपादित किया। लेकिन मैंने आपके कोड में कोई त्रुटि संपादित नहीं की क्योंकि यह किसी कारण से जानबूझकर हो सकता है। लेकिन लाइन लेट p1 = CGPointMake(x + dx, y + dy)होनी चाहिए let p1 = CGPointMake(dx, dy) पूर्णांकों को जोड़ने की कोई आवश्यकता नहीं है और ऐसा करने से सीमा को फेंक दिया जाता है जो कि एप्सस्क्रिप्ट में गलत है। उदाहरण अगर मैं सीमा का उपयोग करता हूं तो मुझे {364, 206, 1038, 726}जो मिलेगा वह एक खींची हुई खिड़की है{364, 206, 1402, 932}
मार्श

धन्यवाद मार्क। dx और डाई वास्तव में चौड़ाई और ऊंचाई का प्रतिनिधित्व करते हैं, नीचे के बिंदु में नहीं, इसलिए इसका नाम बदलने के लिए मैंने इसका नाम बदला है। मैं भी एक फ़ाइल में विलय के आपके सुझाव पर मुड़ा। वर्तमान संस्करण के लिए github.com/mattburns/caperture देखें । चीयर्स
मैट

1
अच्छा लगा एक मैट। इस कोड को प्यार करें क्योंकि यह कई चीजों के लिए इस्तेमाल किया जा सकता है। धन्यवाद। वैसे आपको अपना जवाब खुद स्वीकार करना चाहिए ...
अंक

1

मुझे @ मैट-बर्न का जवाब बहुत पसंद है।

लेकिन चूंकि हम स्विफ्ट कोड को निष्पादित करने के लिए कमांड लाइन से एप्सलिप्ट चला रहे हैं, वैसे भी मैं यह सब एक ही फाइल से करना चाहता था।

स्विफ्ट कोड में एप्सस्क्रिप्ट को जोड़ना:

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

एक बार कोड सहेजा गया है और हम /bin/chmod +x ~/scripts/clickdrag.swift स्क्रिप्ट को निष्पादन योग्य बनाने के लिए चले हैं

~/scripts/clickdrag.swiftस्विफ्ट फ़ाइल के लिए आप वास्तविक पथ में बदलें ।

अब हम कमांड लाइन से कोड चला सकते हैं:

अपडेट करें

इससे पहले कि आप कमांड लाइन में प्रवेश करना चाहते थे जैसे:

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

लेकिन अगर हम खोजक विंडो खोलकर और उस क्षेत्र को आकार देना चाहते हैं, जिस पर आप कब्जा करना चाहते हैं, तो आप किसी भी सीमा पर काम करने के सरल तरीके का उपयोग करते हैं।

फिर इस एप्स्क्रिप्ट को चलाएं:

tell application "Finder" to get bounds of window 1

यह परिणाम फलक में सीमाएँ लौटाएगा।

-> {364, 206, 1038, 726}

364, 206, 1038, 726जैसा है वैसे ही कमांड में कॉपी और पेस्ट करना बहुत आसान होगा ।

ऊपर दिया गया अपडेट आपको इस तरह कमांड चलाने की अनुमति देता है।

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


0

Screeny नाम का एक ऐप है जो ऐसा करने के साथ-साथ कई अन्य चीजें भी करता है। $ 14.99 और ऐप स्टोर से खरीदा जा सकता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.