動画コンテンツ撮影システムを作る
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カメ)
- 他のラズパイ(2カメ)にmotionをaptインストール
- 2カメの設定ファイルで
stream_localhost off
を設定(ネットワークに公開される) - 親ラズパイ(1カメ)の設定ファイルで1カメ,2カメの設定ファイルを指定
- 1カメ設定ファイルを作る(/etc/motion/camera1.conf)
- 2カメ設定ファイルを作る(/etc/motion/camera2.conf)
- localhost:8080にアクセスするとスイッチャーみたいになっている
以下,1カメ(USBカメラ)の設定ファイルの抜粋.
camera_id = 1
videodevice /dev/video0 #ローカルのUSBカメラ
stream_port 8081 #この動画へアクセスできるURLのポート番号設定
width 960
height 720
rotate 180
framerate 30
以下,2カメ(USBカメラ,1カメから見るとネットワーク・カメラ)の設定ファイルの抜粋.
camera_id = 2
netcam_url http://192.168.137.55:8081 #ネットワーク・カメラ(2カメ)
stream_port 8082 #この動画へアクセスできるURLのポート番号設定
Androidデバイスのカメラを使う(3カメ)
PlayストアからIP Webcamをインストールしてアプリを起動.
ウェブ・ブラウザで3カメAndroidデバイスの8080ポートにアクセスすると,細かい設定が可能
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