EmacsのGIFスクリーンキャストを記録する


35

多くの人がアニメーションGIFを投稿してEmacsの機能を披露しているのを目にしますが、それを作成することについての良い説明はありません。gifのキーフレームをEmacsのキー押下にリンクしようとするコードはありますか?プロセスを自動化するelispパッケージまたは関数はありますか?キーを押して記録を開始し、もう一度押して停止し、gifを保存するファイル名の入力を求められるようにしたいと思います。

関連する質問、Emacs内からより長いスクリーンキャストを記録するためのパッケージはありますか?


質問の90%はトピックから外れています-(Emacsまたはその他の)アニメーションGIFを作成するツールについて質問しています。トピックに関する唯一の部分は、そのプロセスを自動化するElispコードを要求することです。質問のタイトルと本文を編集して、アニメーションGIFの作成を容易にするElispコードのみを尋ねることを検討してください。
ドリュー

Windowsの代替を探しているなら、ScreenToGif(screentogif.codeplex.comを参照)があなたの友人かもしれません。これは、画面の一部を指定してフレーム化したり、記録したり、テキストで編集したり、必要に応じてフレームを削除したり、スピードアップしたり、スローダウンしたりすることができる実行可能ファイルです。スクリーンキャストに使用します。
-ReneFroger

回答:


24

はい、Emacsでスクリーンキャストを記録するためのパッケージがあります。

camcorder.el

私は自分のコンピューターでテストしただけなので、まだ何も約束することはできませんが、私にはうまくいくと言えます。:-)

  • 使用するには、単にを呼び出しますM-x camcorder-record
  • 新しい小さなフレームがポップアップ表示され、記録が開始されます。
  • 終了したら、ヒットF12して変換が完了するのを待ちます。

スクリーンキャストは、imagemagickconvertコマンドが理解できる任意の形式で生成できます 。録音を一時停止することもできますF11

ポップアップフレームなしで記録する場合は、を使用しますM-x camcorder-mode

依存関係

記録にcamcorder.elは、次のLinuxユーティリティを使用します。これらがあれば、すぐに使えるはずです。他の何かを使用する場合でも、camcorder-recording-command変数を構成することで機能させることができ ます。

  • 記録的な
  • mplayer
  • imagemagick

トラブルシューティング

私のマシンでは、window-id Emacsが

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

WMがwminfoユーティリティで報告したIDとは異なります。

それcamcorder-window-id-offsetを修正するために変数を追加しました。デフォルト値はですが-4、これらの2つの数値を一致させるには、値を増減する必要がある場合があります。


純粋に、他のすべての回答がビザンツを使用または言及しているため、なぜあなたがそれを拒否したのか知りたいですか?(recordmydesktopを支持するようです)。
フィル14年

@philsビザンツを可変長で動作させることができなかったので、事前に決められた長さを指定する必要がありました。recordmydesktopは、キルシグナルで動作します。
マラバルバ14

使用xwininfoする適切なIDを決定するために使用していました(wminfoシステムに持っていません)。
YoungFrog

また、カムコーダーの新しいバージョンouter-window-id(ではなくwindow-id)の使用に気づき、オフセットはもう必要ありませんが、この変更はまだmelpa-stableには反映されていません。
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があります


それらのコマンドについて少し詳しく教えてください。それでフレームはどれくらいの頻度でキャプチャされますか?
マラバルバ14年


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

そして、これを$ PATHのrw(record window)に:

#!/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いいえ、キーストロークは表示されません。
CodyChan

2

QuickTimeプレーヤーを使用するもう1つのオプション(OSXでは動作しますが、Windowsではわかりません)。前提条件は以下のとおりです。ffmpeggifsicle

  • 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.