はじめに
以前Appleの単眼深度推定モデルDepth Proを用いてサイドバイサイドの動画をMeta Questに取り込んでなんちゃって空間ビデオをつくっていたわけですが、最近M4 Mac miniを購入したので、今回はApple公式のコンバータを使ってiOSで空間ビデオとして認識される本物の空間ビデオを作っていこうと思います。
↓前回の記事。サイドバイサイドの動画をお持ちでない場合はぜひこちらを参考に作成してみてください。
今回この記事を作成するにあたり、こちらの記事がとても参考になりました。
必要なもの
- Apple silicon搭載のMac(Xcode使用のため)
- サイドバイサイドの動画
- Meta Quest
- iPhone
- Meta Horizonアプリ(iOS)
インストール類
公式のコンバータだと音声はつけてくれないらしいので、こちらの記事を元に準備します。
まずはパッケージをインストールします。
brew install spatial
brewを入れてない場合は事前にインストールしておきましょう。
インストールが終わったら、spatial
とターミナルで打って認識されているか確認しましょう。正常にインストールできていると以下のようなものが出てきます。
% spatial
OVERVIEW: A tool to process MV-HEVC spatial photo and video files.
This tool exports from spatial photo/video files to specified formats and makes
spatial photo/video files from formatted inputs. It can also combine existing
audio and video files, report spatial information in a photo/video, and edit
spatial video metadata.
Questions and comments: https://blog.mikeswanson.com/contact
USAGE: spatial [--args <args>] <subcommand>
OPTIONS:
--args <args> Arguments file.
--version Show the version.
-h, --help Show help information.
SUBCOMMANDS:
info Show spatial information for an input file.
export Export formatted output from a spatial input file.
make Make spatial output from a formatted input file.
combine Combine/mux multiple inputs into a single video
output.
metadata Report and modify spatial video metadata.
See 'spatial help <subcommand>' for detailed help.
実行
実行コマンドは以下で構成されています。
$ spatial [--args <args>] <subcommand>
区分 | オプション / サブコマンド | 説明 |
---|---|---|
オプション | --args <args> |
引数ファイル |
--version |
バージョンを表示 | |
-h , --help
|
ヘルプ情報を表示 | |
サブコマンド | info |
入力ファイルの空間情報を表示 |
export |
空間入力ファイルからフォーマット済み出力をエクスポート | |
make |
フォーマット済み入力ファイルから空間出力を生成 | |
combine |
複数の入力を1つの映像出力に結合/多重化 | |
metadata |
空間ビデオのメタデータを表示・修正 |
すでに持っているサイドバイサイドの動画を空間ビデオに変換したい今回のようなケースでは基本的にmake
サブコマンドしか使わないです。
以下はmake
サブコマンドを指定したときのオプションの引数です。
オプション | 説明 |
---|---|
-i , --input <input>
|
入力ファイル |
-o , --output <output>
|
出力ファイル |
-f , --format <format>
|
入力ファイルのステレオ形式。2つの入力がある場合は不要 (値: hsbs , sbs , hou , ou ) |
-r , --reverse
|
エンコード時に左右の目を反転(メタデータだけでなく実データも) |
-b , --bitrate <bitrate>
|
出力ビデオのビットレート(例: 750K , 20M , 20000000 ) |
--scale <scale> |
出力スケールの指定(例: w=200:h=100 , 200:100 , 200x100 , 200:-1 )-1 は元のアスペクト比を維持 |
-q , --quality <quality>
|
ビデオ品質(範囲: 0.0 ~ 1.0 ) |
--ss <ss> |
開始時刻(秒または hh:mm:ss[.xxx] 形式)ファイルの先頭からの相対値 |
--t <t> |
再生時間(秒または hh:mm:ss[.xxx] 形式)開始時刻からの相対値 |
--to <to> |
終了時刻(秒または hh:mm:ss[.xxx] 形式)ファイルの先頭からの相対値 |
-n , --no-audio
|
音声トラックを含めない |
--hero <hero> |
空間対応プレイヤー向けのヒーローアイ(left , right ) |
--primary <primary> |
通常2D再生時のプライマリーアイ(left , right ) |
--cdist <cdist> |
カメラ中心間の距離(単位: mm) |
--hfov <hfov> |
水平方向の視野角(単位: 度) |
--hadjust <hadjust> |
水平視差調整(範囲: -1.0 ~ 1.0 ) |
--projection <projection> |
ビデオの投影種別(rect , equirect , halfEquirect , fisheye ) |
--faststart |
moov atom を動画ファイルの先頭に移動 |
-y , --overwrite
|
出力ファイルを上書き |
--maxkey <maxkey> |
キーフレームの最大間隔(秒)デフォルト: 2.0
|
--args <args> |
引数ファイルを指定 |
--version |
バージョン情報の表示 |
-h , --help
|
ヘルプを表示 |
たくさん引数がありますが、とりあえず以下を実行すればいいです。
-f
の引数のsbs
はside by sideを意味しています。
spatial make -i input.mp4 -o output.mov -f sbs --cdist 19.24 --hfov 63.4 --hadjust 0.02 --primary right --projection rect
cdist
以降のパラメーターは開発者曰く、iPhone 15 Proで空間ビデオを撮影したときのように見える数値のようです。
ファイル情報を表示するときは以下を実行すると中身を見れます。
spatial info -i output.mov
Meta Horizonへアップロード
完成した空間ビデオ(movファイル)をiPhoneへAirDropで送ります。
iPhoneの写真アプリで開いた時、以下のように左上にSPATIAL
表記があれば正しく空間ビデオとして認識されています。
もしApple Vision Proをお持ちであればMacから直接Vision Proに送ればそのまま空間ビデオを楽しめますが、Meta Questで見たい場合はそうはいきません。
今度は、iPhoneのMeta Horizonアプリを開いてまずメニューアイコンを選択。
次にGallery
を選択。
右上にあるアップロードアイコンを選択
右側のSpatial
を選択して先ほどiPhoneに保存した空間ビデオを選んでアップロードします。
アップロードが完了するまで待ちましょう。動画が長いと少々時間かかります。このアップロードの過程でAppleの空間ビデオをMeta Questで見られるようにする処理が内部で行われています。
レッツ空間ビデオ
これで準備は整いました。心の準備はいいでしょうか?
Meta Questを起動してGallery
アプリを開き、アップロードした動画の左下に3D
と表記されていれば空間ビデオとして認識されています。あとは空間ビデオを楽しむだけです。
どのように見えているか載せたいところですが、2D画像ではどう頑張っても立体的に見えている様子を伝えられないのないので泣く泣く省略。
感想
前回記事で作成したなんちゃって空間ビデオ
は本当になんとなく立体...?という具合でしたが、今回作成したものは明らかに奥行きを感じられたと思います。
普通の2Dの動画から深度推定して本当の空間ビデオに変換する一連の流れが完成したので、推しの動画から好きなバンドのMVやらなんでもかんでも立体的に楽しまます。
いろんな動画を変換してみた所感としては、MVのように頻繁にカットが変わるような激しい動きの動画ではなかなか立体感を楽しめません。おそらくvlog系の動画やスマホで撮影したような日常系の映像のほうがより立体感を楽しめると思います。
アイドルのMVはシーンの遷移が激し過ぎてちょっとしか立体感を味わえません(泣)
あと、よっぽどいいカメラで撮影されてない限り、明るさが暗めの動画もちょっと苦手そうな雰囲気があります。
今後の展望
満足度は高いですが、決して完璧ではありません。
Meta Questにサンプルとして入っている深度推定して復元処理されていない(ネイティブでステレオ撮影された)空間ビデオは視聴者側に飛び出して見えるのに対して、今回の深度推定から復元処理を経た自作空間ビデオは手前側には飛び出しては来ず、動画の中で奥行きのある空間が生まれている程度に過ぎません。
おそらくサイドバイサイドの生成処理を改良すれば手前側にも飛び出して見えるようにできると思います(たぶん)。
あとそもそもAppleの空間ビデオのフォーマットが1080p 30fpsなので、せっかく元の動画が4kでもフルHDになってしまいます。
まあ今後に期待ですね。