.. note:: こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。 **参加する理由は?** - **エキスパートサポート**:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。 - **学び&共有**:ヒントやチュートリアルを交換してスキルを向上させましょう。 - **独占的なプレビュー**:新製品の発表や先行プレビューに早期アクセスしましょう。 - **特別割引**:最新製品の独占割引をお楽しみください。 - **祭りのプロモーションとギフト**:ギフトや祝日のプロモーションに参加しましょう。 👉 私たちと一緒に探索し、創造する準備はできていますか?[|link_sf_facebook|]をクリックして今すぐ参加しましょう! .. _3.1.2_py: 3.1.2 ビデオモジュール ======================== はじめに ----------------- このキットでは、写真を撮るだけでなく、カメラモジュールを使ってビデオも録画できます。 必要な部品 ------------------------------ このプロジェクトには、以下の部品が必要です。 .. image:: ../img/photo1.png :width: 800 全体のキットを購入する方が確実に便利です。リンクはこちらです: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - 名前 - このキットのアイテム - リンク * - Raphael Kit - 337 - |link_Raphael_kit| 以下のリンクから個々に購入することもできます。 .. list-table:: :widths: 30 20 :header-rows: 1 * - コンポーネントの紹介 - 購入リンク * - :ref:`cpn_camera_module` - |link_camera_buy| 実験手順 ------------------------------ **ステップ1:** Raspberry Piのデスクトップに移動します。より快適な操作のためには、ディスプレイが必要かもしれません。詳しくは、 `Connect your Raspberry Pi `_ を参照してください。また、遠隔でRaspberry Piのデスクトップにアクセスする方法については、 :ref:`remote_desktop` を参照してください。 **ステップ2:** ターミナルを開き、コードのフォルダに移動します。 .. code-block:: cd ~/raphael-kit/python/ **ステップ3:** 実行します。 .. code-block:: sudo python3 3.1.2_VideoModule.py コードを実行して録画を開始します。「Ctrl+C」を押して録画を終了します。ビデオは「my_video.h264」として「~」ディレクトリに保存されます。 .. note:: PythonのIDEを使って、 ``~/raphael-kit/python/`` パスで ``3.1.2_VideoModule.py`` を開き、実行ボタンをクリックして実行、停止ボタンでコードを停止することもできます。 もしPCに写真を送りたい場合は、 :ref:`filezilla` を参照してください。 **コード** .. code-block:: python #!/usr/bin/env python3 import time from picamera2 import Picamera2, Preview from picamera2.encoders import H264Encoder from picamera2.outputs import FfmpegOutput import os # Get the current user's login name user = os.getlogin() # Get the path to the user's home directory user_home = os.path.expanduser(f'~{user}') # Create a Picamera2 instance camera = Picamera2() # Retrieve the default preview configuration preview_config = camera.preview_configuration try: # Configure preview size and format preview_config.size = (800, 600) preview_config.format = 'XRGB8888' # Start the camera preview in QTGL mode camera.start_preview(Preview.QTGL) # Define video configuration with size, frame rate, and buffer count conf = {'size': (800, 600)} controls = {'FrameRate': 40} config = camera.create_video_configuration(main=conf, controls=controls, buffer_count=12) # Create a video encoder with a specified bitrate encoder = H264Encoder(bitrate=10000000) # Define output file for the video output = FfmpegOutput(f'{user_home}/my_video.mp4') # Configure and start recording camera.configure(config) camera.start_recording(encoder, output) # Record for 10 seconds time.sleep(10) # Stop the recording camera.stop_recording() except KeyboardInterrupt: # Stop the camera preview if a KeyboardInterrupt (e.g., Ctrl+C) occurs camera.stop_preview() pass **コード説明** #. 必要なライブラリとクラスをインポートします。 ``picamera2`` はカメラ制御に使用され、 ``H264Encoder`` は動画エンコード、 ``FfmpegOutput`` は動画の出力ファイルを定義するために使用されます。 .. code-block:: python #!/usr/bin/env python3 import time from picamera2 import Picamera2, Preview from picamera2.encoders import H264Encoder from picamera2.outputs import FfmpegOutput import os #. 現在ログインしているユーザー名と、そのユーザーのホームディレクトリのパスを取得します。 .. code-block:: python # 現在のユーザーのログイン名を取得 user = os.getlogin() # ユーザーのホームディレクトリのパスを取得 user_home = os.path.expanduser(f'~{user}') #. ``Picamera2`` クラスのインスタンスを作成し、デフォルトのプレビュー設定を取得します。 .. code-block:: python # Picamera2 インスタンスを作成 camera = Picamera2() # デフォルトのプレビュー設定を取得 preview_config = camera.preview_configuration #. カメラプレビューのサイズとフォーマットを設定します。サイズは 800x600 ピクセル、フォーマットは ``XRGB8888`` に設定されています。 .. code-block:: python try: # プレビューのサイズとフォーマットを設定 preview_config.size = (800, 600) preview_config.format = 'XRGB8888' #. QTGL モード(グラフィカルなプレビューモード)でカメラプレビューを開始します。 .. code-block:: python try: ... # カメラプレビューを QTGL モードで開始 camera.start_preview(Preview.QTGL) ... #. 動画設定を定義します。フレームサイズは 800x600 ピクセル、フレームレートは 40fps に設定されています。 .. code-block:: python try: ... # サイズ、フレームレート、バッファ数を指定した動画設定を定義 conf = {'size': (800, 600)} controls = {'FrameRate': 40} config = camera.create_video_configuration(main=conf, controls=controls, buffer_count=12) ... #. H.264 エンコード形式を使用し、ビットレート 10 Mbps で動画エンコーダーを作成します。また、動画の出力ファイルパスを設定し、ユーザーのホームディレクトリに ``my_video.mp4`` として保存します。 .. code-block:: python try: ... # 指定したビットレートで動画エンコーダーを作成 encoder = H264Encoder(bitrate=10000000) # 動画の出力ファイルを定義 output = FfmpegOutput(f'{user_home}/my_video.mp4') ... #. 定義した動画設定でカメラを構成し、指定したエンコーダーと出力ファイルを使用して録画を開始します。10 秒間録画した後、録画を停止します。 .. code-block:: python try: ... # カメラを構成して録画を開始 camera.configure(config) camera.start_recording(encoder, output) # 10 秒間録画 time.sleep(10) # 録画を停止 camera.stop_recording() #. このコードブロックは、KeyboardInterrupt(Ctrl+C など)が発生した場合にカメラプレビューを停止します。 ``pass`` 文は追加の処理を行わずに例外を受け流します。 .. code-block:: python except KeyboardInterrupt: # KeyboardInterrupt(例:Ctrl+C)が発生した場合、カメラプレビューを停止 camera.stop_preview() pass