我看到很多人都发布了动画GIF来展示Emacs功能,但是我还没有看到创建一个好的过程。是否有任何代码尝试将gif的关键帧链接到Emacs中的按键?是否有任何elisp软件包或函数可以自动执行该过程?我希望能够按一个键开始录制,再次按它可以停止,并提示输入文件名以保存gif。
相关问题,是否有用于从Emacs录制更长的屏幕录像的软件包?
我看到很多人都发布了动画GIF来展示Emacs功能,但是我还没有看到创建一个好的过程。是否有任何代码尝试将gif的关键帧链接到Emacs中的按键?是否有任何elisp软件包或函数可以自动执行该过程?我希望能够按一个键开始录制,再次按它可以停止,并提示输入文件名以保存gif。
相关问题,是否有用于从Emacs录制更长的屏幕录像的软件包?
Answers:
是的,在Emacs中有一个用于录制截屏视频的软件包,称为
我尚无承诺,因为我仅在计算机上对其进行了测试,但是我可以告诉您它对我而言有效。:-)
M-x camcorder-record
。F12
并等待转换完成。截屏视频可以通过imagemagick
的convert
命令理解的任何格式生成
。您甚至可以使用暂停录音F11
!
如果要在没有弹出框的情况下进行录制,请使用M-x camcorder-mode
。
为了进行记录,请camcorder.el
使用以下linux实用程序。如果有这些,它应该可以立即使用。如果您使用其他方法,则应该仍然可以通过配置camcorder-recording-command
变量使其工作
。
在我的机器上,我注意到window-id Emacs报告了
(format "%x"
(string-to-number
(frame-parameter (selected-frame) 'window-id)))
与WM通过wminfo
实用程序报告的ID不同。
我添加了变量camcorder-window-id-offset
来纠正这一点。默认值为-4
,但您可能需要增大或减小该值才能使这两个数字匹配。
xwininfo
确定要使用的正确ID(wminfo
我的系统上没有)。
outer-window-id
(而不是window-id
),并且不再需要偏移量,但是这种变化还没有达到稳定的melpa上。
我在/ r / Emacs上发布了类似的问题。
要记录GIF,主要选项是:
# 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
$ avconv -y -video_size 200x100 -f x11grab -i :0.0+0,50 frame-%04d.gif
$ gifsicle --loop -O3 -d5 frame-*.gif > emacs.gif
要显示击键,您只需要一个显示击键的应用程序。key-mon为此提供了一个GUI应用程序。当然,有一种Emacs模式可以显示按下的键:command-log-mode。
我用拜占士录制GIF
首先安装它,将此片段放入rr(record region)放入$ 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
并将其放入rw(记录窗口)至$ 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
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将区域/窗口记录为gif(您可以根据需要更改时间和位置。)
还有一个使用QuickTime播放器的选项(它在OSX上有效,在Windows上我不知道)。要求是:ffmpeg
和gifsicle
ffmpeg -i yourscreen.mov -s 600x400 -pix_fmt rgb24 -r 10 -f gif - | gifsicle --optimize=3 --delay=3 > out.gif