はじめに
前回の記事まででは、ラズパイカメラを使って動画の撮影を行い、mp4形式で出力するところまで作りました。
今回は録画開始と録画終了をキー入力で行いたいと思います。
通常の入力では文字や文字列を入力した後にエンターを押さなくてはいけないのですが、撮影は繰り返し行うものなのでエンターキーを押すだけでも積み重なれば手間なのかなと思います。
という事で、今回は特定のキーを入力したら自動(リアルタイム)で動画の撮影を始めて、特定のキーで終了するようにしたいと思います。
readcharのインストール
pythonでリアルタイムのキー入力をサポートしてくれるモジュールが「readchar」です。
ラズパイに元々入っているわけではないので、LXTerminalを開いて次のコマンドでインストールします。
pip3 install reacher
インストール自体はこれだけで終わりです。
リアルタイムでキー入力が受付されるか確認する
まずはお試し。次のソースコードを実行してみます。
import readchar #キー入力用 key = readchar.readkey() #キー入力の受付 print(str(key)) #入力されたキーの表示
IDEでいつものように実行するとエラーが出てしまいました。
どうやらリアルタイムでのキー入力をIDEで実行する事が問題らしく、LXTerminalで実行すれば良さげ。
という事でLXTerminalで実行。
先ほどのソースコードを「test.py」として保存し、「test.py」のあるディレクトリまで移動してから次のコマンドで実行するとができます。
python3 test.py
キーボードで「1」や「a」などを入力すると同時にLXTerminal上に表示されるはずです。
録画開始と録画終了をリアルタイムキー入力受付で行う!
ここまでこれば、後はプログラムを書くだけです。
今回はラズパイカメラのプレビューも利用して、プレビューを見ながら録画の開始と終了ができるようにしてみました。
import picamera #カメラモジュール用 from chmp4 import chMp4 #mp4形式へ変換 import readchar #キー入力の受付 cap = picamera.PiCamera() #インスタンス生成 cap.resolution = (1920, 1080) #画像サイズの指定 mv_name = "movie" #保存ファイル名 cap.start_preview(fullscreen = False, window = (100,100, 480, 640)) #プレビューの開始 window = (x,y,h,w) while True: key = readchar.readkey() #キー入力の受付 if str(key) == 'r': #「r」が入力されたら print("Start recording") cap.start_recording(mv_name + ".h264") #録画開始 break while True: key = readchar.readkey() #キー入力の受付 if str(key) == 'q': #「q」が入力されたら print("Recording end") cap.stop_recording() #録画終了 break cap.stop_preview() #プレビューの終了 chMp4(mv_name) #mp4形式へ変換
前回の記事の「chmp4.py」と同じディレクトリに「rec.py」という名前で上のコードをコピペしたものを用意します。
LXTerminal上で「rec.py」があるディレクトリまで移動して次のコマンドで実行します。
python3 rec.py
実行すると次の画像のように画面左に小さなプレビューが表示されます。
任意のタイミングで「r」を押すと録画を開始し、「q」で録画が停止、自動的にmp4形式の動画ファイルが「rec.py」と同じディレクトリに作成されます。
最後に
昨日言ってたやりたい事を率先してやるのではなくその日に気がついたものから進めていくから、ある日突然やっておかなければいけなかったことの存在に気がつくのだ。
そして研究は魔境へ。
コメント