कोड कैप्चर स्वचालित


2

मैं एक परियोजना कर रहा हूं, जहां हमें संपादक में लिखी जा रही अजगर की स्क्रिप्ट का वीडियो चाहिए। हमारे पास 100+ स्क्रिप्ट हैं, इसलिए हमें स्वचालन की आवश्यकता है। क्या कोई प्रोग्राम है, जिसमें इनपुट आपकी अजगर स्क्रिप्ट है और आउटपुट एक वीडियो है जो एक संपादक में चरित्र द्वारा उस कोड को लिखते हैं।

जवाबों:


3

जबकि मुझे कहना होगा कि यह "आवश्यकता" काफी अजीब है, कुछ भी असंभव नहीं है। आप इसे एक छोटी स्क्रिप्ट के साथ प्राप्त कर सकते हैं, जैसा कि मैं नीचे दिखाने जा रहा हूं।


तैयारी

सबसे पहले, हमें कुछ उपकरण स्थापित करने की आवश्यकता है। ये xdotoolटाइपिंग एमुलेशन और विंडो कंट्रोल और byzanzवीडियो रिकॉर्डिंग के लिए हैं। उनका उपयोग करके स्थापित करें:

sudo apt install xdotool byzanz

अगला, इस उत्तर के अंत में कोड को कॉपी करें और इसे अपनी मशीन पर bash स्क्रिप्ट के रूप में सहेजें, जैसे ~/bin/typerec। यदि आप इसे अपने फ़ोल्डर में संग्रहीत करते हैं $PATH, तो आप इसका पथ निर्दिष्ट किए बिना इसे निष्पादित कर पाएंगे। उपयोग करने के बाद इसे निष्पादन योग्य बनाना न भूलें chmod +x PATH/TO/SCRIPT


प्रयोग

अब एक विशिष्ट फ़ाइल की टाइपिंग रिकॉर्ड करने के लिए, पहले अपना लक्ष्य संपादक खोलें, जिसमें हम टाइप करेंगे। सुनिश्चित करें कि इसमें किसी भी प्रकार का "ऑटो इंडेंटेशन" फीचर बंद है, अन्यथा टाइप किए गए कोड का इंडेंटेशन गड़बड़ हो जाएगा!

फिर एक टर्मिनल से मेरी स्क्रिप्ट लॉन्च करें। सही सिंटैक्स है

typerec INPUT_FILE OUTPUT_FILE [DELAY]

जहाँ INPUT_FILEआपके कोड टेक्स्ट फ़ाइल का OUTPUT_FILEपथ है और आउटपुट फ़ाइल पथ है जहाँ रिकॉर्डिंग संग्रहीत की जाएगी। यह किसी एक्सटेंशन द्वारा स्वीकार किए जाते हैं होना आवश्यक है byzanz, में से एक यानी gif, webm, ogg, ogv, flv, byzanz(बोल्ड अक्षरों में मेरी सिफारिशें)। DELAYतर्क वैकल्पिक है और मिलीसेकेंड में दो कीस्ट्रोक्स के बीच देरी तय करता है। डिफ़ॉल्ट 20 है अगर छोड़ा गया है, तो मैं 5 से नीचे नहीं जाने की सलाह देता हूं।

उदाहरण:

typerec /path/to/my/code.py ~/Videos/code.webm 100

आपका माउस कर्सर कुछ प्रकार के क्रॉस-हेयर में बदल जाएगा (स्क्रीनशॉट में दिखाई नहीं दे रहा है) और आपको एक अधिसूचना बुलबुला मिलेगा, जो आपको लक्ष्य संपादक विंडो पर क्लिक करने के लिए कहेगा:

typerec "लक्ष्य विंडो चुनें" सूचना

जैसा कि आपको बताया गया है, वैसे करें, लेकिन सावधान रहें ! यदि आप रिकॉर्डिंग शुरू नहीं करना चाहते हैं, तो तुरंत Ctrl+ हिट करें C, जबकि टर्मिनल अभी भी केंद्रित है और कहीं भी क्लिक करने से पहले।

चेतावनी!
जैसे ही आप कहीं भी क्लिक करते हैं, स्क्रिप्ट उस विंडो पर ध्यान केंद्रित करेगी और बाद में आपके इनपुट दस्तावेज़ को टाइप करने के लिए सभी कीस्ट्रोक का अनुकरण करना शुरू कर देगी। यह रुकने योग्य नहीं है! एक बार जब यह शुरू हो जाता है, तो अपने कीबोर्ड को स्पर्श न करें या समाप्त होने तक कहीं भी क्लिक करें! अन्यथा आपका इनपुट उत्सर्जित इनपुट के साथ मिश्रित होगा और अनजाने कार्यों को ट्रिगर कर सकता है, जैसे अन्य विंडो को खोलना / फोकस करना या कीबोर्ड शॉर्टकट सक्रिय करना। आपको तब तक इंतजार करना होगा जब तक कि यह अपने आप बंद न हो जाए!

