Ubuntuでスクリーンをキャプチャしてアニメーションgifを保存する!!!【byzanz-record】

screencapture

Ubuntuでアニメーションgifをスクリーンキャプチャによって作ろうとしたのですが、そのためのアプリは標準搭載されておらず、インストールにつまづいたので備忘録的にメモしときます。

動作環境

  • Ubuntu12.04

byzanz-record

byzanz-recordは画面の位置を選択してその範囲のgif画像を作ることが出来るソフトです。

byzanz-recordのインストール

sudo add-apt-repository ppa:fossfreedom/byzanz # 途中でレポジトリを追加するか聞かれるのでEnter
sudo apt-get update
sudo apt-get -y install byzanz

使い方

byzanz-record --duration=15 --x=200 --y=300 --width=700 --height=400 out.gif

引数で保存したい映像の名前を指定します。(今回はout.gif)
オプションで値を指定することで画面の撮影をすることができます。

duration 撮影する時間
x 撮影する映像の左端の位置
y 撮影する映像の上端の位置
width 撮影する映像の幅
height 撮影する映像の高さ

問題点

全画面撮影したいといった時にウィンドウサイズを知っておく必要があったり、ある特定の部分だけ撮影したいといった時にその位置のx座標y座標を調整しなければいけない。

byzanz-record-window、byzanz-record-region

この問題を解決してくれるラッパーを見つけました。
byzanz-record-windowは全画面撮影用、byzanz-record-regionは画面選択撮影用です。
まずはbyzanz-record-windowから

全画面撮影 byzanz-record-window

byzanz-record-windowの作成

cd ~/ && touch byzanz-record-window
vi byzanz-record-window # 好きなエディタでどうぞ
#!/bin/bash

# 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 &
}

# Duration and output file
if [ $# -gt 0 ]; then
    D="--duration=$@"
else
    echo Default recording duration 10s to /tmp/recorded.gif
    D="--duration=10 /tmp/recorded.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 --x=$X --y=$Y --width=$W --height=$H $D
beep


chmod +x byzanz-record-window # 実行権限を与える
sudo mv byzanz-record-window /usr/local/bin # どこからでも起動できるように

使い方

byzanz-record-window

で起動させると、画面を選択出来ます。撮影したい画面上でクリック。
すると、撮影までのカウントダウンが始まります。
デフォルトの撮影時間は10秒、保存場所は/tmp/record.gifです。
撮影時間と保存場所を変えたい場合は、

byzanz-record-window 5 hoge.gif # 撮影時間5秒、保存場所hoge.gif

と引数に与えることで変更できます。
保存したgifは右クリックからブラウザで開くとかで見ることが出来ます!

画面選択撮影 byzanz-record-region

xrectselのインストール

byzanz-record-regionにはxrectselのインストールが必要です。

git clone https://github.com/lolilolicon/xrectsel.git
cd xrectsel
.bootstrap
.configure

.configureでエラーが出ました。

$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking for library containing XOpenDisplay... no
configure: error: libx11 is required

libx11がいるようなのでインストール(libx11というパッケージは無いようです)

sudo apt-get -y install libx11-dev

さて、もう一度

.configure
sudo make
sudo make install

byzanz-record-regionの作成

byzanz-record-windowの時とほぼ同じなので説明は省略

cd ~/ && touch byzanz-record-region
vi byzanz-record-region


#!/bin/bash

# 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 &
}

# Duration and output file
if [ $# -gt 0 ]; then
    D="--duration=$@"
else
    echo Default recording duration 10s to /tmp/recorded.gif
    D="--duration=10 /tmp/recorded.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


chmod +x byzanz-record-region
sudo mv byzanz-record-region /usr/local/bin

使い方

撮影する前に画面を選ぶのではなくドラッグで範囲を選択するということ以外はbyzanz-record-windowと同じです。

参考にしたサイト

How to create animated GIF images of a screencast? – ask
ubuntu

lolilolicon/xrectsel – GitHub
パッケージ: libx11-dev (2:1.4.99.1-0ubuntu2.3) – ubuntu
packages