VR180形式をVR360形式へ変換したい

  備忘録
【注意】
この記事は過去に別サイトで執筆したものを再掲載したものです。
内容が古くなっていて現在では適用できない場合や、もっと良い方法が出来ている場合があります。
 

VR180形式は、VR360形式の前方のみを抜き出した形式。視界後方のデータを省いてデータサイズを半分に。再生環境で要求されるリード速度も半分で済む(はず)。
しかし残念なことに世の中にはVR360形式しか対応していないプレイヤーもまだ存在していて、VR180形式のデータを再生すると180度→360度と解釈されて横方向に伸びてしまう。

そこで後方180度分の空間を付け加えることでVR360形式として再生できるようにしたい。
下記は、左右に並んでいる情報を上下に配置しなおしつつ、後方180度分のスペースを追加処理するオプション例。

$ ffmpeg.exe -i "input.mp4" \
  -vf "split[left][right]; [left]crop=iw/2:ih:0:0,pad=iw*2:ih*2:iw/2:0[LEFT]; [right]crop=iw/2:ih:iw/2:0,pad=iw*2:ih:iw/2:0[RIGHT]; [LEFT][RIGHT]overlay=0:h" \
  -acodec copy "output.mp4"

-vfコマンドは様々なエフェクトを追加するコマンド。

split[left][right];入力ソースを[left]と[right]の2系統に分ける。名前を付けただけで同じデータ。
[left]crop=iw/2:ih:0:0,[left]データから所定の部分を切抜く。引数は、切抜きサイズと切抜く場所の左上座標。
切抜きサイズは(iw/2:ih)なので、横方向に半分のサイズ。
切抜き場所は(0:0)なので左側半分のみのデータとなる。
pad=iw2:ih2:iw/2:0[LEFT];キャンパスサイズ変更して、結果を[LEFT]とする。引数は新しいキャンパスサイズと入力ソースの配置場所。
新キャンパスは(iw*2:ih)なので横方向に倍。
配置場所は(iw/2:0)なので新キャンパスの中央部分に配置される。
[right]crop=iw/2:ih:iw/2:0,[right]データから所定の部分を切抜く。
切抜きサイズは(iw/2:ih)なので、横方向に半分のサイズ。
切抜き場所は(iw/2:0)なので右側半分のみのデータとなる。
pad=iw*2:ih:iw/2:0[RIGHT];キャンパスサイズ変更して、結果を[RIGHT]とする。[left]への処理と同じ。
[LEFT][RIGHT]overlay=0:h[LEFT][RIGHT]として作成したソースを重ね合わせる。引数は[RIGHT]の左上を[LEFT]のどの位置に合わせるか。
(0:h)なので横方向は0なのでピッタリ重ね、縦方向はhなので[RIGHT]の縦サイズ。
重ね合わせとは言いつつ重なる部分はなく、[LEFT]を上、[RIGHT]を下に並べているイメージになる。

下記が、Intel HD graphicsの力を借りる版。-hwaccel qsv という部分と、 -c:v h264_qsv という部分がその指定です。

$ ffmpeg.exe -hwaccel qsv -i "input.mp4" -c:v h264_qsv \
  -vf "split[left][right]; [left]crop=iw/2:ih:0:0,pad=iw*2:ih*2:iw/2:0[LEFT]; [right]crop=iw/2:ih:iw/2:0,pad=iw*2:ih:iw/2:0[RIGHT]; [LEFT][RIGHT]overlay=0:h" \
  -acodec copy "output.mp4"

ffmpeg コマンドラインツール入門 第3回 – Morpho Tech Blog

https://techblog.morphoinc.com/entry/2020/07/21/100022

LEAVE A COMMENT