Emacs के एक GIF स्क्रीनकास्ट की रिकॉर्डिंग


35

मैं बहुत से लोगों को एनिमेटेड GIF दिखा रहा हूँ जो Emacs सुविधाओं को दिखा रहा है, लेकिन मैंने एक बनाने के माध्यम से एक अच्छा चलना नहीं देखा है। कोई कोड है जो Emacs में gif की keyframes को keypresses से लिंक करने की कोशिश करता है? क्या प्रक्रिया को स्वचालित करने के लिए कोई विशिष्ट पैकेज या फ़ंक्शन हैं? मुझे रिकॉर्डिंग शुरू करने के लिए एक कुंजी को दबाने में सक्षम होना पसंद है, इसे फिर से बंद करने के लिए दबाएं, और यह फ़ाइल नाम के लिए GIF को बचाने के लिए संकेत है।

संबंधित प्रश्न, क्या Emacs के भीतर लंबे समय से स्क्रैनास्ट रिकॉर्ड करने के लिए एक पैकेज है?


90% प्रश्न विषय से हटकर है - एनिमेटेड GIF (Emacs या कुछ और) बनाने के लिए टूल के बारे में पूछ रहे हैं। विषय पर एकमात्र हिस्सा उस प्रक्रिया को स्वचालित करने के लिए एलिसिप कोड के लिए पूछ रहा है। केवल बाद वाले से पूछने के लिए प्रश्न शीर्षक और निकाय के संपादन पर विचार करें: एनिमेटेड जीआईएफ बनाने की सुविधा के लिए एलिसिप कोड।
ड्रू

यदि आप एक Windows विकल्प की तलाश कर रहे हैं, तो ScreenToGif (screentogif.codeplex.com देखें) आपका मित्र हो सकता है। यह एक निष्पादन योग्य है जो आपको अपनी स्क्रीन के एक हिस्से को फ्रेम करने की अनुमति देता है, इसे रिकॉर्ड करता है, इसे पाठ के साथ संपादित करता है, या फ़्रेम हटाता है या इसे गति देता है, या यदि आप चाहें तो धीमा कर देता है। मैं इसका इस्तेमाल अपने स्क्रैंकों के लिए करता हूं।
रेनेफ्रॉगर

जवाबों:


24

हाँ, Emacs में स्क्रिन रिकॉर्डिंग के लिए एक पैकेज है, इसे कहा जाता है

camcorder.el

मैं अभी तक कुछ भी वादा नहीं कर सकता, क्योंकि मैंने केवल अपने कंप्यूटर पर इसका परीक्षण किया है, लेकिन मैं आपको बता सकता हूं कि यह मेरे लिए काम करता है। :-)

  • इसका उपयोग करने के लिए, बस कॉल करें M-x camcorder-record
  • एक नया छोटा फ्रेम पॉपअप होगा और रिकॉर्डिंग शुरू होगी।
  • जब आप समाप्त कर लें, तो हिट करें F12और रूपांतरण समाप्त होने की प्रतीक्षा करें।

किसी भी प्रारूप में imagemagick' convertकमांड द्वारा समझे जाने वाले स्क्रैचस्ट को उत्पन्न किया जा सकता है । आप रिकॉर्डिंग को रोक सकते हैं F11!

यदि आप पॉपअप फ्रेम के बिना रिकॉर्ड करना चाहते हैं, तो उपयोग करें M-x camcorder-mode

निर्भरता

रिकॉर्डिंग के लिए, camcorder.elनिम्नलिखित लिनक्स उपयोगिताओं का उपयोग करता है। यदि आपके पास ये हैं, तो इसे बॉक्स से बाहर काम करना चाहिए। यदि आप कुछ और उपयोग करते हैं, तो आपको अभी भी camcorder-recording-commandचर को कॉन्फ़िगर करके इसे काम करने में सक्षम होना चाहिए ।

  • recordmydesktop
  • MPlayer
  • ImageMagick

समस्या निवारण

अपनी मशीन पर, मैंने देखा कि खिड़की-आईडी एमएसीएस ने सूचना दी थी

