Linux上でスクリーンショットを取るには、いくつかの方法がある。ここでは、ImageMagickのimportプログラムを使ったシェルスクリプトを使用する。
#!/bin/sh
# NTSC 720x486 in columns 88x27
i=0
while [ 1 ]
do
x=$[i+10000];
import -frame -window $1 "cap_${x/1/}.miff"
i=$(( $i + 1 ))
# sleep 2s
done
上記のシェルスクリプトはパラメータを一つ取り、パラメータによってスクリーンショットを取るべきウィンドウのIDを指定する。IDはxwininfo -frameコマンドを実行することで知ることができる。xwininfoプログラムではクリックにより指定したウィンドウについてのX11関連の全情報が示されるが、ここで必要なのは以下のような最初の1行だけだ。
xwininfo: Window id: 0xa0348b (has no name)
このID(この例の場合は「0xa0348b」)を上記のシェルスクリプトに与えよう。スクリプトは実行されると、実行されたディレクトリ内に、IDで指定されたウィンドウのスクリーンショットを保存する。なおこのスクリプトはユーザがCtrl-cを入力してインターラプトするまで実行を続ける。各スクリーンショット画像にはcap_XXXX.miffという形式の通し番号の付いた名前が付けられる。miff形式はImageMagick独自の画像形式だ。ImageMagickではサポートしている画像形式の中で、このmiff画像への書き込みが最も高速のため、ここではmiff形式を使用した。
ビデオファイルの作成
すべてのスクリーンショットを取り終わったら、その次はそれらのスクリーンショットを1つのビデオファイルにまとめる作業だ。ImageMagickのconvertプログラムを利用すると、すべてのmiffファイルを一つのビデオファイルに結合することができる。そこでスクリーンショットのファイルが置かれているディレクトリで以下のコマンドを実行しよう。
$ convert -antialias -resize 720x486! -delay 60 *.miff capture.m2v
- 「
-antialias」を指定すると、ジャギー(映像のギザギザ)が軽減される。これによりビデオの見掛けがより滑らかになる。 - 「
-resize」を指定すると、映像の画面の大きさが指定したサイズに変更される。この場合はNTSCビデオのサイズに変更される。なおNTSCは、北米におけるアナログテレビ用の標準サイズだ。 - 「
-delay」を指定すると、convertプログラムは各フレーム間にポーズ(一時停止)を入れる。上記の場合は0.6秒間のポーズを入れる。ただし、「-delay」に指定する値は、スクリーンキャストを作成する際、ほぼ毎回調整する必要があるだろう。というのもあなたが話す量やスクリーンショットの量が、作成するスクリーンキャストごとにほぼ毎回異なるためだ。 - ここでは指定しなかったが知っておくと良いオプションとして、画像を圧縮する際に使用する品質値を制御する「
-quality」がある。「-quality」でより大きな値を指定すると、ビデオファイルのサイズがより大きくなり画質もより高くなる。ただしこのオプションを使うと高負荷となって変換処理が追い付かずフレーム落ちの原因となることが多く、フレーム落ちがあまりに激しいとビデオは使えないものになってしまう。
上記のコマンドの実行結果は、capture.m2vという名前のファイルに出力される。m2v形式とはMPEG-2の映像のみのストリームだ。そこで次のステップでは、この映像に音声を追加しよう。
