LoginSignup
71
60

More than 3 years have passed since last update.

コマンド一発でAndroidの画面を録画してGIFを作成する

Last updated at Posted at 2016-04-18

2019年7月追記
意外とみんな困ってそうなので3年ぶりにアップデート
余計かもしれませんが ずっと使っていて便利だったので、Slackまでそのまま上げられるようにするコマンドも追加しておきます。

YOUR_PATH に保存先
スクリプトはgit管理していて公開しているので、Slackのtokenは YOUR_SLACK_TOKEN を環境変数としてtoken.confに定義しています。
パスが個人的なものになっているので、
消すなりgit管理してない人は直接token書いてしまっても良いと思います。

gifサイズは大きくなりがちなので、ffmpegのオプションで scale=iw*2/3:ih*2/3 とかを変えてあげるとサイズが割と小さくなります。
経験則では画質を下げてもそこまで容量が下がらない&&荒くなるので 動画のサイズを小さくした方がいいです。
端末そのままのサイズで録画されるので、最近の端末だとoriginalサイズは4kとかになったりする

↑ 追記文


デザイナーやチームの他のメンバーの人と、
どんな動きをするのか等 UI/UXのやり取りをする際に
GIFを作成してslack等に送りたい時が多々あるのですが、
録画して...変換して...とやっていると中々手間だったりします。
コマンド一発で接続している端末の録画をし、
とりあえずデスクトップに動画とGIFを保存するスクリプトを書きました。
YOUR_PATHの箇所を変更すれば、好きな場所に保存されます。

スクリーンショット バージョンはこちら

環境

  • 今回はOSXでbash使ってます
  • adbのpathが通っている前提
  • GIF変換までする方はffmpegをインストールしておいて下さい mac(brew) -> brew install ffmpeg
  • Androidの端末バージョンは4.4以上

Script

以下のスクリプトを作成します

adb-screen-record.sh
#!/bin/sh

DATE=`date '+%y%m%d%H%M%S'`
FILE_NAME=record-${DATE}
YOUR_PATH=~/Desktop

SCRIPT_DIR=`dirname $0`
cd $SCRIPT_DIR # move script directory
source ../token.conf # gitに上げないように slackのtokenは別管理
SLACK_TOKEN=$YOUR_SLACK_TOKEN

adb shell screenrecord /sdcard/${FILE_NAME}.mp4 &
pid=`ps x | grep -v grep | grep "adb shell screenrecord" | awk '{ print $1 }'`

if [ -z "$pid" ]; then
  printf "Not running a screenrecord."
    exit 1
fi

printf "Recording... finish? [y]"
while read isFinished; do
  case "$isFinished" in
    "y" | "Y") break ;;
    *) printf "Incorrect value." ;;
  esac
done

kill -9 $pid # Finish the process of adb screenrecord

while :
do
  alive=`adb shell ps | grep screenrecord | grep -v grep | awk '{ print $9 }'`
  if [ -z "$alive" ]; then
      break
  fi
done

printf "Finish the recording process : $pid\nSending to $YOUR_PATH...\n"

adb pull /sdcard/${FILE_NAME}.mp4 $YOUR_PATH
adb shell rm /sdcard/${FILE_NAME}.mp4

echo "Convert to GIF? [y]"
read convertGif
case $convertGif in
    "y" | "Y") ffmpeg -i ${YOUR_PATH}/${FILE_NAME}.mp4 -an -r 12 -pix_fmt rgb24 -vf scale=iw*2/3:ih*2/3 -f gif ${YOUR_PATH}/${FILE_NAME}.gif # creating gif 
                        ;;
    *) ;;
esac

echo "Upload to slack? [y]"
read isUpload
case $isUpload in
  "y" | "Y") ;;
  *) exit 0;; 
esac

echo "Input channel name : "
read channelName

curl -XPOST -F "token=$SLACK_TOKEN" -F "channels=#$channelName" -F "file=@${YOUR_PATH}/${FILE_NAME}.gif" -F "filename=${FILE_NAME}.gif" "https://slack.com/api/files.upload"

録画はyを入力すると終了します。
その後、yを押すとGIFへ変換されます。
他のボタンを押すと終了します。

このスクリプトを任意の場所に保存し、
.bash_profile等にpathを書いておけば
任意の場所から adb-screen-record.shのコマンド一発で
デスクトップに変換・保存されます。

adb screenrecordの制約で録画時間は3分までになっています。
今回はデフォルトの値を利用してますが、録画サイズなどを指定したい場合はこちらを見てパラメーターを設定して下さい。
GIF変換のオプションを変更する場合はこちらを見て下さい。

screenrecordを終了してすぐに送信するとエラーが起きるので
sleep 3としましたが、他に何か良い方法がありましたら教えて下さい。
-> @aremokoremoさんに教えていただいた方法を追記しています

71
60
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
71
60