ブラックボックスデータでスタビライズ Gyroflow編

How-to
この記事は約11分で読めます。

今回は ReelSteady GOを使わずに、ブラックボックスのジャイロデータでスタビライズできる、Gyroflow の使用方法を解説していきます。

GoProカメラが撮影と同時に記録していくジャイロデータを使用して、ReelSteady GOは驚くほど滑らかなスタビライズ(ブレ補正)をしてくれます。しかし ReelSteady GO は GoProのジャイロデータにしか対応していないので、他のカメラで撮影した動画はスタビライズ出来ませんでした。

そこで考え出されたのが、GoPro以外のカメラでも撮影と同時にジャイロデータを記録し、データをGoPro形式に変換して動画に記録、そしてあたかもGoProで撮影したようにして ReelSteady GOを騙してスタビライズさせてしまう方法が考案されました。

この方法は当サイトでも記事にして詳細に解説しました。(以下参照)

しかし、この方法はいくつかのハードルがあります

  • 動画とは別に記録したジャイロデータを動画と完全に同期させなければならない。
  • GoPro session5かHERO6/7のどれかと同じような歪曲収差をもっているレンズでしか使えない。

これらの弱点を解決して、ジャイロデータと動画の同期は適当でよくどんなレンズでも使用でき、有料ソフトであるReelSteady GOが無くてもスタビライズできるGyroflowがあります。

Gyroflowとは

Gyroflowはオランダ在住の大学生である、Elvin Chen氏が作成しました。Python、OpenCV、PySide2などの言語とライブラリを使用して作成されています。

カメラレンズの補正データの作成、動画のスタビライズ、動画をGoProのスーパービューのようにする事が出来ます。

Github https://github.com/gyroflow/gyroflow

専用サイト https://gyroflow.xyz/

スポンサーリンク

ブラックボックスデータの取得

撮影と同時にBetaflightのブラックボックスのデータも記録して取得する必要があります。

取得したブラックボックスのデータは、動画とどれだけズレているか大まかな秒数が必要ですので、Betaflight Blackbox Explorer を使用してズレを見つけます。厳密に調べる必要はありません。2・3秒の違いはGyroflowが見つけてくれます。

動画よりブラックボックスのデータが遅れている場合はプラス進んでいる場合はマイナスとしてメモしてください。

ブラックボックスのデータをCSV形式でエクスポートします。この時ファイル名を動画と同じにしておくとGyroflowが自動で読み込んでくれます。

これら方法はこちらの記事に詳しく書きましたのでこちらを参照してください。

Gyroflow のダウンロード

Gyroflowのサイトからダウンロードします。

WindowsかMacの実行形式のファイルをダウンロードします。(記事ではWindows版で説明します。)

また、ページ下部にはレンズプリセットのセットがありますのでこちらもダウンロードします。

レンズ補正プリセットの作成

動画をスタビライズするにはレンズが持っている歪曲収差を補正しないといけません

レンズの歪曲収差による動画の歪を修正し、2次元上で画像を動かしても収差の影響が無いようにします。この歪曲収差はレンズごとに違うため、これを修正するためのレンズプリセットが必要になります。

レンズ補正プリセットはGyroflowと同時にダウンロードできましたが、その中に撮影に使用したレンズのプリセットが無い場合は作成する必要があります。

いいかえると、レンズ補正プリセットが自由に作れるので、どんなカメラでもスタビライズできることになります。

レンズ補正プリセット作成用のターゲットを撮影する

ここではレンズ補正プリセットを作成することをキャリブレーションと呼んでいます。

まずダウンロードしたGyroflowをダブルクリックして起動します。

起動まで少し時間がかかります。Camera Calibratorをクリックします。


キャリブレーション用の撮影ターゲットであるチェスボードのサイズを聞いてきますので、そのままOKで進めてください。


Fileをクリックします。


Calibration targetをクリックします。


ターゲットが表示されますので、全画面表示してモニター画面に大きく表示させます。

ここからは、実際にスタビライズする動画を撮影したレンズのカメラでターゲットを撮影していきます。ターゲットの撮影方法は、いろいろな角度から撮影する。画面の隅にターゲットが来るように撮影します。またブレないようにところどころで動きを止めてください。

以下の動画を参考にしてください。

キャリブレーションするための動画は、ピントが合っている。ブレていない。モニター画面に周囲の反射が無い。事に注意してください。

ターゲットを撮影した動画でキャリブレーションする

次に撮影した動画を利用してキャリブレーションします。

FileからOpen fileをクリックして撮影した動画を選択します。


下図のように歪曲が強くなるモニターの端にターゲットが映っているフレームを探します。
動画を停止して①のAdd Current frame をクリックして現在表示しているフレームを読み込ませます。この時に図の赤矢印で示したようにターゲットの白と黒の境界が認識され虹色の線が表示されます。もし数秒経っても表示されない時は違うフレームを読み込ませてください。

次に②のProcess loaded framesをクリックしてキャリブレート処理させます。

この作業を繰り返します。歪曲収差の強い4隅が含まれるようにします。


下図のように正しく読み込めたフレームは赤矢印、処理されたフレームは青矢印の所にフレーム数が表示されます。この下にある緑枠で囲まれたRMS error:1.0未満になっていることを確認してください。

Process loaded framesをクリックしたときにRMS errorが大きくなった時は、Toggle lens correction にチェックを付けた時に、キャリブレートされたターゲットが表示されない場合は、今追加したフレームがうまく処理できなかったためですので削除します。

Remove last frameをクリックして最後に追加したフレームを削除して、別のフレームを追加してください。

フレームの処理が終了したらToggle lens correctionをチェックしてターゲットの歪曲が補正されていることを確認します。

補正前
補正後


