koss(社長)
何年も前に熱病にうなされるように買い漁っていたオールドカメラ群。その中にはSUPER8、つまり8ミリカメラが含まれている。SUPER8のフィルムは四角いカートリッジに入っているのだけど、それを手にとってみると「あ、ZEROが入るね」。
ってことで、ZEROとラズパイカメラをSUPER8のカートリッジに仕込んでみよう。まずは制作方針、もしくは全体的なイメージ、または仕様概要を思索してみる。
ラフイメージ
直感的にこんな感じ。
- カートリッジにカメラもラズパイZEROもバッテリーも内蔵される
- 本来のフィルムのようにカメラ本体にセットすれば、本来のフィルムのように録画できる
- 仕上がりはH.264の動画ファイル
- 保存先はシステムのSDカード (USB潰して録画専用のSDスロットを設けるのもいいな)
- カートリッジ本体にディスプレイやボタンはつかなくてよい (あっても電源スイッチくらい)
ソフトウェア
8ミリカメラのレンズを通ってフィルム面に結ばれる18fpsの映像をラズパイカメラで24fpsか30fpsくらいで撮るだけでも、それらしくはなるだろう。しかし、最終的には8ミリカメラのシャッターと連動して1コマ1コマ撮影したものをつなげて動画にしたい。シャッターとの同期はフィルム送りを何らかのセンサーで検出することで実現するとして、ソフトウェア側のアプローチを考えてみる。
タイムラプスの利用
「1コマ1コマ撮影したものをつなげて動画にする」と言えばタイムラプス撮影がまず思い浮かぶ。ラズパイでやっている例は簡単に見つかり、おおむねこんな感じ。
- raspistill の--timelapse モードを使って、一定間隔の連続写真を撮る
- gstreamer やffmpeg などで動画に変換
- (必要があれば) MP4Box でH.264に変換
一連の静止画を撮り終えてから動画に変換する、2パス構成なのがいただけないが、まあ実現可能ではありそうだ。
今回は18fpsなので、タイムラプスの間隔は55ms程度になる。テストで10秒間の撮影をしようとすると、raspistill的にはつまり、こういうこと。
raspistill -o test%04d.jpg -w 1920 -h 1080 --timelapse 55 -t 10000
結論から言うと、うまく行かない。55ms間隔はraspistillには速すぎて盛大に取りこぼしてしまうのだ。実験用に使ったラズパイ3でも500ms間隔=2fpsくらいまでしか追従できない。ぜんぜんダメじゃん、と言うことでraspistillのバーストモードを使ってみる。これはラズパイのGPUのビデオ機能を使うことで高スループットを実現するもの、らしい。
raspistill -o test%04d.jpg -w 1920 -h 1080 --timelapse 55 -t 10000 --burst
結果は…向上したものの、250ms間隔=4fpsくらいにしかならない。バーストモードは5Mpixel時に最大で15fpsと言われているので、この解像度なら18fps出ても良さそうだが、ストレージ(SDカード)への転送が追いつかないのだろう。その高速化も考えなくはないが、
- 計測していないが、raspistillでのシャッターのレイテンシーがありそう = 8ミリカメラのシャッターの同期ができない
- 2パス構成は、フレーム数が多くなる今回のプロジェクトには不向き
- そもそも2パス構成はカッコ悪い
ということで、タイムラプスを利用する案は棄てる。
動画のシンクロ撮影
タイムラプスを棄てるとなると、センサーからのフィルム送り検出に同期して1フレームずつ進む動画撮影の道に進むことになる。raspividやGStreamerなどでを使えば動画撮影時のフレームレート・解像度・シャッタースピード・ISOなどのパラメータを設定できることは分かっている。問題は外部クロックとの同期<シンクロ>だ。ある程度自前でコードを書くことは厭わないが、どんな感じだろうか。規模感・難易度・そもそも実現可能性はあるのか。
実施例
これなんか近いことをやってる。
python - Raspberry Pi Camera - When is it ready for next frame - Raspberry Pi Stack Exchange
pythonで書けばいいのね…。python知らんけど。これ見るとかなり細かくラズパイカメラの操作ができるそうだ。
https://picamera.readthedocs.io/en/release-1.12/index.html
当然GPIOを扱うライブラリ(pythonに限らず)もあるので、これらを組み合わせればできそうだ。
光は見えた。
ハードウェアと光学系
ハードウェア
ハウジング
SUPER8のカートリッジに詰め込むことが大義なので、中を確認してみた。プラスチックで封をしてあるので開けるのはなかなか大変。ここを参考にした。
www.youtube.com
バラしてみてわかったのは、今回の用途のためにはこれはただの外箱で、中の構造や機能にはほとんど利用価値がないことだ。「3Dプリンタで出力」との考えも頭をもたげてきた。
フィルム送りセンサー
はじめはフィルムの巻軸の回転を検出するつもりでいたが、より簡単そうなフィルム送りの爪の動きをカウントする方法を考えている。
光学系
撮影手法
フォーカス面(フィルム位置)にラズパイカメラのイメージセンサを置く方法もあるようだが、まずはフォーカス面に何らかのスクリーンを置いて、それを後ろからラズパイカメラで撮る、という簡易的な方法を考えている。この場合でも近接撮影になるので、補正のためのマクロレンズを使う必要性があるかもしれない。
カメラ
そりゃラズパイカメラでしょ。
…ん?
…え?
入らない!スーパー8フィルムのハウジングに、このカメラ入らない!
カメラユニットそのものは小さいのだが、基盤が大きくてこのままでは入らない。基盤の両端を削れば入るかもしれないが、ちょっと怖い。なので探しました。ドン。
Spy Camera for Raspberry Pi ID: 1937 - $39.95 : Adafruit Industries, Unique & fun DIY electronics and kits
この大きさなら、あのハウジングに収まりますわね。
…ん?
…え?
ZEROに対応していないNO!?
たしかにZEROはカメラインターフェースの端子のピッチが違うので専用ケーブルが必要なのだった。それくらい用意してくれよなあ。でもうまく配線すればいけるのでは?
はいありました。先人がおりました。
Pi Zero - > Spy Camera
imgur.comということで
ソフトもハードも「なんとかなるんじゃないか」と思えるくらいの材料は揃った。ぼちぼちやって行きます。
koss(社長)
アールテクニカ株式会社 代表取締役。株式会社エイガアルライツ取締役として漫画『コブラ』などの寺沢武一作品を世に送り出すプロデューサーでもある。 「映画 / 音楽 / 生き物 / 宇宙 x IT」を人生のテーマとする。 昆虫の変態専門チャンネル「コーカサスTV」をUstreamにて配信中。みんな見てくれよな!