Raspberry piを使った動画保存方法

2023/12/07 門田 和真

はじめに

こんにちは、早速3度目のブログを書くことになってしまった門田和真です。
今回のブログではOpenCVを使ってRaspberry piに接続されたカメラで動画を録画する方法について伝えていこうと思います!

今回参考にしたサイト

私がRaspberry piで動画保存をするにあたって参考にさせて頂いたサイトが下のリンクです。
OpenCVを使ってRaspberry Piに接続したカメラで撮影した映像をファイル出力する方法
このサイトでは録画の終了タイミングがEnterキーを押したときとなっていますが、私は一定時間録画すると終了するプログラムを作ろうと思います!

カメラのオブジェクト取得とキャプチャパラメータの設定

まず初めに1行目~3行目でOpenCVのcv2モジュールといつ録画をしたのか分かるようにする為のdatetimeモジュール、一定時間録画すると終了できるようにする為に使うtimeモジュールをインポートします。
次に5行目~8行目で保存する動画の縦と横の大きさとFPSを定義します。(FPSはカメラの標準FPSになるように設定してください。そうしないと動画の時間が現実の時間と異なるようになります。)
そして、11行目~16行目でVideoCaptureオブジェクトを取得してcap変数に代入し、VideoCaptureオブジェクトのsetメソッドで動画サイズとフレームレートを設定します。

録画を始めた時間の取得と出力する動画ファイルの設定

19行目でtimeモジュールのtime関数で現在時刻を取得し、cap_staという変数に代入します。(録画を始めた時間と終わった時間の差分が一定の値になると終了させる為)
22行目でdatetimeのnow関数で年月日時間分の値を文字列で取得し、date変数に代入します。
23行目で先程取得したdate変数とmp4の拡張子を付けた物をpath変数に代入します。(保存場所と動画ファイルの名前を設定)
26行目で動画のコーディング方法を設定し、27行目でcv2のVideoWriter関数で保存場所、コーディング方法、FPS、横幅、高さをout変数へ代入します。

動画の保存

29行目でwhile(True)で無限ループさせる。
32行目でread関数でcap変数から取得したカメラの画像をret変数(カメラを認識しているかどうかをTrueかFalseで返す)とframe変数に代入し、フレームを取得します。
35行目~37行目でret変数がFalseの場合not captureと表示しプログラムを終了します。
カメラを認識できている場合39行目~42行目でout変数にフレームを書き込んでいきます。

一定時間録画するとプログラムを終了

そして、45行目で録画経過時間を取得してcap_end変数に代入します。
46行目で録画経過時間 - 録画開始時間 = 録画時間を求めてtd変数へ代入します。
47行目~49行目でtdが180秒以上経過した時にCapture endと表示し、無限ループを抜けます。
52行目、53行目で、relese関数を使用し、VideoCaptureオブジェクトを閉じて、フレームを書き込んだout変数を閉じることで動画保存完了です。

作成したソースコード

実際に作成したソースコードは以下の通りです。

おわりに

これで動画保存が出来ます!
実際に作成する際に気を付けるポイントとしては、11行目の'/dev/video0'の場所を間違えないようにするということです。
この動画保存をすることができると防犯カメラなどに応用できるので頑張って作成してみてください!!

参考文献 :
OpenCVを使ってRaspberry Piに接続したカメラで撮影した映像をファイル出力する方法 最終更新日 : 2023/09/21