Linuxでスクリーンキャストを作成するには

 何らかのハウツーを示す際、一連のスクリーンショットを順番に写し出すビデオという形で単純なスクリーンキャストを用意しておくだけで、言葉でいくら説明しても説明できないようなことを簡単に説明できることも多い。Linuxといくつかのオープンソースのアプリケーションを利用すると、そのようなスクリーンキャストの作成を簡単に行なうことができる。

 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の映像のみのストリームだ。そこで次のステップでは、この映像に音声を追加しよう。

音声の取り込み

 スクリーンキャスト用の音声を取り込むには、Audacityを利用すると良い。なお当然ながらコンピュータに接続したマイクが必要であり、音声の品質はそのマイクの品質に依存することになる。

 録音を始めるには、Audacityを起動してツールバーにある赤い録音ボタンを押す。録音が完了したら、音声ファイルをWAVファイルとして保存(「File(ファイル)」→「Export As WAV(WAVとして出力)」)する。WAV形式では通常は非圧縮で保存されるため、音質が低下することはない。

 録音を行なうタイミングは、スクリーンショットを作成している最中でも良いし、ビデオファイルにまとめた後でも良い。私自身はその両方の時点で録音するのが良い方法だと考えている。私の場合いつも(台本を作り)スクリーンショットを撮りながら台本の一度目の読み上げを行なう。そしてスクリーンショットをビデオにまとめた後、ビデオを再生しながらもう一度台本を読むようにしている。このようにスクリーンショットを取りながら一度台本を通して読むことで、適切なタイミングでスクリーンショットを取ることを確実にすることができる。そして音声の二度目の録音の時は、すでに完成したビデオを見ながら台本の読み上げを行なうので、録音作業に集中することができる。

音声と映像の結合

 スクリーンキャスト作成の最後のステップは、音声と映像を結合することだ。これを行なう方法の一つとして、MJPEGツールキットに含まれている音声/映像多重化ソフトのmplexを利用することができる。しかしその前にまず、下のようなコマンドを利用して、音声ファイルをWAV形式からmplexで使用可能な形式に変換する必要がある。

$ ffmpeg -i audio.wav audio.mp3

 ここでは、FFmpegを使って元のWAVファイルをMP3形式へ変換している。なおこの変換はAudacityでも行なうことができる。

 音声と映像の結合は、以下のコマンドで行なう。

$ mplex -f 3 -o final.mpg capture.m2v audio.mp3

 上記のコマンドによりmplexは、capture.m2vとaudio.mp3を結合してfinal.mpgを作る。なお「-f」オプションにより、ビデオファイルの形式としてMPEG2を指定している。このコマンドが完了すると、final.mpgとして音声と映像の両方の入ったスクリーンキャストが出来上がる。

 最終的なスクリーンキャストの作成には、ノンリニアビデオ編集ソフトのKinoを使うこともできる。Kinoを使うとさらに、スクリーンキャストにタイトルやトランジションなどのエフェクトを追加することもできる。またKinoでは、スクリーンキャストに別のスクリーンキャストやビデオカメラで撮影した映像を混ぜることもできる。

 Kinoを使うためには、スクリーンキャストのビデオをDV(Digital Video)形式に変換する必要がある。

$ ffmpeg -i capture.m2v -target ntsc-dv capture.dv

 上記では「-target」オプションを指定してffmpegを実行することで、ファイルをNTSC互換のDV形式のビデオに変換している。

 下準備が整ったので、実際にKinoを使って音声トラックを追加してみよう。まずはKinoで、DVファイルを読み込む(「File(ファイル)」→「Insert Before(前に挿入)」)。そして、FXツール(メインのウィンドウの右側にあるタブバーの中にある)を選択し、「Audio Transition(オーディオトランジション)」タブ上で値を「Dub(ダブ)」に変更し、音声ファイルの指定を行なえば音声の追加は完了だ(なおKinoはWAVファイルしか受け付けない)。音声と映像の結合結果をファイルに出力する前に、画面のいちばん下にある「Preview(プレビュー)」ボタンを押し、最終的なビデオの映像と音声を確認しよう。その状態に満足したら「Render(出力)」ボタンをクリックしてビデオを作成する。この後は、Kinoから直接、ビデオを様々な形式に変換することができる。

まとめ

 以上から分かるように、Linux上でスクリーンキャストを作成するのはそれほど困難ではなく、また、スクリーンキャストの作成を身に付けてしまえば、さまざまな場面で役立たせることができる。例えば、あなたのウェブサイトの訪問者のためにハウツーの一部で視覚的な補助資料を用意したり、アプリケーションを友人に見せびらかしたり、上司向けにものすごく充実したプレゼンテーションを作成したりすることができる。

Chad Filesはアーカンソー在住のソフトウェア開発者。ウェブベースのアプリケーション開発の経験が10年以上あり、数多くのオープンソースプロジェクトの開発にも貢献している。

NewsForge.com 原文