Skip to content

Instantly share code, notes, and snippets.

@soonraah
Last active April 6, 2024 10:31
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save soonraah/7c7a8369829975aeb65ed048af789f4f to your computer and use it in GitHub Desktop.
Save soonraah/7c7a8369829975aeb65ed048af789f4f to your computer and use it in GitHub Desktop.
ffmpeg で360度動画を編集したときのメモ

ffmpeg で360度動画を編集

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 などで補正してもいいかもしれない)

補正をかけると入力レベルの最小値と最大値が動く。

ss_gimp

この場合、赤 (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"

360度動画のメタデータ

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 コマンド例

$ 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 上述のとおり
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment