3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Raspberry Pi ビデオカメラ化

Last updated at Posted at 2020-11-03

動画コンテンツ撮影システムを作る

 Raspberry Pi4Bの8Gバイト・メモリを活かして動画撮影システムを作る.Youtuber化してガッポリ

要求仕様
・動画はメインメモリ(RAMディスク)に保存
・撮影中に映像をモニタできる
・ハンドリングしやすいハードウェア(カメラやマイクを別途設置したくない)
・2時間くらい連続撮影
・ネット動画に耐える画質
・複数カメラ対応(スイッチャー欲すぃ)

使うもの
 ハードウェア
  ・Raspberry Pi4B
  ・Pi Camera
  ・USBカメラ(オプション)
  ・PC(オプション)
  ・Jetson Nano(オプション)
  ・Androidスマホ(オプション)
 ソフトウェア
  ・Raspberry Pi OS
  ・motion
  ・IP Webcam

 Linuxでよく使われている動画撮影ソフトウェアとしてmotionがある.映像に変化があったときのみ録画する機能があるため,ペットの監視や,セキュリティ・カメラ用としてよく使われるようである.
 今回,動き検出は必要ないが,ネット上にも比較的情報が多く,手軽に使えそうなのでmotionを使う.

RAMDISKの設定

 sdカードに書き込みたくないので4Gバイト分RAMDISKを設定する.
 まずマウントポイントとして,/var/videoを作っておく.

mkdir /var/video
chmod 777 /var/video

 /etc/fstabに以下を追加してリブートする.

tmpfs /var/video tmpfs nodev,nosuid, size=4000M 0 0

 再起動後,dfするとRAMDISKとして/var/videoの追加を確認できる.
 後程,/var/videoフォルダに動画ファイルを保存するようにmotionで設定する.

pi@raspberrypi:/etc/motion $ df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root       30359292 3107964  25967240  11% /
devtmpfs         3874072       0   3874072   0% /dev
tmpfs            4006168  535268   3470900  14% /dev/shm
tmpfs            4006168    8684   3997484   1% /run
tmpfs               5120       4      5116   1% /run/lock
tmpfs            4006168       0   4006168   0% /sys/fs/cgroup
tmpfs            4096000  176456   3919544   5% /var/video
/dev/mmcblk0p1    258095   54605    203491  22% /boot
tmpfs             801232       0    801232   0% /run/user/1000

motionの特徴

ウェブサーバ機能付き

 動画撮影の際,どのように映っているか確認したいので,モニタする機能が必要である.motionはウェブサーバ機能を持っており,Port:8081(デフォルト)で撮影状況をモニタできる.ネットワーク越しにも見られるので便利かも.

複数カメラ対応

 ネットワーク越しのカメラも使えるので,他ラズパイやスマホのカメラも利用できる.撮影時に1カメ,2カメを設置してみる.親機を映像のスイッチャーっぽく使えるので便利.
 公式ページによると,映像ソースとして以下の物に対応する.
・ネットワークカメラ(RTSP,RTMP,HTTP)
・PI cameras
・V4L2
・ビデオキャプチャカード(コンポジットなど)
・動画ファイル

環境構築

motionインストール

 apt-get install motion

motion起動

 sudo motion -n
 /var/log/motionがroot所有になっているため,sudoが必要.
 変更するなら以下.

chown pi /var/log/motion
chown pi /var/log/motion/motion.log

motionの設定

 設定ファイルはここ~~/usr/local/etc/motion/motion.conf~~
 ・全体設定 /etc/motion/motion.conf
 ・カメラごとの設定ファイルを入れるフォルダ /etc/motion(default設定.全体設定のファイルでこのフォルダも指定できる)

 デフォルト設定では,ブラウザでlocalhost:8080にアクセスするとGUIで設定できる.設定内容は,上記の設定ファイルに反映される模様.

 執筆時点で,ラズパイでaptするとmotionのversion 4.0が入る.少し古いようで,現行のversion4.3系とは設定項目に違いがある模様.

他のラズパイのmotion動画を取り込む(2カメ)

  1. 他のラズパイ(2カメ)にmotionをaptインストール
  2. 2カメの設定ファイルでstream_localhost offを設定(ネットワークに公開される)
  3. 親ラズパイ(1カメ)の設定ファイルで1カメ,2カメの設定ファイルを指定
  4. 1カメ設定ファイルを作る(/etc/motion/camera1.conf)
  5. 2カメ設定ファイルを作る(/etc/motion/camera2.conf)
  6. localhost:8080にアクセスするとスイッチャーみたいになっている

