ゲーム開発とかしてるときに、100時間くらい放置すると発生するバグってありますよね(僕だけだったら悲しい)。そういうバグを検証するために、人間が労力を使うのは面倒です。起動しっぱなしにして、画面を定期的に録画しましょう。ついでにslackにうpしましょう。
こちらが今回の完成コードです
while :
do
filename=/tmp/$(hostname).mp4
vlc screen:// --no-interact --sout "#transcode{vcodec=h264,vb=3072}:standard{access=file,mux=mp4,dst=${filename}}" &
pid=$!
sleep 30
kill -SIGINT ${pid}
sleep 10
kill -SIGINT ${pid}
sleep 10
./slack file upload $filename $CHANNNEL_NAME
sleep 3600
done
コマンドラインから画面録画する
VLCを使います。インストールは brew cask install vlc
。
MacならQuicktimeで画面録画するのが普通だろう、という声がありそうですが、調べてみても、コマンドラインから叩くにはapplescriptを使わなきゃいけなそうで、正直面倒でした。その点VLCは最初っからcliツールがついてくるので素敵。
この辺( https://stackoverflow.com/questions/22084098/vlc-screen-capture-using-terminal )の議論を参考にして、なるほど、コマンドラインから画面録画を起動して、適当にSIGINT送ればエンコードして保存してくれるんだな、と。
ということで上記のコマンドの vlc~~~dst=${filename}
で起動して、 pid=$!
でpid記録しておいて、 kill -SIGINT ${pid}
でうまくいきました。ただ、SIGINT送った時点ではエンコード始まるだけっぽくて、その後適当にsleepしてます。pidがpsからなくなるまで待つ、ってやったほうが綺麗かと思います。
ちなみに僕は、複数台で再現実験を同時にやるために、ファイル名にhostnameをつけてます。
slackに動画を投稿する
この機能はおまけですが。slackに動画投稿しておけば、自分以外の誰かがこの実験確認したいときにも便利かな、と。
slack-cli( https://github.com/rockymadden/slack-cli )を使います。
インストールは curl -O https://raw.githubusercontent.com/rockymadden/slack-cli/master/src/slack
。
いくつかあるslackのcliの中でもコマンドが整理されてて使いやすいです。 slack file upload ファイル名 チャンネル名
でサクッと投稿できました。