今回も前回に続いてRaspberry PIのカメラコマンドを使ってみます。これまでは静止画でしたが、今回は映像を撮影します。
映像なので保存先の容量が少ないメディアの場合は注意が必要です。容量が不足するような場合は外付けのHDD/SSDなどを接続して、そこに保存した方がよいでしょう。

前回と同様に撮影したデータはRaspberry PIのホームディレクトリにあるPicturesディレクトリに保存します。カレントディレクトリはこのPicturesディレクトリとします。コマンドならcd ~/Picturesです。映像ならMoviesディレクトリを作成した方がいいような気もしますが、とりあえずこれまでと同じPicturesディレクトリに保存します。

○映像の撮影

 映像を撮影するコマンドはrpicam-vidです。-oの後に保存する映像ファイル名を指定します。H.264形式で5秒間の映像が保存されます。なお、自動的に停止しない場合はControlキーを押したままCキーを押して停止させてください。

rpicam-vid -o 1.h264

 撮影された映像は、そのままでは再生できません。そこでffmpegコマンドを使ってMPEG4形式に変換します。
Raspberry PI 5で以下のコマンドを入力します。(Full Installの場合、最初からffmpegは入っています)

ffmpeg -r 30 -i 1.h264 -c:v copy -fps_mode passthrough -movflags +faststart 1.mp4

変換はすぐに終わります。変換した映像はQuickTime PlaeryやVLC Playerで再生できます。

○回転指定

 先ほどの映像は上下が180度回転していました。上下が逆になっているのは困るので調整します。180度回転させるには静止画の撮影の時と同じrotationオプションを使います。このオプションで180を指定すると上下180度回転します。90なら90度回転することになります。
 以下のようにコマンドを入力すると上下180度回転した映像が5秒間撮影されます。

rpicam-vid -o 2.h264 --rotation 180

MPEG4に変換する場合は以下のようにします。

ffmpeg -r 30 -i 2.h264 -c:v copy -fps_mode passthrough -movflags +faststart 2.mp4

なお、出力するメッセージを消去する場合は、前回までと同様以下のように指定します。

rpicam-vid -o 2.h264 --rotation 180 > /dev/null 2>&1

○時間指定

 何も指定しない場合、デフォルトの撮影時間は5秒になっています。
撮影時間を指定するにはtオプションを使います。以下のように指定すると10秒間撮影されます。

rpicam-vid -o 3.h264 --rotation 180 -t 10s > /dev/null 2>&1

ffmpeg -r 30 -i 3.h264 -c:v copy -fps_mode passthrough -movflags +faststart 3.mp4 > /dev/null 2>&1

時間を指定せずに録画するにはtオプションで0を指定します。この場合、Controlキーを押したままCキーを押して撮影を停止させるかKILLコマンドで停止します

rpicam-vid -o 4.h264 --rotation 180 -t 0 > /dev/null 2>&1

ffmpeg -r 30 -i 4.h264 -c:v copy -fps_mode passthrough -movflags +faststart 4.mp4 > /dev/null 2>&1

ビットレート指定


 映像データのファイルサイズは大きくなることがあります。特に高画質、長時間録画するとファイルサイズは大きくなります。しかし、ストレージ(SDカード、HDD/SSD)には容量の限界があります。この場合、画質を下げるか撮影時間を短くするか、何かを取捨選択しなければなりません。
 画質を下げることでファイルサイズは減らすことができます。これは画質を決めるビットレートを指定します。ビットレートの指定はbオプションを使います。このbオプションの後にビットレートとなる数値を指定します。1000なら1Kのビットレート、20000なら20Kのビットレート、1000000なら1Mのビットレートになります。

 以下の例では20Kのビットレートになります。

rpicam-vid -o 5.h264 --rotation 180 -b 20000 > /dev/null 2>&1

ffmpeg -r 30 -i 5.h264 -c:v copy -fps_mode passthrough -movflags +faststart 5.mp4 > /dev/null 2>&1

○タイムラプス(インターバル)撮影

 前回rpicam-stillコマンドでタイムラプス(インターバル)撮影する方法を説明しました。撮影された静止画を映像にするような場合はrpicam-stillコマンドよりもrpicam-vidコマンドを使った方が手軽です。ただし、フレームレートなど若干制限があるため撮影内容によっては使い分けが必要です。
 rpicam-vidコマンドでタイムラプス(インターバル)撮影を行うにはframerateオプションを指定します。これはフレームレートで1秒あたり何フレーム撮影するかを数値で指定します。1なら1秒間に1回撮影します。2なら2回になります。以下の例では1秒間に1回撮影し、それを15秒間行います。

rpicam-vid -o 6.h264 --rotation 180 --framerate 1 -t 15s > /dev/null 2>&1

ffmpeg -r 30 -i 6.h264 -c:v copy -fps_mode passthrough -movflags +faststart 6.mp4 > /dev/null 2>&1

framerateオプションの値を大きくすると高速度撮影(ハイスピード撮影、スローモーション)もできます。以下のようにすると1秒間に120フレーム撮影されます。

rpicam-vid -o 7.h264 --rotation 180 --framerate 120 -t 2s > /dev/null 2>&1

ffmpeg -r 30 -i 7.h264 -c:v copy -fps_mode passthrough -movflags +faststart 7.mp4 > /dev/null 2>&1

.
編集部おすすめ