【電子工作】OV5647カメラモジュールを使ってlibcamera-vidで動画を撮ってみる(Raspberry Pi 4で遊ぼう日記 その21)

投稿日:2022年7月12日
最終更新日:2022年7月12日

libcamera-vidを使って動画を撮ってみる

前回、OV5647というOmniVision社製イメージセンサーを搭載した以下のカメラモジュールをラズパイに接続し、libcamera-stillで写真を撮ってみた。

今回はlibcamera-vidというコマンドで動画を撮ってみる。

なお、今回もいつものごとくSSH接続はせずに、ラズパイにモニター、キーボード、マウスを接続してGUI上から操作を行う前提で書いていく。

SSH越しに接続して操作する場合は、操作するPC側でXmingなどのXサーバーを起動しているとエラーが出るので、Xサーバーを終了するか-nオプションをつけてlibcameraを実行すればOK。詳しくは以下の記事を参照↓

Xサーバ(Xming)を起動したPCでSSH越しにRaspberry Piに接続してlibcameraを使ったら「failed to import fd 19」というエラーが出た

なお、今回もいつものごとくラズベリーパイの公式ドキュメントの情報を参照しながら進めた。

https://www.raspberrypi.com/documentation/accessories/camera.html#libcamera-vid

 

実行環境

Raspberry Pi 4 Model B

Raspberry Pi OS (Bullseye)

カメラモジュール(OV5647)

 

H.264でエンコードされた動画を保存する

まずは基本的な使い方から。libcamrera-vidでは動画のエンコード方式を指定して保存できるが、エンコード方式を指定しなければデフォルトではH.264形式でエンコードされる。以下のように-tで動画の時間を指定して(単位はmsec)コマンド実行することで、H.264形式で動画を保存することができる。以下のコマンドでは5秒の動画をH.264でエンコードしたvideotest.h264というファイルが保存される。

libcamera-vid -t 5000 -o videotest.h264

ちなみに.h264で保存した動画はmp4のようなコンテナ形式でラッピングされているわけではなく純粋なVideoだけのファイルなので、Windowsの標準動画再生ソフトなどでは再生できないので注意。VLCメディアプレーヤーを使ったら再生できた。

以下が実際に撮影した動画。

※Twitterにも.h264形式のままでも動画はアップロードできない。上の動画は.h264をmp4でラッピングしてアップロードしている。

 

motion JPEGや非圧縮のYUV420形式で動画を保存する

libcamera-vidではh264によるエンコードだけではなく、–codecオプションをつけることによりmotion JPEG(.mjpeg)で動画をエンコードして保存することもできる。また、非圧縮のYUV420形式で保存することも可能。

libcamera-vid -t 5000 --codec mjpeg -o videotest.mjpeg
libcamera-vid -t 5000 --codec yuv420 -o videotest.data

 

指定した秒数ごとに画像ファイルを保存する

–segmentオプションをつけることによって、–segmentの後に指定した秒数(単位はmsec)ごとに画像ファイルを保存することもできる。例えば、以下のコマンドを実行すると、1秒ごとにjpegファイルが保存されてvideotest0.jpg ~ videotest4.jpgという4つの画像ファイルが保存される。

libcamera-vid -t 5000 --codec mjpeg --segment 1000 -n -o videotest%d.jpg

動画ファイルは容量が大きくなりがちなので、このコマンドは長時間にわたって何かを監視したりするシステムをつくる場合などに便利そう。

ざっくりとだがlibcamera-vidの概要は掴むことができた。次回は何をしようか考え中だが、もうしばらくカメラモジュールを使って遊んでみたいと思う。

 

日記まとめ

ラズパイで遊んでみた軌跡を以下でまとめてます。

【電子工作】Raspberry Pi 4で遊ぼう日記 まとめ


投稿者: wakky

映画と旅行が大好きなエンジニア。お酒、ゲーム、読書も好き。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください