前面・背面カメラの映像はなぜズレるのか
たいていズレません。ただ、その心配には根拠があります。実際に体験する場面があるからです。2台のカメラで別々に撮る場合——スマートフォン2台を並べて撮る、あるいは前面と背面のストリームを別々の動画トラックとして保存するアプリを使う場合——長く回すほど本当にズレていきます。1枚に合成する同時録画にこの問題が起きないのは、ズレを防ぐのがうまいからではありません。そもそもズレる相手がいない、最初から2つ目のファイルが存在しないからです。
この違いはそれ自体として理解しておく価値があります。同時録画で本当にズレが起こりうる唯一の場所も、これでわかるからです。それは音声です。音声は別に選ばれた入力から書き出されるもので、それ自体が遅延を持つことがあります。
カメラ同士のズレは、そもそもどこから来るのか
互いに独立した2つのカメラ——スマートフォン2台であれ、前面と背面を別々の2本のファイルとして録画する設計のアプリであれ——はそれぞれ自分の時計で動いています。名目上のフレームレートがほんのわずかでも噛み合っていなければ、それは長回しのあいだに積み重なります。1分あたり1フレームに満たないズレは最初は気づきませんが、10分も回せばはっきり見えてきます。本物の多カメラ制作でカチンコや共有タイムコード、同期音を使うのはまさにこのためです。編集者が2本の素材を合わせるための、誰もが同意できる瞬間を用意する必要がある——素材そのものの時間軸は信用できないからです。
スマートフォン2台で気軽に撮るリアクション動画では、たいていこれを全部省きます。だから見返すと、映像のリアクションが音より少し早く、あるいは遅く来ているように見えることがよくあります。2台のスマートフォンをまったく同じ瞬間に起動できる人はいませんし、あとからそれを補正する仕組みもありません。
1枚に合成する録画に、この問題が起こらない理由
リアルタイムに合成する同時録画アプリは、前面カメラを録ってから別に背面カメラを録る、という作りをしていません。両方のカメラ映像が届いたその場で GPU 上の1枚のフレームに描き込み、そのフレーム——ファインダーに映っているまさにそのフレーム——をファイルに書き出します。何かがストレージに実際に届く時点で、2つの映像はすでに1つに合わさっています。あとから離れていく可能性のある「カメラAの素材」と「カメラBの素材」が並んで存在する、という状況自体がありません。合成録画が生み出すのは常にただ1本のファイルであり、共有された1本の時間軸の上を、テイク全体を通してひとつの固定フレームレートで走っているからです。
これは性能の話ではなく、構造の話です。ズレが小さいとか、うまく制御されているという話ではなく、「2つのファイルのあいだでズレる」という種類の問題そのものが、1本のファイルには当てはまらないということです。
本当に存在する、ごくわずかな差
前面カメラと背面カメラは、合成される瞬間の直前まで、それぞれ独立した2本の撮影パイプラインとして動いています。露出がそうであるように、この2つを揃える仕組みは何もありません——それぞれが自分の見ている映像だけを読んで、自分で露出を決めます。したがってピクセル単位で見れば、ある合成フレームの中の2つの映像は、それぞれのセンサーが実際に場面を読み取った瞬間が、1フレームに満たないぶんだけズレている可能性があります。これは目に見えるズレとして積み重なることはありません。出力される各フレームは、そのつどその瞬間の2つの最新バッファから新しく組み立てられるからです。長回しのあいだにどんどん膨らんでいく滞留はなく、最初から最後までほぼ一定の、ごくわずかな差があるだけです。これは実在しますが、フレームを1枚ずつ比較でもしない限り気づけるものではなく、本当に2本の独立したファイルが持ちうる数秒単位のズレとはまったく別物です。
本当に、目に見える形でズレうる場所:音声
同時録画は、合成された映像とあわせて、別に選ばれた入力から1本の音声トラックを書き出します。その入力が端末内蔵のマイクなら、エンコーダのすぐそばにあるので気にする必要はありません。Bluetooth マイクや AirPods であれば、音声は圧縮され、無線で送られ、復号されるという、より遅い経路を通って端末に届きます。これは一定の遅延を生み、近距離で話す映像では、言葉より先に口が動いているように見えるほどになることがあります。これは2つのカメラとはまったく関係のない、別の仕組みによるものです。詳しくは同時録画の音声のガイドと、AirPods を使った同時録画のガイドで扱っています。
フレームが落ちるとき、実際に起きていること
発熱やハードウェア予算の不足といった実際の負荷のもとでは、同時録画は遅れて届くフレームを配信するのではなく、そのフレームを捨てます。タイミングを逃したフレームを配信すれば、パイプライン全体をさらに遅らせるだけだからです。ここで知っておく価値があるのは、落ちるフレームが何かということです。落ちるのは合成済みのフレームまるごと、つまり2つのカメラ映像が同時に落ちるのであって、片方のカメラの取り分だけが半分になるわけではありません。負荷の高いテイクは短くなったり、はっきりカクついたりしますが、その中の2つの映像がお互いから離れていくことはありません。カクつきはズレの始まりではないのです。
DualCam はこの仕組みで動いています。2つのカメラ映像は毎回 GPU 上で1枚のフレームに合成され、音声トラックは iOS がそのとき選んでいる入力から1本だけ書き出され、出来上がるファイルは最初のフレームから最後のフレームまで同じひとつの録画です。あとから合わせ直すものは何も残っていません。
よくある追加の疑問
代わりに2台のスマートフォンで別々に撮ったら、同期は保てますか。
安定して保つのは難しく、長くは続きません。独立した2台の端末はそれぞれ自分の時計で動いており、カチンコの瞬間や共有タイムコードのような同期の手がかりがなければ、それなりの長さのテイクで2本のファイルは少しずつズレていきます。これはまさに、1本の合成ファイルしか生み出さない録画方式が根本から避けている問題です。
あとから編集すると、ズレが生まれることはありますか。
映像と音声を切り離して、それぞれ別に再エンコードしたりトリミングしたりした場合だけです。手を加えなければ、ファイルは録画されたときの映像と音声の関係をそのまま保ちます。
発熱によるフレーム落ちで、ファイルの中で片方のカメラがもう片方より遅れることはありますか。
ありません。落ちるのは合成済みのフレームまるごとで、2つのカメラ映像が一緒に落ちます。片方の映像だけが欠けるわけではありません。どれだけカクついても、ファイルの中で2つの映像は常にペアのままです。変わるのは、そのテイクがどれだけ滑らかか、どれだけ長いかだけです。
とにかく撮ってみたいなら
DualCam は iPhone の前面・背面カメラを同時に動かし、撮りながら 1 本の MP4 に合成します。無料、アカウント不要、広告なし、映像は端末の外に出ません。