iPhoneでバレットタイム撮影

バレットタイム撮影ってご存知でしょうか。
きっと聞いたら「ああ〜」ってなる人は多いと思います。自分もそうでした。

バレットタイム

バレットタイム(英語: Bullet-time[1])はSFXの一つで、被写体の周囲にカメラをたくさん並べて、アングルを動かしたい方向にそれぞれのカメラを順番に連続撮影していき、被写体の動きはスローモーションで見えるが、カメラワークは高速で移動する映像を撮影する技術、またはその効果を指す。タイムスライス、マシンガン撮影 ともいう。また、並べたカメラを一斉に同時撮影すると、被写体は静止ないし低速で動作した状態でカメラアングルが動く映像が作れる(『マトリックス』で、モーフィアスが足に弾丸を受けるシーン)。

WiKipedia

そうです、あの映画「マトリックス」で戦っている最中などにカメラアングルが対象人物の周りをグルっと1周するやつです。主人公が銃弾を避けようとするとこで、カメラアングルが主人公の周囲をグルっとします。

 iPhoneのカメラでそれをやってみようということで、プロトタイプとして簡単なアプリを作りましたので、どう作ったか、自分が忘れないためにも書き残しておきたいと思います。

複数のiPhoneのシャッターを同じタイミングで切る

バレットタイム撮影では、円状に配置したカメラのシャッターを同じタイミングで切る必要があります。じゃないと動いている被写体のある瞬間のポーズのときに周囲をグルっと回れないですからね。それを実現するためにBluetoothLEを使いました。

iPhone1台をセントラルとして、撮影する人が持っておき、円状に配置したiPhoneをペリフェラルにしておきます。

セントラルのiPhoneで撮影ボタンが押されたら、各ペリフェラルのiPhoneにWriteします。別にシャッターを切るだけならWriteでもReadでもどちらでもよかったのですが、今回は何枚連写するかをペリフェラルに知らせたかったのでWriteにしました。

iPhoneでBluetoothLEを使う方法はググるとたくさん参考になるサイトが出てきますし、以下の書籍のシリーズで詳細に書かれているので、特に困る事はないかなと思います。

 

 上を目指すプログラマーのためのiPhoneアプリ開発テクニック iOS 7編

 

動いているものを撮影したときにブレが少ないようにする

iPhoneのカメラの撮影方法はいくつかあります。一番簡単なのはUIImagePickerControllerを使う方法ですが、今回はプログラム側から撮影しなければならないので使えません。

そこで、AVFoundationが登場するわけですが、ここでも2通りの実装方法があります。1つは普通にカメラで静止画を撮影する方法。もう1つは動画モードで撮影開始して、撮影ボタンが押された瞬間のフレームを静止画として取得する方法です。

カメラに疎い自分は、被写体が常に動いている状態を撮影するという安直な理由で後者を選択しました。が、動画モードを120fps(iPhone5Sの最大値)や240fps(iPhone6Plusの最大値)にしても撮影された画像がブレブレでした。

自分はカメラに詳しくなかったので、無駄にハマるはめに。。

調べてみると動いているものをブレなく撮影するにはカメラの露出とシャッタースピードが大事だということを知りました。運が良い事にiOS8からカメラ周りのAPIがいろいろ公開され、シャッタースピードなども設定できるようになっていました。公式のドキュメントを覗いてみると、いろいろ公開されています。

AVFoundation Changes 

その中のAVCaptureDeviceクラスのexposureDurationというプロパティがシャッタースピードです。

自分はてっきりShutter speedとか、SSとかいうプロパティかと思って探したので、気づくまでに少し時間かかりました。。

露出とシャッタースピードの値の範囲が一番大きいAVCaptureDeviceFormatをAVCaptureDeviceに設定して、その範囲内の値を指定することが出来ます。

露出をiPhone5の最大736、シャッタースピードを1000に設定して撮影してみると、、、見事くっきり撮影できました!

 

こんな感じで作ったバレット撮影アプリですが、今回の撮影ではiPhoneが4台だったので、マトリックスのように滑らかではありません。次回はもっと台数を増やして撮影してみたいと思います。

●この記事を書いた人