キャリブレーションしたデータをレンズ補正プリセットとして保存します。下図のようにメーカーやレンズが判別しやすいように入力してExport preset fileをクリックして保存します。

Gyroflowでスタビライズする

ではいよいよここからが本編?です。

ランチャーのVideo Stabilizerをクリックします。

Inputタブを開き、

1、処理する動画ファイルを開きます。
2、レンズ補正プリセットを開きます。
3、ブラックボックスのデータをを開きます。

ブラックボックスのデータは動画と同じファイル名が同じ場所にあれば自動で読み込まれます。各項目はもう一度クリックするとクリアされます。

各ファイルを指定したところ。


赤枠のCamera to gyro angleには撮影したカメラのチルト角を入力します。この例では10度。
オレンジ枠のInput low-pass filter ~にはジャイロデータに振動などのノイズがある時に使用します。この例では200Hz以下をカットする。


Sync/stabilizationタブを開きます。

1、動画とブラックボックスのデータとのズレ秒。例では動画のほうが8.3秒早く始まっている。
2、動画とジャイロが大きく動いているポイントを秒で指定します。
3、同じように動画の終わりの方で大きく動いているポイントを指定します。
4、Apply settings and compute syncをクリックして同期ポイントを探させます。


最初のポイントで動画とジャイロのズレが解析されグラフが表示されます。動画の各フレームを解析したデータとジャイロのデータが一致しているのを確認します。グラフを閉じると2つ目のポイントの解析が始まります。


2つ目のポイントのグラフが表示されます。この例では1つ目と2つ目のズレ量が違います。つまり動画の始めと終わりの辺ではズレている量が違うという事です。とくに動画のフレームレートが29.97fpsなどでは当然ズレが大きくなります。Gyroflowはこの前後のズレの違いも吸収するように線形補完してくれます。グラフを閉じます。


ジャイロの各軸のデータが表示されます。上からxyzですのでロール、ピッチ、ヨーになります。虫眼鏡ツールで拡大すると動画の解析部分を見ることが出来ます。グラフを閉じます。


グラフを全部閉じて数秒後に、2点のズレ量が入力されます。(赤枠内)


ここまででスタビライズの準備が揃いました。次は動画をエクスポートします。Exportタブを開きます。

エクスポートする動画のサイズを入力します。ここで入力するサイズはスケールされません。つまり3840×2160の4K動画でここに1920×1080と入力すると4K動画の真ん中だけが切り取られてエクスポートされます。
倍率は真ん中が切り取られた動画を拡大してエクスポートする設定になります。整数倍が指定できます。
エクスポートする範囲(動画の長さ)を指定します。

上図のはお使いのPCで動画のハードウェアエンコーディングが使用できる場合に有効にすると若干早くなります。にチェックを入れると、補正前と補正後の動画を並べてエクスポートできます。
下記のような動画になりますのでテスト時に便利です。ただし、4K動画だと横に2つ4K動画が並ぶので再生が大変かも。ここはFHDくらいで試したほうが良いでしょう。

はエクスポート中に処理状況の動画を表示します。エクスポートする動画のビットレートも指定できます。

ビットレートの下のFFmpeg color space selectionはエクスポートした動画が再生できない時は yuv420p と入力してください。

設定が終わったらExport stabilized videoをクリックして保存先を指定すると動画のエクスポートが始まります。終了してもなにも通知はありませんので黒ウインドウのログを見て判断してください。

初めてエクスポートする時にGyroflowはffmpegの実行ファイルをダウンロードします。
ダウンロードしたffmpegは下記のパスへ保存されます。

C:\Users\ユーザー名\AppData\Local\Temp\ffmpeg-latest-win64-static

エクスポート時に下図のようなエラーが出た時はダウンロードがうまくいかなかったことを示しており、エクスポートされた動画はフレームレートが25fpsになっています。

このような時はGyroflowを管理者として実行してみてください。下図はダウンロードが成功した様子。(緑枠)しかし、ハードウエアエンコーディングに対応していなかったのでエラーになった。(赤枠)この場合はHW Encodingのチェックを外して実行。

スタビライズのカスタマイズ

ここまでの説明で触れてこなかった設定項目の説明をします。

Smoothness (滑らかさ)

Smoothnessは前後のフレームをどれだけ参照してスタビライズするかの設定になります。数値が小さいほど滑らかさは少なくなります。

フリースタイル等で場面の変化が早い場合は少なめにします。逆にシネマティックなゆっくりとしたシーンでは大きめにしても良いでしょう。

下記はSmoothnessを10%から40%まで変更してみた時の比較動画です。

FOV

FOVは処理する視野角の設定になります。下記がデフォルトの1.5

こちらがFOV1.0で、真ん中だけが切り取られたようになっています。

二つを重ねてみると、これだけの画角の差になります。

もっとも、スタビライズ後はレンズの歪曲補正した分が黒枠になっているので、そこを避けるように切り取るとなればFOV1.0の画角に近くなりますね。

動画のクロップについて

クロップとは画面の切り取りの事で、スタビライズした動画は黒枠が付いています。この部分を切り取ってしまいたいのですが、現在のGyroflowにはクロップの機能がありません。(自動クロップを設計した形跡はありますw)したがってエクスポートする時に動画サイズを小さめにするか、動画編集ソフト上でクロップする必要があります。

ReelSteady GOはこのクロップを自動で、しかもクロップが大きくなったシーンを滑らかにズームしてくれる優れた機能があります。Gyroflowもはやくこの機能が欲しいですね。

Gyroflowでスタビライズした例

iFlight CineBee75 のFCにはブラックボックスが搭載されているので、ジャイロデータが使用できます。その CineBee75 に Caddx Loris 4K スプリットカメラを搭載して撮影後、Gyroflowでスタビライズしました。

タイトルとURLをコピーしました