⇒ 自然・科学系記事一覧

アクションカメラで撮った動画の歪みを無料ソフトで補正する方法

2019年9月、中華製のアクションカメラ Crosstour Action Camera CT8500を購入しました。アクションカメラとかウェアラブルカメラと言われるものでは、GoProが良いのでしょうけど、中国製の安価なものよりはるかに高額なので手が出ません。
それはともかく、この種のカメラで撮った動画は下写真の様に歪んでいます。
アクションカメラで撮った駅構内の写真(線路と架線で樽型歪みがわかる)
CT8500の4Kと称するモードで駅構内を撮った動画からひとコマ取った画像です。ただし、画像の歪みを問題にしているので縮小しています。
この画像を見ると明らかに架線の左右は下方向に反っています。そして、線路の左右は上方向に反っています。
この様な歪みを樽型歪みと呼んでいますが、方眼紙の様に直線が縦横に引かれている図を撮影すると歪みがはっきりします。
下の写真はダイソーで売られている1cm方眼マットをカメラレンズから約9cmの近接で撮ったものです。アクションカメラCT8500はマクロ(近接)に切り替えるスイッチは無く、AF(オートフォーカス)とも書かれてい無いので、9cmぐらいから無限大までピントが合うように出来ているようです。ピントが合うというと正確さを欠きますね。見た目にはピンボケが判らない範囲が広い、「被写体深度」が大きいということです。
CT8500で方眼紙を撮った写真

動画の歪み補正には、フリーソフト FFmpeg を使う

市販の動画編集ソフトにはアクションカメラで撮った動画の歪みを補正出来るものがありますが、 無料で使えるソフトは FFmpeg のレンズ補正フィルター lenscorrention を使う方法 以外見つけられませんでした。 市販ソフトと異なって現時点では使い勝手は悪いですが、手間暇とお金を天秤に掛けてお金には退いて貰いました。
FFmpegは、御使用のOSに合わせてFFmpeg (https://ffmpeg.org/)からダウンロードして、解凍展開してお好きな場所に置いて下さい。

FFmpegで動画の歪みを補正する手順
  1. レンズ補正フィルター lenscorrentionの定数を求める。
    最終的には変換した動画を見ながら定数を修正するので適当な数値を入れてもよいのですが、計算方法があるので求めてみます。その定数は、
    定数=横方向の画角÷縦方向の画角×対角線の画角÷1000 ・・・式1
    で求められます。
    GoProなどの機種では 画角を公開しているところもありますが、中国製アクションカメラ CT8500 の場合は見つけられなかったので、適当に計測してみました。方法は下図の様に実際に写した画像から三角関数で求める至極簡易なものです。
    カメラの写る範囲(画角)を求める方法の図
    図中の式は、D/L= tan(θ/2) になるθを求めるという表記です。
    この方法で求めるには実際に撮った画が居るので、先に挙げた方眼マットを撮影した画像を使って計算すると、
    横方向は93度、縦方向は62度、対角は112度になりました。
    この値を先に挙げた定数を求める計算式1に入れて四捨五入して定数は0.17とします。
  2. ダウンロードして解凍展開したFFmpegのbinフォルダーを開けます。
    下図はWin10のもので、binフォルダーには、ffmpeg.exe  ffplay.exe  ffprobe.exe の3つのファイルが入っています。方眼.MOVは歪みを補正したい動画ファイルで、私がbinフォルダーに移しました。
    FFmpegフォルダー内の図
    まず、歪みを補正したい動画をBinフォルダーに入れます。動画ファイルの拡張子は、MP4でもかまいません。FFmpegは融通が効きます。
  3. 次に、上図の赤丸の2をクリックして、青色に変わったところに cmd と入力して、コマンドプロウントを開きます。
    FFmpegのフォルダーからコマンドプロウントを開く方法の図

    \bin>の後に、ffmpeg を動かす命令とオプションを入れます。
    今回は、下記をコピーして、貼り付けてEnterキーを押しました。
    ffmpeg -i 方眼.mov -vf "lenscorrection=0.5:0.5:-0.17:0" 方眼.mp4
    ffmpegのレンズフィルターをコマンドプロウントで使うときの入力図
    • ffmpeg :実行するファイルです。PCを動かすプログラムです。
    • -i :次のファイルが入力ファイルであることを示します。
    • 方眼.MOV :補正したい入力ファイル名です。動画形式は、MOVで無くてもMP4でもかまいません。
    • -vf :エフェクトを示します
    • lenscorrection="中心の横方向位置:中心の縦方向位置:定数K1:定数K2"
      定数の値によって下図の様に変形変換されます。
      lenscorrectionの定数とエフェクトの効果を表した図
      定数が2つあり、補正が下図で表したように若干違います。図は、等間隔に縦横に直線を引いただけの動画を定数を変えて補正し、違いが判るように重ねたものです。
      lenscorrectionの2つの定数の違いを表した図
      上図では定数の一方を0にしていますが、2つの定数をそれぞれ変えてもかまいません。
      私は最初の定数K1を変えて、次の定数k2を0に固定した方がよいと思います。
    • 方眼.mp4 :出力ファイル名です
  4. 後はひたすら変換が終わるのを待つだけなのですが、ソフトウェアーだけで処理しているので、4K動画のファイルなら再生時間の5倍ぐらいの処理時間が必要です。 補正具合も終わるまで判らないので、1分程度の短い動画ファイルで定数を決めてから長時間の動画ファイルを補正した方が時間の無駄になりません。 市販アプリの場合は、マウスを動かして実際の動画を補正してから処理し、ハードウェアーでの処理も併用しているので処理時間は短くて済みます

定数を0.17にした補正は端がちょっと良くなかったので、0.16でやり直しました。
ffmpegで歪みを補正した写真
このくらいで我慢です。 最初に挙げた駅構内の動画を補正してみたのが下の写真です。
歪みを補正した駅構内の写真
架線や線路の様な直線が無い風景では判らないくらいには補正されていると思います。
(作成2019年10月12日 更新2019年10月14日)