Termuxでスマホを監視カメラ化 その(2)

しょくぶつ(^^)です。
前回からの続きです。

Termuxでスマホを監視カメラ化 その(1) - しょくぶつ(^^) のブログ

手順10 SDカードに書き込み用ディレクトリを作成

動画キャプチャーを続けると内蔵メモリをすぐ使い切ってしまう恐れがあります。
できればこの時点でSDカードで書き込める場所を確保しましょう。
※ 次のURLを参考にしました。これは気付かない。本当に助かりました。
山田 徹|UserLAndでSDカードにアクセス>

(1) ディレクトリの作成

SDカードへの書込にはかなり制限があります。
そこで、ここでは書き込みが可能なディレクトリを作ります。
やや乱暴ですが、次の方法です。

a) スマホをUSB接続して、ファイル転送モードとします。
b) Windows上のエクスプローラーからスマホが見えるはずです。
 その中にSDカードが見えるはずです。
c) SDカードの中を見ます。
d) Android/media の中に com.termuxをフォルダを作ってください。
※ 具体的な場所は、スマホがSH-M08だと、
PC\SH-M08\SDカード\Android\media\com.termux

(2) SDカードの場所をadb, Termux, ubuntuの各環境で確認

adb, Termux, ubuntuの各環境でSDカードを示す場所が異なるので、それぞれ確認します。
私の場合はSDカードの場所は次の通りでした。
adbシェル /storage/76F6-1316
Termuxシェル わかりませんでした!! ※手順14でちょっと問題になります。
ubuntu環境 /storage/76F6-1316

(3) 動画を書き込めるか確認

手動で構わないのでスマホをカメラアプリなどに切り替えた上で、Windows PCからssh接続してTermuxに入り、コマンドを入力します。

※ Termuxから。
adb -t (デバイスid) shell screenrecord --time-limit 3 --verbose (SDカードの場所)/testrecord.mp4

私が試したときはこうでした。

adb -t 4 shell screenrecord --time-limit 3 --verbose /storage/76F6-1316/Android/media/com.termux/testrecord.mp4

うまく動画を撮れたでしょうか?
これでSDカードに動画を書き込めることを確認できたわけです。

手順11 連続撮影のスクリプトを用意

引き続き、Windows PCからssh接続してTermuxに入った状態だとします。
連続撮影のスクリプトを用意します。
スクリプトは次の通りですが、
・デバイスid
・アプリのパッケージ詳細情報
・SDカードの保存場所
は前回「Termuxでスマホを監視カメラ化 その(1)」で苦労して調べた情報に修正してください。

#!/data/data/com.termux/files/usr/bin/sh
while true
do
        adb -t 4 shell am start -n jp.co.sharp.android.camera/.stillimagecamera.VoiceActivity
        adb -t 4 shell screenrecord --time-limit 60 --bit-rate 400000 --verbose /storage/76F6-1316/Android/media/com.termux/$(date +%Y%m%d%H%M%S).mp4 done

オプションの --time-limit 60 は60秒撮影です。
60秒に制限した理由は、私のスマホだとカメラアプリが一定時間で自動終了してしまうためです。
オプションの --bit-rate 400000 は動画のビットレートです。
ちょっとコマ撮り感がありますが、あまり大きくするとすぐにストレージが満杯になってしまいます。
( 400000 [bit/秒]なので 400000 / 8 [bit/byte] × 約10-6 [M] × 60[秒/分] = 約3 Mbyte/分ですね。)
 
このスクリプトをrecordtest.sh といった名前で作成して、Termuxシェル上の ~ に置いてください。
理由は、スクリプトファイルは ~ に置いたものしか実行できなかったためです。
なお、このスクリプトを作成するに当たり、Windows上で作ってからファイル転送すると動作しないかもしれません。
改行コードにCRが入っているのが原因で、それを除くのは次のコマンドです。

※ Termuxから。
sed -i 's/\r//' *.sh

※参考URL
エディターでは分かりにくい、.shなのに実行できないスクリプトファイルの確認方法 #Bash - Qiita

手順12 撮影開始 !!

次のコマンドで撮影開始です!!

./recordtest.sh

自動で標準カメラアプリに切り替わって、動画が延々と増え続けるはずです。
PCからssh接続して実行すると接続OFF時点で撮影も止まるので、実際に監視カメラとして撮影する際はスマホ上のTermuxから直接実行した方がいいです。

手順13 動画の回収ついて

撮った動画はどう回収するのでしょう?
スマホを監視カメラ化するということはPCから離れた場所にスマホを置いて、USB接続して動画を回収するのは面倒なはずです。
方法は2つあります。

方法1 大容量のSDカードに保存

ビットレート400000 [bit/秒]≒ 3 [Mbyte/分]だと、ざっと、
 3 [Mbyte/分] ×(60×24/1000) = 4.32 [Gbyte/日]
なので、128 GbyteのSDカードならば、
 128 [Gbyte ] / (4.32 [Gbyte/日] ) = 29.6 [日]
ですね。
もうちょっとビットレートを小さくすれば1ヶ月に1回、SDカードを回収すればいいわけです。
でもそのたびにスマホを撮影停止して、せっかく位置合わせしたスマホを手で動かしてしまうのも面倒かもしれません。

方法2 Wi-Fi経由でPCから回収

Windows PCにもadbをインストールして、adbのpullコマンドを使ってスマホからPCへWi-Fi経由で動画を回収します。
(1) adbをWindows PCにインストール
(2) 手順4と同じ方法でWindowsからスマホに接続
(3) 手順5と同じ方法でデバイスidを確認。
(4) 動画ファイルを回収
adbのpullコマンドで動画ファイルを回収します。
残念ながらワイルドカードは使えないので、com.termuxディレクトリの中のファイルを全部回収することになります。

※ WindowsのPowershellから
adb -t (デバイスid) pull (SDカードの場所)/com.termux/ c:\tmp\

私の試行例は次の通りです。

adb -t 19 pull /storage/76F6-1316/Android/media/com.termux/ c:\tmp\

手順14 スマホ内の動画をWi-Fi経由で消去

スマホのSDカード内に大量に溜まった動画をWi-Fi経由で消去するにはTermuxを使います。
Windows PCからssh接続でTermuxに入り、rmコマンドで消去すればいいです。
ただし、手順10の(4)で「Termux わかりませんでした!! ※手順14でちょっと問題になります。」と書いたように、TermuxシェルからSDカードが見えないことがあります。
その場合はadbシェルを使うか、ubuntuに入って( proot-distro login ubuntu ) ubuntuシェルを使います。  
次回では監視カメラとしての使用を実践してみます !!