Emacs의 GIF 스크린 캐스트 녹화


35

애니메이션 GIF를 게시하여 많은 사람들이 Emacs 기능을 과시하는 것을 보았습니다. GIF의 키 프레임을 Emacs의 키 프레스에 연결하려고하는 코드가 있습니까? 프로세스를 자동화하는 elisp 패키지 또는 기능이 있습니까? 키를 눌러 녹음을 시작하고 다시 눌러 중지하고 gif를 저장할 파일 이름을 묻는 메시지를 표시하고 싶습니다.

관련 질문, Emacs 내에서 더 긴 스크린 캐스트를 녹화하기위한 패키지가 있습니까?


질문의 90 %는 주제가 아닙니다. (Emacs 또는 다른 것의) 애니메이션 GIF를 만드는 도구에 대해 묻습니다. 주제의 유일한 부분은 해당 프로세스를 자동화 할 Elisp 코드를 요청하는 것입니다. 애니메이션 GIF를 쉽게 만들 수 있도록 질문 제목과 본문을 편집하여 후자를 요청하십시오.
Drew

Windows 대안을 찾고 있다면 ScreenToGif (screentogif.codeplex.com 참조)가 친구가 될 수 있습니다. 실행 가능한 화면의 일부를 프레임으로 녹화하거나 녹화하거나 텍스트로 편집하거나 프레임을 삭제하거나 속도를 높이거나 원하는 경우 속도를 늦출 수있는 실행 파일입니다. 스크린 캐스트에 사용합니다.
ReneFroger

답변:


24

네, Emacs에서 스크린 캐스트를 녹화하기위한 패키지가 있습니다.

캠코더

내 컴퓨터에서만 테스트했기 때문에 아직 약속 할 수는 없지만 그것이 효과가 있다고 말할 수는 있습니다. :-)

  • 사용하려면 간단히 전화하십시오 M-x camcorder-record.
  • 새로운 작은 프레임이 팝업되고 녹화가 시작됩니다.
  • 완료되면을 누르고 F12변환 이 완료 될 때 까지 기다리십시오.

스크린 캐스트는 imagemagickconvert명령 으로 이해되는 형식으로 생성 할 수 있습니다 . F11!로 녹음을 일시 정지 할 수도 있습니다 .

팝업 프레임없이 녹화하려면을 사용하십시오 M-x camcorder-mode.

의존성

레코딩 camcorder.el에는 다음 Linux 유틸리티를 사용하십시오. 이것들이 있으면 즉시 사용할 수 있습니다. 다른 것을 사용하는 경우 camcorder-recording-command변수 를 구성하여 계속 작동시킬 수 있어야 합니다.

  • 레코드
  • mplayer
  • 이미지

문제 해결

내 컴퓨터에서 window-id Emacs가

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

WM이 wminfo유틸리티 와 함께보고 한 ID와 다릅니다 .

camcorder-window-id-offset수정하기 위해 변수 를 추가 했습니다. 기본값은입니다 -4. 그러나 두 숫자를 일치 시키려면 값 을 늘리거나 줄여야합니다.


순수하게 다른 모든 대답이 비 잔츠를 사용하거나 언급했기 때문에 왜 거절했는지 궁금합니다. (recordmydesktop에 찬성하여 보입니다).
phils

@phils 나는 byzanz가 가변 지속 시간을 사용할 수 없었으므로 미리 정해진 지속 시간을 주어야했습니다. recordmydesktop은 kill 신호와 함께 작동합니다.
Malabarba '12

사용할 xwininfo올바른 ID를 결정하는 데 사용 했습니다 ( wminfo시스템에 없습니다 ).
YoungFrog

또한 outer-window-id(대신 window-id) 최신 버전의 캠코더 사용을 발견 했으며 더 이상 오프셋이 필요하지 않지만이 변경 사항은 아직 melpa-stable에 도달하지 않았습니다.
YoungFrog

1
@YoungFrog 미리 알림 주셔서 감사합니다. 나는 지금 안정된 출시를 추진했다.
Malabarba

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 .


이 명령들에 대해 좀 더 자세히 설명해 주시겠습니까? 얼마나 자주 프레임이 캡처됩니까?
Malabarba


4

Byzanz 를 사용 하여 gif를 기록했습니다.

먼저 설치 하고이 스 니펫을 $ PATH의 rr (record region)에 넣으십시오.

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

그리고 이것은 $ PATH에 rw (레코드 창)에 있습니다.

#!/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에서는 모르겠습니다). 필수 조건은 다음 ffmpeg과 같습니다.gifsicle

  • QuickTime을 열고 파일-> 새 화면 녹화를 시작하십시오
  • 옵션 최고 품질의 파일-> 내보내기-> 영화로 완료되면
  • 이제 다음 명령으로 화면 캐스트를 변환하십시오.
    • ffmpeg -i yourscreen.mov -s 600x400 -pix_fmt rgb24 -r 10 -f gif - | gifsicle --optimize=3 --delay=3 > out.gif
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.