(format "%x" 
 (string-to-number
  (frame-parameter (selected-frame) 'window-id)))

उस आईडी से भिन्न जिसे WM ने wminfoउपयोगिता के साथ रिपोर्ट किया था ।

मैंने camcorder-window-id-offsetउसे ठीक करने के लिए चर जोड़ा । डिफ़ॉल्ट मान है -4, लेकिन आपको उन दो नंबरों को मिलान करने के लिए उसे बढ़ाने या घटाने की आवश्यकता हो सकती है।


विशुद्ध रूप से क्योंकि सभी अन्य उत्तर बेज़ज़ान का इस्तेमाल करते हैं या उनका उल्लेख करते हैं, मुझे यह जानने के लिए उत्सुक हैं कि ऐसा क्यों था कि आपने इसे अस्वीकार कर दिया था? (recordmydesktop के पक्ष में, ऐसा लगता है)।
फिल्स

@ मुझे बार-बार चर अवधि के साथ काम करने के लिए बीजान्टिन नहीं मिला, मुझे इसे पूर्व निर्धारित अवधि देना था। recordmydesktop मार संकेतों के साथ काम करता है।
मालाबार

मैं उपयोग xwininfoकरने के लिए सही आईडी निर्धारित करता था (मेरे पास wminfoमेरे सिस्टम पर नहीं है )।
यंगफ्रॉग

मैंने कैमकॉर्डर उपयोग के नए संस्करणों पर भी ध्यान दिया outer-window-id(इसके बजाय window-id) और अब ऑफसेट की कोई आवश्यकता नहीं है, लेकिन यह परिवर्तन अभी तक मेलपा-स्थिर नहीं हुआ है।
यंगफ्रॉग

1
@YoungFrog रिमाइंडर के लिए धन्यवाद। मैंने अब एक स्थिर रिलीज को धक्का दिया है।
मालाबार

20

मैंने इसी तरह के प्रश्न को r / r / Emacs पर पोस्ट किया है ।

GIFs रिकॉर्डिंग के लिए, आपके मुख्य विकल्प हैं:

  • byzanz के रिकॉर्ड:
# 12 second duration, top left corner, 700x800 pixel gif
$ byzanz-record -d 12 -x 0 -y 0 -w 900 -h 700 output.gif
# more documentation at https://wiki.ubuntu.com/CreatingScreencasts
  • LICEcap (विंडोज और ओएस एक्स)
  • ffmpeg / avconv (avconv ffmpeg का कांटा है):
$ avconv -y -video_size 200x100 -f x11grab -i :0.0+0,50 frame-%04d.gif
$ gifsicle --loop -O3 -d5 frame-*.gif > emacs.gif

कीस्ट्रोक्स दिखाने के लिए, आपको बस एक एप्लिकेशन की आवश्यकता होती है जो किस्ट्रोक्स दिखाता है। की-मोन इसके लिए एक GUI ऐप प्रदान करता है। जाहिर है, चाबियाँ दबाए जाने के लिए एक एमएसीएस मोड: कमांड-लॉग-मोड


क्या आप उन आदेशों पर थोड़ा विचार कर सकते हैं? कितनी बार फ्रेम के साथ कब्जा कर रहे हैं?
मालाबार


4

मैंने बीजान्ट का उपयोग गिफ़्स रिकॉर्ड करने के लिए किया

इसे पहले स्थापित करें, इस स्निपेट को rr (रिकॉर्ड क्षेत्र) में अपने $ PATH में डालें:

#!/bin/bash
# record screencast of a region into a gif using `byzanz-record`

# Delay before starting
DELAY=5

# Sound notification to let one know when recording is about to start (and ends)
beep() {
    paplay /usr/share/sounds/KDE-Im-Irc-Event.ogg &
}

printf "usage: rr [time] [file]\n"

# Duration and output file
if [ $# -gt 0 ]; then
    D="--duration=$@"
else
    echo Default recording duration 10s to $HOME/recorded.gif
    D="--duration=10 $HOME/rarecorded.gif"
fi

# xrectsel from https://github.com/lolilolicon/xrectsel
ARGUMENTS=$(xrectsel "--x=%x --y=%y --width=%w --height=%h") || exit -1

echo Delaying $DELAY seconds. After that, byzanz will start
for (( i=$DELAY; i>0; --i )) ; do
    echo $i
    sleep 1
done
beep
byzanz-record --verbose --delay=0 ${ARGUMENTS} $D
beep

और यह आपके $ पेट में आरडब्ल्यू (रिकॉर्ड विंडो) में:

#!/bin/bash
# record screencast of a region into a gif using `byzanz-record`

# Delay before starting
DELAY=5

# Sound notification to let one know when recording is about to start (and ends)
beep() {
    paplay /usr/share/sounds/KDE-Im-Irc-Event.ogg &
}

printf "usage: rr [time] [file]\n"

# Duration and output file
if [ $# -gt 0 ]; then
    D="--duration=$@"
else
    echo Default recording duration 10s to $HOME/recorded.gif
    D="--duration=10 $HOME/rarecorded.gif"
fi


XWININFO=$(xwininfo)
read X < <(awk -F: '/Absolute upper-left X/{print $2}' <<< "$XWININFO")
read Y < <(awk -F: '/Absolute upper-left Y/{print $2}' <<< "$XWININFO")
read W < <(awk -F: '/Width/{print $2}' <<< "$XWININFO")
read H < <(awk -F: '/Height/{print $2}' <<< "$XWININFO")

echo Delaying $DELAY seconds. After that, byzanz will start
for (( i=$DELAY; i>0; --i )) ; do
    echo $i
    sleep 1
done
beep
byzanz-record --verbose --delay=0 ${ARGUMENTS} $D
beep

अब आप rr और rw का उपयोग क्षेत्र / विंडो को gifs में रिकॉर्ड करने के लिए कर सकते हैं (आप अपनी आवश्यकताओं के लिए समय और स्थिति बदल सकते हैं।)


क्या यह रिकॉर्डिंग और कीस्ट्रोक्स प्रदर्शित करने का समर्थन करता है?
एरोज़लगो

@erjoalgo नहीं, यह कीस्ट्रोक्स प्रदर्शित नहीं करता है।
कोडिचन

2

क्विकटाइम प्लेयर का उपयोग करने वाला एक और विकल्प (यह OSX पर काम करता है, मुझे विंडोज पर नहीं पता है)। आवश्यक हैं: ffmpegऔरgifsicle

  • QuickTime खोलें और फ़ाइल शुरू करें -> नई स्क्रीन रिकॉर्डिंग
  • जब फ़ाइल खत्म -> निर्यात -> विकल्प पूर्ण गुणवत्ता के साथ मूवी के रूप में
  • अब इस कमांड के साथ अपनी स्क्रीन कास्ट कन्वर्ट करें:
    • ffmpeg -i yourscreen.mov -s 600x400 -pix_fmt rgb24 -r 10 -f gif - | gifsicle --optimize=3 --delay=3 > out.gif
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.