はじめに
Apple Vision ProのSpatial Videoについて調べてみました。
Spatial Videoについて
- 右目用、左目用の映像を動画にしたステレオ立体視映像
- メタデータにより、Vision Proでの再生時に空間的に最適な表示を行う
- フォーマットはMV-HEVC(Multiview High Efficiency Video Encoding)
メタデータについて
- Baseline
- ステレオカメラの撮影時の距離。例:64cm
- Field of view
- カメラの視野角。例:60°
- Display adjustment
- 視差調整値。正の値だと背面に、負の値だと正面に飛び出て見える。例:+2%
こちらのWWDC24の動画で詳細まで説明されています。
Spatial Videoを撮影する
Spatial Videoの撮影方法は、現状以下のデバイスで可能です。
- Apple Vision Pro
- iPhone 15Pro/ProMax
- iPhone 16全モデル
メタデータの調べ方
Vision Proで撮影したSpatial Videoをffprobeで解析したところ、以下の情報が出力されました。
Side data:
stereo3d: unspecified, view: packed, primary eye: none, baseline: 19240, horizontal_disparity_adjustment: 0.0200, horizontal_field_of_view: 63.400
- baseline: 19240
- horizontal_disparity_adjustment: 0.0200
- horizontal_field_of_view: 63.400
baselineが19240というのは良くわかりませんが、display adjustmentとfovはそれらしい値が取れました。
Spatial Videoを再生する方法
Spatial Videoの再生方法は公式にはApple Vision ProのPhotoアプリで再生可能です。
他にもSpatial Videoを再生可能なアプリはあるようです(未調査)
Spatial Videoのプレイヤーを作る
Xcodeで再生する
先に紹介したWWDC24のBuild compelling spatial photo and video experiencesの動画で実装方法が紹介されています。
Unityで再生する
VisionOSVideoComponentで再生可能です。
注意点として、動画ファイルはvideo clipとして設定し、同じファイルを/StreamingAssets/VisionOSVideoClips/に配置する必要があります。
URL指定は出来ません。
余談
display adjustmentでの調整により、左目の画像は左にずらし、右目の画像は逆に右にずらしています。
ずらして余白ができる部分には端の映像が引き伸ばされるような形になっていました。
この辺り、公式のPhotoアプリは端をぼかしていて見せ方が上手いなと思いました。
Spatial Videoを作る
Apple 公式のConverter
Side By Sideの videoを MV-HEVCに変換するサンプルプロジェクト
Spatial Videoにする場合は実行時引数で--spatial...
を有効にする必要があります。
また、動画の音は無くなるので、別途audio部分を合成する必要があります。
Spatial Video Tool
Spatial Video ⇔ SBS or OU Stereo Video相互変換ツール ( Mac command line tool )
https://blog.mikeswanson.com/spatial/
こちらは音がなくなる事もなく、便利です。
Macでのみ動作します。
Spatial Video → SBS動画変換
./spatial export -i spatial_test.mov -f sbs -o side_by_side.mov
SBS動画 → Spatial Video変換
./spatial make -i side_by_side.mov -f sbs -o new_spatial.mov --cdist 19.24 --hfov 63.4 --hadjust 0.02 --primary right --projection rect
メタデータを変更して見た目を比較する
メタデータを変更した動画で見た目を比較してみました。
FoVを60-90で比較した場合
Photoアプリのwindowモードでは違いがなく、Immersiveモードにすると、90°の方が大きく表示されました。
数値を変更してみましたが、Photoアプリでは最小60°、最大90°でそれを超えた値を指定しても変化はありませんでした。
参考