RICOH THETA V でダイビングの様子を撮影した360度動画に対して Mac で色補正などの編集を行いたかった。 適当なフリーソフトが見つからなかったのでいろいろ調べながら ffmpeg で編集した。 そのメモを残しておく。
- input
- mp4 形式 (THETA V で撮影した360度動画をそのまま取得)
- tools
- ffmpeg: 4.1.3
- ffprobe: 4.1.3
- GIMP: 2.10.10
基本的には以下の記事のとおり。
補正値を得るために GIMP を使う。 GIMP は GUI のイメージエディタで、download して install しておく。
まず、色補正したい動画のスナップショットを撮る。 できるだけたくさんの色を含んでいるフレームが良い。 そのスナップショットを GIMP で開く。
色
-> レベル
で「色レベルの調整」ウィンドウを開く。
ここで Auto Input Levels
ボタンを押し、補正をかける。
(Pick white point for all chanels
などで補正してもいいかもしれない)
補正をかけると入力レベルの最小値と最大値が動く。
この場合、赤 (Red) の最小値は7, 最大値は118である。 RGB それぞれについてこれらの値をメモしておく。
ffmpeg の実行時に -vf
(video filter) オプションで colorlevels
フィルタを指定するときに前述の値を用いる。
GIMP で得た値は 0~255 の範囲になっており、一方で colorlevels
では [-1.0, 1.0] で指定するため GIMP のそれぞれの最小値・最大値を 255 で割った値を渡す。
以下は -vf
オプションの例。
-vf "colorlevels=rimin=0.02745:gimin=0.02745:bimin=0.02352:rimax=0.4627:gimax=0.5176:bimax=0.4901"
ffprobe で360度動画の情報を出すと以下のような出力が得られる。
$ ffprobe input.mp4
...
Side data:
spherical: equirectangular (0.000000/0.000000/0.000000)
...
ヘッダ情報?の中に Side data
という項目があり、その中に spherical
つまり全天球である旨が記載されている。
おそらく360度動画対応のプレイヤーはここから360度動画かどうかを判断しているものと思われる。
ところが ffmpeg で変換をかけるとこの情報が失われてしまう。
失われないようにするためには -strict unofficial
を指定して実行する。
詳しくは Preserving Side Data information for 360 video transcoding using FFmpeg - stackoverflow
$ ffmpeg -i input.mp4 -ss 3 -t 60 -vf "colorlevels=rimin=0.02745:gimin=0.02745:bimin=0.02352:rimax=0.4627:gimax=0.5176:bimax=0.4901" -pix_fmt yuv420p -strict unofficial output.mp4
-ss 3 -t 60
: 時間的なトリミングの指定。3秒の時点からスタートして60秒間の動画を抜き出す-vf ...
: 上述のとおり-pix_fmt yuv420p
: pixel format をyuv420p
に指定。Quicktime で再生するために必要-strict unofficial
上述のとおり