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
以下のスクリプトを作成します
#!/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さんに教えていただいた方法を追記しています