Kit Katには、開発者向けの機能として画面をMPEG4形式で録画する機能がある。GUIアプリケーションになって、画面表示のチェックはかなり難しくなった。特に3Dを使ったアプリの画面チェックはかなり面倒だ。テストしていて、一瞬画面が崩れたり、ときどき描画が一部はみ出していたり、あるいはポリゴンの裏表が逆(テクスチャがおかしくなる)といった問題が出ることがある。また、長時間の処理の途中でエラーが起こるような場合、画面をビデオで撮影することもある。

筆者のように機器の評価を行う場合でも、たとえば、バッテリの駆動時間を見るような場合、機材と時計を一緒に撮影して電源が落ちるまで録画を行うようなこともある。

そういうわけで、開発時には、画面の録画ができるといろいろと便利なことが多い。Kit Katの画面録画機能(Screenrecordコマンド)は、そういう開発者の意向を汲んだものなのであろう。

また、画面のキャプチャを大量に行うような場合、本体だけでも撮影は可能なのだが、本体のキーを操作する方法だと、たとえばアイコンをドラッグしている最中のキャプチャは行うことができない(連載の第47回、画面キャプチャの回参照)。

こんなとき、動画を撮影しておいて、あとから画像を切り出すことができれば、かなり作業が楽になる。もちろん、アプリやアンドロイドの動きを解説するのに動画そのものを使うということもありえるだろう。

画面録画コマンドを使う

Kit Katの画面録画は、screenrecordというコマンドなので、アンドロイドSDKをインストールしてあるPCとアンドロイド機をUSBケーブルで接続し、USBデバッグ機能を使う。シェルからscreenrecordというコマンドを起動すれば、録画が行われる。出力ファイルはMP4形式で、解像度やビットレートを指定可能だ。かなり便利そうだが、最大で3分しか録画できない。つまり、延々と操作したものをキャプチャしてあとから編集というわけにもいかないのである。

コマンドの書式は、


screenrecord [オプション] 録画ファイル名

となっている。オプションには、以下のようなものがある。


--size 幅x高さ
--bit-rate レート
--time-limit 時間
--rotate
--verbose
--help

「--size」オプションは、キャプチャするビデオの解像度を、例えば「--size 1080x1920」などと指定する。何も指定しなければディスプレイのサイズ(Nexus 5なら1080×1920)となる。システムがサポートしているAVCエンコーダーのサイズを指定するといいとされているが、このサイズは簡単にはわからない。このため、何も指定せずに録画して、必要ならPC側で縮小などを行ったほうがいいかもしれない。

ビットレートは、100000~100000000の間で指定可能だが、あまり高くすると、ファイルサイズが大きくなるだけでなく、再生できるプログラムがない。10Mbps(10000000)程度が限度と思われる。指定は「--bit-rate 100000」などのように行う。

録画時間は、秒で指定し、最大は180(秒)で、このオプションを指定しない場合は、180秒が設定される。指定は「--time-limit 180」のように秒を数字でそのまま指定する。

回転は、画面を90度回転させて行う。標準では、アンドロイドの画面と同じく縦長になり、「--rotate」を指定すると横長の画面になるが、画面表示は、そのままなので、横向きの画面になる。これは、PC側などで再生する場合に縦方向が短くなるためウィンドウがはみ出さないという利点がある。

「--verbose」は、起動前などに設定情報などを表示し、「--help」はオプションの指定方法などを表示するものだ。

録画ファイル名の指定では、拡張子なども自動的にはつかないため、完全に指定する必要がある。また、アンドロイドの場合、どこでも書き込みができるけではなく、PC側からのアクセスを考えると、/sdcardの下のフォルダに保存するのがいいだろう。たとえば、ここには、「Movies」などのフォルダがある。コマンドラインなので、ファイル名にパスを付けなければ、カレントディレクトリに対して書き込みが行われる。あらかじめcdコマンドで書き込み可能なフォルダへ移動するか、録画ファイル名にパスをつけておく。

たとえば、カレントフォルダを使うなら、


cd /sdcard/Movies
screenrecord test01.mp4

などとし、直接パスを指定するなら、


screenrecord /sdcard/Movies/test01.mp4

などとする。

なお、録画は、--time-limitで指定した時間か、もしくは180秒(3分)経過したときに自動的に終了する。それ以前に終了させたい場合には、Ctrl-Cを使うが、Windowsのコマンドプロンプトでadb shellを実行している場合、シェルそのものも終了してしまいcmd.exeに戻ってしまう。続けてアンドロイドのシェルで作業を続けたい場合には、時間指定して止めるようにしたほうがいいだろう。

オンラインヘルプを表示させたところ。録画動作の指定用オプションは4つ。残り2つはヘルプと詳細情報を表示するオプション

--Verboseオプションを付けると、解像度やビットレートなどの情報を表示するが、つけないと録画時間とファイル名の表示のみとなる

画像の質

標準の4Mbpsでもそこそこ綺麗な動画になるが、画面が急減に変化したあとなどに画面が荒れたままになることが多い。たとえば、ホーム画面からアプリボタンを使ってアプリ画面へ移動した直後の画面はかなり荒れたままになる。ただし、アプリ画面でとなりの画面などに移動してから戻ってくれば、少しまともになる。

なお、キャプチャした動画をPC側に転送するには、adb pullコマンドを使うと簡単だ。もう1つコマンドプロンプトウィンドウを起動して、そこから、


adb pull /sdcard/Movies/test01.mp4

などとすれば、Windows側のカレントディレクトリにtest01.mp4ファイルが転送される。コマンドプロンプトウィンドウを別にしておけば、いちいち、シェル側からcmd.exeへともどる必要がない。

動画をキャプチャして、画面キャプチャの代用になるかどうかは、ちょっと微妙なところだ。もう少し長い時間キャプチャできるのなら便利になるとはおもうのだが。デバッグ用だとしても、この長さだとアンドロイドの画面を見ながら、3分以内にキャプチャしたい画面が出るようにコマンドの起動タイミングを合わせる必要がある。何もないよりはマシではあるが、どういう使い方をするのにせよ、もう少し長い時間録画できたほうが便利だったのではないかと思う。

PC側での再生だが、mp4を再生できるはずのプレーヤーソフトは多いが、再生できないプレーヤーもいくつかあった。たとえば、Windows Media Playerでは解像度のせいか再生がエラーになった。いくつか試してみたがよさそうなのはVLCプレーヤーだった。このアプリケーションには、画面キャプチャコマンドがあり、再生中の動画から画面キャプチャを行える。QuickTimeでもできるのだが、動画を縮小表示にしているとキャプチャの解像度も縮小してしまう。これに対してVLCプレーヤーの画面キャプチャは、再生時の縮尺にかかわらず、オリジナルの解像度でキャプチャしてくれるのに加え、キャプチャファイルの自動連続番号機能まである。

ホーム画面からアプリ画面に移行したとき、かなり画像の質が落ちる(左)。しかし、他のページに移動して戻ってくるとあまり質が落ちない(中)。また、標準の倍になる8Mbpsで録画すると少し品質が上がる(右)

PCでは、VLCプレーヤーで再生すると、画面キャプチャもできて便利だ

関連リンク

連載バックナンバーはこちら