录制Emacs的GIF截屏视频


35

我看到很多人都发布了动画GIF来展示Emacs功能,但是我还没有看到创建一个好的过程。是否有任何代码尝试将gif的关键帧链接到Emacs中的按键?是否有任何elisp软件包或函数可以自动执行该过程?我希望能够按一个键开始录制,再次按它可以停止,并提示输入文件名以保存gif。

相关问题,是否有用于从Emacs录制更长的屏幕录像的软件包?


90%的问题不在主题之列-询问制作(Emacs或其他任何东西)动画GIF的工具。主题的唯一部分是要求Elisp代码自动执行该过程。考虑编辑问题标题和正文以仅询问后者:Elisp代码以方便创建动画GIF。
2014年

如果您正在寻找Windows的替代品,ScreenToGif(请参阅screentogif.codeplex.com)可能是您的朋友。它是一个可执行文件,可让您专门设置屏幕的一部分,进行记录,用文本进行编辑,删除帧或加快速度或根据需要放慢速度。我将其用于截屏。
ReneFroger

Answers:


24

是的,在Emacs中有一个用于录制截屏视频的软件包,称为

摄录机

我尚无承诺,因为我仅在计算机上对其进行了测试,但是我可以告诉您它对我而言有效。:-)

  • 要使用它,只需调用M-x camcorder-record
  • 将会弹出一个新的较小的框并开始记录。
  • 完成后,点击F12并等待转换完成。

截屏视频可以通过imagemagickconvert命令理解的任何格式生成 。您甚至可以使用暂停录音F11

如果要在没有弹出框的情况下进行录制,请使用M-x camcorder-mode

依存关系

为了进行记录,请camcorder.el使用以下linux实用程序。如果有这些,它应该可以立即使用。如果您使用其他方法,则应该仍然可以通过配置camcorder-recording-command变量使其工作 。

  • 记录我的桌面
  • 播放器
  • imagemagick

故障排除

在我的机器上,我注意到window-id Emacs报告了

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

与WM通过wminfo实用程序报告的ID不同。

我添加了变量camcorder-window-id-offset来纠正这一点。默认值为-4,但您可能需要增大或减小该值才能使这两个数字匹配。


纯粹是因为所有其他答案都使用或提到了拜占士,我很好奇知道您为什么拒绝了它?(似乎支持recordmydesktop)。
phils 2014年

@phils我无法让拜占士使用可变的持续时间,我不得不给它预定的持续时间。recordmydesktop可以使用终止信号。
马拉巴巴

我曾经xwininfo确定要使用的正确ID(wminfo我的系统上没有)。
YoungFrog

我还注意到了摄录机使用的较新版本outer-window-id(而不是window-id),并且不再需要偏移量,但是这种变化还没有达到稳定的melpa上。
YoungFrog

1
@YoungFrog感谢您的提醒。我现在已经发布了稳定版本。
马拉巴巴

20

在/ 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
  • LICEcap(Windows和OS X)
  • 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

要显示击键,您只需要一个显示击键的应用程序。key-mon为此提供了一个GUI应用程序。当然,有一种Emacs模式可以显示按下的键:command-log-mode


您能详细说明这些命令吗?捕获帧的频率如何?
马拉巴巴


4

我用拜占士录制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(您可以根据需要更改时间和位置。)


它支持录制和显示击键吗?
erjoalgo

@erjoalgo不,它不显示击键。
CodyChan

2

还有一个使用QuickTime播放器的选项(它在OSX上有效,在Windows上我不知道)。要求是:ffmpeggifsicle

  • 打开QuickTime并启动File-> New Screen Recording
  • 完成后,选择“文件”->“导出”->“具有电影质量”的影片
  • 现在,使用以下命令转换屏幕投射:
    • ffmpeg -i yourscreen.mov -s 600x400 -pix_fmt rgb24 -r 10 -f gif - | gifsicle --optimize=3 --delay=3 > out.gif
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.