बस। एक बार जब स्क्रिप्ट समाप्त हो गई (ध्यान दें कि रिकॉर्डिंग पूरी होने के बाद, वीडियो को प्रस्तुत करने और सहेजने के लिए अभी भी कुछ और सेकंड की आवश्यकता हो सकती है), आप रिकॉर्ड किए गए वीडियो को खोल सकते हैं और परिणामों की जांच कर सकते हैं।

उदाहरण आउटपुट (इनपुट <code> ~ / .profile </ code>, आउटपुट <code> typerec.gif </ code>, <code> 20 </ code> ms की डिफ़ॉल्ट देरी)


यहाँ स्क्रिप्ट है:

#!/bin/bash
THIS="$(basename "$0")"
INPUT_FILE="$1"
OUTPUT_FILE="$2"
DELAY="${3:-20}"

show_usage() {
    echo "  Usage:  $THIS INPUT_FILE OUTPUT_FILE [DELAY]"
    echo "where INPUT_FILE is the text file with the content to be typed"
    echo "and OUTPUT_FILE is where the recorded video shall get saved."
    echo "You can set the DELAY between keystrokes in ms (default 20)."
    echo "Note that OUTPUT_FILE will be overwritten if it exists already."
    echo "It must have one of the extensions {gif|webm|ogg|ogv|flv|byzanz}."
    exit 1
}

if [[ -z "$INPUT_FILE" || ! -r "$INPUT_FILE" ]] ; then
    echo "Missing INPUT_FILE argument or file is not existing or readable!"
    show_usage
fi
if [[ -z "$OUTPUT_FILE" ]] ; then
    echo "Missing OUTPUT_FILE argument!"
    show_usage
fi
if [[ ! "$DELAY" -gt 0 ]] ; then
    echo "Invalid argument for DELAY, must be a number > 0 or omitted."
    show_usage
fi

notify-send -i "media-record" "$THIS" "Please select your target editor window."
eval $(xdotool selectwindow getwindowgeometry --shell)
if [[ -z "$WINDOW" || -z "$X" || -z "$Y" || -z "$WIDTH" || -z "$HEIGHT" ]]; then
    echo "Failed to obtain all required target window information. Aborting."
    exit 2
fi

TYPE_COMMAND="xdotool windowactivate --sync \"$WINDOW\" \
              getactivewindow \
              windowfocus --sync \
              sleep 1 \
              type --clearmodifiers --delay "$DELAY" \
                   --file <( tr \\\\n \\\\r < \"$INPUT_FILE\" )"

byzanz-record -e "bash -c '$TYPE_COMMAND'" \
        -x "$X" -y "$Y" -w "$WIDTH" -h "$HEIGHT" \
        "$OUTPUT_FILE" &&

echo "Recording screencast and saving to $OUTPUT_FILE finished successfully."

वैकल्पिक एक-लाइनर

आप कहीं भी स्क्रिप्ट को बचाने के लिए नहीं पसंद करते हैं, एक एक लाइनर जो आप बस टर्मिनल कि मूलतः एक ही करता है में चिपका सकते हैं (लेकिन छोड़ते हुए इनपुट पैरामीटर और सत्यापन, रिकॉर्डिंग file.txtके रूप में typerec.gif20 एमएस की देरी के साथ) के नीचे है। आप सही रास्तों का उपयोग करने के लिए इसे संपादित करने और यह सुनिश्चित करने के लिए ज़िम्मेदार हैं कि वहाँ सब कुछ अपने आप सही है।

( eval $(xdotool selectwindow getwindowgeometry --shell) ; byzanz-record -e "bash -c 'xdotool windowactivate --sync $WINDOW getactivewindow windowfocus --sync sleep 1 type --clearmodifiers --delay 20 --file <( tr \\\\n \\\\r < file.txt )'" -x $X -y $Y -w $WIDTH -h $HEIGHT typerec.gif )

यह वही है जो मुझे चाहिए था, यह एक आकर्षण की तरह काम करता है, बहुत बहुत धन्यवाद
:)

@ dibil08 अच्छा लगा। यदि इसने आपकी समस्या को हल कर दिया है, तो कृपया इसके उत्तर को ग्रे राउंड चेक बटन पर बाईं ओर क्लिक करके स्वीकार करें। धन्यवाद।
बाइट कमांडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.