.. note:: こんにちは!SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Communityへようこそ!Raspberry Pi、Arduino、ESP32に関心のある仲間たちとともに、さらに深く学びましょう。 **参加する理由** - **専門家のサポート**: 購入後の問題や技術的な課題を、コミュニティやチームのサポートで解決できます。 - **学びと共有**: ヒントやチュートリアルを交換して、スキルを向上させましょう。 - **特別なプレビュー**: 新製品の発表や先行公開に早期アクセスできます。 - **特別割引**: 新製品に対して限定割引を楽しめます。 - **祝祭プロモーションとプレゼント**: プレゼントや祝祭プロモーションに参加できます。 👉 私たちと一緒に探求し、創造する準備はできましたか?[|link_sf_facebook|]をクリックして、今すぐ参加しましょう! .. _py_video: 6. ビデオ録画 ================== この例では、録画機能の使い方を紹介します。 **コードの実行** .. raw:: html .. code-block:: cd ~/picrawler/examples sudo python3 6_record_video.py コードが実行された後、ブラウザに ``http://:9000/mjpg`` と入力すると、ビデオ画面が表示されます。例: ``http://192.168.18.113:9000/mjpg`` .. image:: img/display.png 録画は、キーボードのキーを押すことで開始、停止、再開できます。 * ``q`` を押して録画を開始、または一時停止/再開します。 ``e`` を押して録画を停止または保存します。 * プログラムを終了するには、 ``Ctrl+C`` を押してください。 **コード** .. code-block:: python from time import sleep, strftime, localtime from vilib import Vilib import readchar from os import getlogin import os USERNAME = getlogin() VIDEO_PATH = f"/home/{USERNAME}/Videos/" MANUAL = ''' Press keys on keyboard to control recording: Q: record/pause/continue E: stop Ctrl+C: Quit ''' def print_overwrite(msg, end='', flush=True): """Overwrite the current terminal line.""" print('\r\033[2K', end='', flush=True) print(msg, end=end, flush=True) def safe_stop_recording(): """Stop recording safely (avoid exceptions during exit).""" try: Vilib.rec_video_stop() except Exception: pass def safe_close_camera(): """Close camera safely (avoid exceptions during exit).""" try: Vilib.camera_close() except Exception: pass def main(): rec_flag = 'stop' # Possible states: start, pause, stop vname = None # Ensure the video directory exists os.makedirs(VIDEO_PATH, exist_ok=True) # Set save path for recorded videos Vilib.rec_video_set["path"] = VIDEO_PATH # Start camera and preview Vilib.camera_start(vflip=False, hflip=False) Vilib.display(local=False, web=True) sleep(0.8) # Wait for camera startup print(MANUAL) try: while True: # Read keyboard input (no Enter needed) key = readchar.readkey().lower() # Q: start / pause / continue if key == 'q': if rec_flag == 'stop': rec_flag = 'start' # Generate filename based on timestamp vname = strftime("%Y-%m-%d-%H.%M.%S", localtime()) Vilib.rec_video_set["name"] = vname # Start recording Vilib.rec_video_run() Vilib.rec_video_start() print_overwrite('rec start ...') elif rec_flag == 'start': rec_flag = 'pause' Vilib.rec_video_pause() print_overwrite('pause') elif rec_flag == 'pause': rec_flag = 'start' Vilib.rec_video_start() print_overwrite('continue') # E: stop recording elif key == 'e' and rec_flag != 'stop': rec_flag = 'stop' safe_stop_recording() print_overwrite( "The video saved as %s%s.avi" % (Vilib.rec_video_set["path"], vname), end='\n' ) # Ctrl+C (readchar special key): quit elif key == readchar.key.CTRL_C: print('\nquit') break sleep(0.1) except KeyboardInterrupt: # Handle Ctrl+C from terminal as well print('\nquit') finally: # If recording is still active, stop it before closing camera if rec_flag != 'stop': safe_stop_recording() safe_close_camera() sleep(0.1) if __name__ == "__main__": main() **仕組みは?** #. このプログラムの概要 このプログラムでは、キーボードを使用して動画録画を制御できます。 • Q → 録画開始 / 一時停止 / 再開 • E → 録画停止 • Ctrl+C → プログラム終了 録画された動画は Videos フォルダに保存されます。 #. 動画フォルダの準備 .. code-block:: python USERNAME = getlogin() VIDEO_PATH = f"/home/{USERNAME}/Videos/" os.makedirs(VIDEO_PATH, exist_ok=True) プログラムは現在のユーザー名を取得し、 Videos フォルダが存在しない場合は自動的に作成します。 すべての録画動画はこのフォルダに保存されます。 #. カメラの起動 .. code-block:: python Vilib.camera_start(vflip=False, hflip=False) Vilib.display(local=False, web=True) sleep(0.8) カメラを起動します。 Web プレビューが有効になり、ブラウザからライブ映像を確認できます。 短い待機時間を入れることで、カメラが正しく起動するのを待ちます。 #. 録画状態の設定 .. code-block:: python rec_flag = 'stop' vname = None プログラムでは ``rec_flag`` という変数を使用して、 現在の録画状態を管理します。 • stop → 録画していない状態 • start → 録画中 • pause → 一時停止中 #. キーボード入力の待機 .. code-block:: python key = readchar.readkey().lower() プログラムはキー入力を待機します。 #. Qキーで録画開始 .. code-block:: python if rec_flag == 'stop': vname = strftime("%Y-%m-%d-%H.%M.%S", localtime()) Vilib.rec_video_set["name"] = vname Vilib.rec_video_run() Vilib.rec_video_start() Q を最初に押すと: • 現在の日付と時刻を使ってファイル名が生成されます • 録画がすぐに開始されます 例のファイル名: 2026-03-03-15.30.21.avi #. もう一度Qキーで一時停止 .. code-block:: python elif rec_flag == 'start': Vilib.rec_video_pause() すでに録画が開始されている場合、 Q を押すと録画が一時停止します。 #. さらにQキーで録画再開 .. code-block:: python elif rec_flag == 'pause': Vilib.rec_video_start() 録画が一時停止状態のときに、 再度 Q を押すと録画が再開されます。 #. Eキーで録画停止 .. code-block:: python elif key == 'e' and rec_flag != 'stop': Vilib.rec_video_stop() E を押すと録画が完全に停止します。 動画ファイルは次の場所に保存されます: ``/home/your_username/Videos/`` #. プログラムの安全な終了 .. code-block:: python finally: if rec_flag != 'stop': Vilib.rec_video_stop() Vilib.camera_close() プログラムが終了する際: • 録画が継続している場合は停止します • カメラを安全に閉じます これにより、動画ファイルの破損やカメラエラーを防ぎます。