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メディアプレーヤーを使ったら再生できた。
以下が実際に撮影した動画。
ラズパイとカメラモジュールで動画を撮るテスト。被写体は孫の手駆動ミニカー…笑 pic.twitter.com/o1xmyZIL4J
— Wakky (@wakky_free) July 3, 2022
※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の概要は掴むことができた。次回は何をしようか考え中だが、もうしばらくカメラモジュールを使って遊んでみたいと思う。
日記まとめ
ラズパイで遊んでみた軌跡を以下でまとめてます。