ラズベリーパイで古いデジタル一眼レフからクリーンHDMI出力
おつかれさまです.
以前,クリーンHDMI出力ができない古い一眼レフを,Web会議で活用する方法を書いたが,カメラとWeb会議ソフトの間に多くの処理を挟んでいたので,遅延が発生していた.そこでもっとシンプルな方法を思いついたのでご紹介する.
近頃はカメラメーカー純正で,デジタルカメラをWebカメラにするソフトが公開されているが,古い機種には対応していない場合が多い.問題はいかにして古い一眼レフから,付加情報がないクリーンな映像を遅延なくHDMI端子から出力させるかである.今回の方法ではライブビューが使えて,Picture Transfer Protocol (PTP)に準拠したUSB端子が使えるデジタルカメラなら利用できて,遅延もほとんどない方法である.
システム構成
今回のアイデアは,一眼レフのライブビュー映像信号をラズベリーパイで取り出し,それを画像にデコードしてHDMIで出力するという方法である.以前から利用しているmjpg-streamerというソフトの出力を画面表示にする.あとは,この映像を映像キャプチャーデバイスでPCに取り込むだけのシンプルなシステム構成である.
HDMIコネクタからの信号が最終出力になるので,PCにとり込むキャプチャーデバイスが必要になるが,これには最近3000円未満で販売されている中華製のデバイスを利用する.もともとライブビュー映像の解像度は高くないので,これで十分なはずである.
私はこちらの製品を購入しましたが,同等の製品が他にもあるようです.Amazon Primeでないものは価格が抑えられていますが,おそらく中国からの直送のため到着まで1-3週間程度かかります.
以前と同じくハードウエアには,今回もRaspberry Pi Zero Wを利用する.ただし,画像のデコードは負荷が大きいので,能力不足となる場合には上位機種にする必要があるかもしれない.
無印良品のアクリルケースに入れておきました
ソフトウエア
まずは,Raspberry pi OSをインストールする.こちらからRaspberry pi imagerをダウンロードし実行する.OSはGUIは必要ないので,Raspberry Pi OS (32-bit) Liteを選んでほしい.おそらく8GBのmicroSDで足りると思うが,私は余裕をもって16GBのmicroSDに書き込んだ.
書き込んだmicroSDを,Raspberry Pi Zeroに差し込む.Raspberry Pi Zeroの基板の端にあるmicroUSBポートにはACアダプタをつなぎ,隣のmicroUSBポートにはUSBハブを接続し,その先にはキーボード・マウスを接続する.隣のminiHDMIポートにはモニターを接続する.
私が使っているこちらのキーボードとマウスのセットは,USBドングルが一つでマウスとキーボードが使えておススメです.
ここでACアダプタをコンセントに刺して電源を入れると,"Login:"と表示されて入力待ちになるので,"pi"と入力しEnterキーを押すとパスワードを求められるので”raspberry"と入力するとログインできる.次に
sudo raspi-config
と入力しEnterキーを押してセットアッププログラムを立ち上げる.ユーザー名"pi"のパスワードを変更し,ワイヤレスネットワークに接続し,ロケールを"Tokyo"に変更する.後ほどメンテナンスのためにSSHを使うので,ここでSSHを有効にしておく.
次にソフトの更新をしておく.
sudo apt-get update
sudo apt-get upgrade
次に必要なソフトをインストールする.次のコマンドを入力する.
sudo apt-get install cmake git libjpeg8-dev gphoto2 libgphoto2-dev libsdl1.2-dev
次に,githubからmjpg-streamerをホームディレクトリにダウンロードする.
sudo git clone https://github.com/jacksonliam/mjpg-streamer.git
コンパイルしてインストールしよう.
cd mjpg-streamer/mjpg-streamer-experimental
sudo make
sudo make install
次に,USBハブにデジタル一眼レフカメラを接続しカメラのスイッチを入れて,下記のコマンドを入力する.
./mjpg_streamer -i "./input_ptp2.so" -o "./output_viewer.so"
すると,カシャという一眼レフカメラのミラーが跳ね上がる音がして,ビデオキャプチャーが開始される.画面いっぱいにカメラが撮影している映像が表示されれば,ひとまず成功である.
自動立ち上げ
さて,あとは自動的に立ち上げる設定をする.エディタを使って,以下の内容のスクリプトファイルを作る.ファイル名は"startCapture.sh"として,ホームディレクトリに置いた.
sudo chmod a+x startCapture.sh
を入力して実行権限を与えておこう.
#!/bin/sh
# 露出補正 +1
gphoto2 --set-config-value exposurecompensation="1"
# ホワイトバランスをAutoに設定
gphoto2 --set-config-value whitebalance="Automatic"
# カメラから映像を取り込み,ストリーミングする
~/mjpg_streamer -i "input_ptp2.so" -o "output_viewer.so"
最後に,リセットボタンが押されて再起動したときに自動的にプログラムが実行されるように設定する.ディレクトリ,/etc/systemd/systemに"cleanHDMI.service"というファイル名で次の内容のファイルを作成する.
[Unit]
Description = clean_HDMI
After = network.target
[Service]
Type = simple
WorkingDirectory = /home/pi/mjpg-streamer/mjpg-streamer-experimental
ExecStart = /home/pi/startCapture.sh
Restart = always
[Install]
WantedBy = multi-user.target
"sudo sytemctl daemon-reload"と入力してから,"sudo systemctl enable cleanHDMI"と入力すると自動起動が設定される.リセットボタンを押すか,電源を入れなおして再起動させてしばらくすると,カメラが映像をキャプチャーするのを確認しよう.
確認と調整
ここからはPCでの作業になる.USBハブをmicroUSBポートから取り外し,カメラを直接接続する.モニター画面に接続していたHDMIケーブルを,PCに接続されたキャプチャーデバイスに接続する.ZoomやMS TeamsなどのWeb会議ソフトを立ち上げ,ビデオ入力を適切に選択すると,PCの画面で映像が確認できるはずだ.
PCモニターの裏に押し込むと見た目がスッキリします.
次に調整のため,SSHからの接続を行う.同じWiFiネットワークで繋がったPC上でターミナルソフトを立ち上げ,
ssh pi@raspberrypi
と入力するとパスワードを聞かれてログインできるはずである.
sudo raspi-config
と入力し,再びセットアッププログラムを実行しよう.ここで画面解像度をいろいろと試してみる.縦横の歪みがなくて,画面の黒い縁が少なく,かつラズベリーパイの負荷が少ない低めの解像度が,適切な解像度である.
ラズベリーパイのアップグレード
実際に稼働させてみると,どうもRaspberry Pi Zeroの処理速度が足りないため,若干の画像の遅延が生じるようだ.ストップウォッチで測定すると,約0.5秒くらいである.私はあまり気にならないが,試しにRaspberry Pi Zeroよりも上位モデルのRaspberry Pi 3 model A+にアップグレードしてみた.
秋葉原の実店舗のほうが安く買えるかもしれません
実際に稼働させると.確かにこちらのほうは遅延が少なく快適だった.遅延が皆無ではないが,測ってみると0.2秒くらいである.それとリセットボタンを押してから,撮影が始まるまでの時間が25秒程度で,こちらも倍以上早くてストレスを感じない.こちらのモデルは,CPUが4コアの1.4GHzに強化され,大きさもそれほど大きくならないので,いま使っているケースが流用できる.これからラズベリーパイを購入して製作されるのであれば,最初からRaspberry Pi 3 model A+のほうが良いだろう.
まとめ
実は以前のシステムでは,OBSというソフトが間に入り,操作に慣れていないためか,音声まわりのトラブルが頻発していた.仕事で使うシステムとしては,なるべくシンプルで信頼性の高いものでなくてはならない.その点,今回のシステムはWeb会議ソフトからみると,映像がHDMIキャプチャーを通してUSBポートから送られてくるだけなので,シンプルで信頼性も高いと思う.
今回のシステムでは,映像の遅延の問題はほぼ解決したと言ってよいだろう.残りの問題点は,画像解像度がちょっと低いことである.その点ではスマホやノートPC内蔵カメラに負けてしまうが,これはカメラの仕様なのでしかたない.
現在私がWeb会議で使っているカメラはNkon D300で,レンズはNikkor-NC Auto 24mm F2.8である.どうもこれくらいの画角がちょうど良いと感じている.フルサイズセンサーのカメラであれば,焦点距離36mmに相当する.以前はオートフォーカスが使えるレンズを使っていたが,D300には顔認識機能がないのでフォーカスが合いにくく,煩わしくなって使っていない.
実はこれまで現用のシステムの使い勝手が悪く,クリーンHDMI出力ができる一眼レフか,ミラーレスカメラを導入しようかと思っていた.しかし今回の製作がうまくいったので,その意味では必要がなくなったのが嬉しい.
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?