2013年11月16日土曜日

Android4.4KitKatでscreenrecordを使ってみる

歳を取った瞬間したことは AdventCalendarの更新でした。
Android 4.4 KitKat 冬コミ原稿リレーを開催」の11/16担当、mochicoです。
本記事ではAndroid4.4KitKatで追加されたadbの機能、screenrecordについてお話します。

超訳 Recording a device screen

http://developer.android.com/tools/help/adb.html#screenrecord

screenrecordはAndroid4.4(API level 19)以上で動作するディスプレイ録画のシェルコマンドです。
MPEG-4ファイルとして書き出され、プレゼンテーションの一部などに使用することができます。
別の端末等でわざわざ使用方法の動画を作ったりしなくてよくなるので、便利です。

AndroidのSDKにパスが通っていれば、KitKat端末をつないで

$ adb shell screenrecord /sdcard/ファイル名.mp4

で記録を開始します。--time-limitオプションをつけなければ

3分間待つ  or  Ctrl-C

で録画を終了します。端末に保存されます。
ギャラリーからも確認することができます。

PCにファイルを持ってきたい場合は

$ adb pull /sdcard/ファイル名.mp4

注意:
・端末によっては解像度の問題で記録ができない場合があります。解像度のオプションを変更してみてください・記録中の画面回転には対応していません。記録中に画面の回転が起こった場合、記録が中断されます
・音声は記録されません

オプション
--help 使い方を表示します
--size 画面サイズを指定します。デフォルトは端末のメインディスプレイの解像度です(サポート外の大きさの場合1280x720になります)。デバイスのAVCエンコーダーでサポートされているサイズを使用するのが一番良いです。
--bit-rate ビットレートを指定します。クオリティと容量がトレードオフになります。デフォルトで4Mbpsです。
sceenrecord --bit-rate 6000000 /sdcard/ファイル名.mp4
--time-limit 180秒以内で記録秒数の最大値を指定します。
--rotate 出力を90度回転させます。実験的な機能だそうです。
-- verbose Logをコマンドラインに表示します。これを指定しないと記録中特に何も表示されません。

超訳ここまで//

ちなみに、このscreenrecordはシステム権限が必要なためアプリからは使用できないようです。
また、バーチャルデバイスで記録を行うこともできません。

AndroidStudioでやってみる

AndroidStudio0.3.2からscreenrecordの機能が追加されていました。
こちらも(AndroidStudioさえ正常に動いていれば)超簡単なのでやってみましょう。


AndroidDDMSの左側ツールボタンに緑色のScreenRecordボタンを押します。


ビットレートと解像度を指定してStartRecordingをクリックします。


記録中のダイアログが出るので、任意のタイミングでStopRecordingをクリックします。

PC上の保存先を指定します。


記録が完了しました。
コマンドで行ったのと同様、mp4ファイルは端末上にも保存されています。

screenrecordの使いどころ
今まではPC上のバーチャルデバイスを録画するなどして作らなければならなかった動画を作る手間は大幅に省かれるでしょう。
root権限を取得したり、アプリを新しいアプリを入れる必要もありません。
解像度やビットレートも指定できるので、あとから動画を軽くする必要もありません。
GooglePlayに使いかたをあげたり、動きのプレビューを気軽に共有できるようになります。
issueに動画をつけるなんてのも簡単ですね!


screenrecordのコードは以下から確認できます。
http://tools.oesf.biz/android-4.4.0_r1.0/xref/frameworks/av/cmds/screenrecord/screenrecord.cpp

コレを使ってASMみたいにPCにミラーリングできないかなぁと眺めていますが、むずかしいですね。

明日は11/17 @sys1yagi さんの「Printing Framework後編」です。