以下,1カメ(USBカメラ)の設定ファイルの抜粋.

camera1.conf
camera_id = 1
videodevice /dev/video0  #ローカルのUSBカメラ
stream_port 8081  #この動画へアクセスできるURLのポート番号設定
width 960
height 720
rotate 180
framerate 30

以下,2カメ(USBカメラ,1カメから見るとネットワーク・カメラ)の設定ファイルの抜粋.

camera2.conf
camera_id = 2
netcam_url http://192.168.137.55:8081  #ネットワーク・カメラ(2カメ)
stream_port 8082  #この動画へアクセスできるURLのポート番号設定

Androidデバイスのカメラを使う(3カメ)

 PlayストアからIP Webcamをインストールしてアプリを起動.
 ウェブ・ブラウザで3カメAndroidデバイスの8080ポートにアクセスすると,細かい設定が可能

camera3.conf
camera_id = 3
netcam_url http://192.168.138.1:8080
stream_port 8083

設定ファイル・レファレンス

emulate_motion

型: Boolean
値: on, off
デフォルト値: off
 映像に動きがなくても,常時録画する

movie_max_time

型: Integer
値: 0 (infinite) - 2147483647
Default: 120
 動画の最大長さを秒で指定.0の場合,サイズに制限なし.

auto_brightness

型: Integer
値: 0 - 3
Default: 0
 明るさの自動調整の設定.動画ではお勧めらしい.自動の中でも1~3で設定できる.3が最も明るめになる.
 上記は公式ドキュメントの説明である(Ver4.3向け).ラズパイでaptしたmotionの設定ファイルには,値はonかoffで指定することになっている(Ver4.1).onにしてみたけど,変な動作だったのでOffで使うことにする.どうもデバイスによって,うまく作用しないようである.
 Ver4.3系では次の数字で指定する.
1: brightnessで調整する (onかyesの指定と同じ)
2: exposureで調整する
3: exposure absoluteで調整する

brightness

型: Integer
値:0-255
 バージョン4.2以降は廃止されている模様.

stream_localhost

型: Boolean
値: on, off
Default: on
 localhost以外のホストから動画への接続を拒否する(defualtはonなので拒否).

flip_axis

型: 特定文字
値: none, v, h
Default: none (映像に変化なし)

 指定した軸で画像を反転.記録される画像や動画にも影響する.鏡像の場合に使用する(例えば車のバック・カメラ).この機能を使うとCPU負荷は増加する.

movie_max_time

型: Integer
値: 0 (infinite) - 2147483647
Default: 120
 動画の最大長さ(秒).0なら無制限.

movie_bps

型: Integer
値: 0 - 9999999
Default: 400000
 ffmpegで作られる動画のビットレート.単位はbps.
 大きな数値は画質は良いがファイルが大きくなる.
 movie_qualityが0(disabled)のとき,このパラメータが有効になる.

movie_quality

型: Integer
値: 0 - 100
Default: 60
 ffmpegを呼び出す際に渡すオプションを制御するパラメータと思われる.0以外を指定すると可変ビットレートを有効にする.
1~100の数値で動画の品質を設定.1は最も低品質,100が最高品質.
ファイル・サイズと動画品質を天秤にかけて,この数値を調整せよ.
 このパラメータを0以外に設定すると,movie_bpsの設定は無視される.

ffmpeg_variable_bitrate

型: Integer
値: 0, 2 - 31
Default: 0 (disabled)
 ffmpegへ与えるパラメータを制御する.
0以外に設定すると,ffmpeg_bpsの設定が無視される.
 Varsion4.2以降は廃止されている.

target_dir

型: String
値: Max 4095 characters
Default: Not defined = current directory
 画像や動画を保存するディレクトリのフルパス.
 デフォルトはカレントディレクトリ.
 通常は,絶対パスで指定する.ファイル名の指定で相対パスでディレクトリを指定できるため,このパラメータに/を指定しておくことも可能だが,推奨されない.可能な限り深い階層のディレクトリの指定を推奨する.

stream_maxrate

型: Integer
値: 1 - 100
Default: 1

 ストリーミングでのフレームレートの制限.100にすると無制限になる.1人で使う場合や,領域を区切られたLANでない限り大きな数値にし過ぎないこと.

引用文献
Motion Basic Setup.
https://motion-project.github.io/motion_config.html#top

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?