この記事ではGoPro以外のカメラで撮影したビデオでも、ReelSteady GOでブレ補正してスムーズビデオにする方法を、図解付きで解説していきます。
GoPro専用のスタビライザーソフトである、ReelSteady GO を使用すると驚くほどのブレ補正ができます。ゆらゆらと画面が揺れているビデオでも、まさに「ぬるぬる~」という感じのスムーズビデオになってしまうのは、ドローンによる空撮には大変ありがたいツールです。
当サイトでもこれまでNaked GoPro、いわゆる剥きプロで撮影し、ReelSteady GOでブレ補正(スタビライズ)したビデオを公開してきました。
このReelSteady GOの強力なブレ補正は、GoProが撮影時に同時に記録するジャイロデータを利用して、画面の傾き補正しているためです。つまりジャイロのデータが記録されていないとブレ補正は出来ないのです。
さらにGoProが記録するジャイロデータの記録方法も、GoProが独自に開発した形式になっており、ReelSteady GOはその形式にしか対応していません。
つまり、ReelSteady GOではGoProで撮影したビデオしかブレ補正は出来ないのです。
ところが、
GoPro以外のカメラで撮影されたビデオに、GoProと同じ形式のジャイロデータを格納してやると、ReelSteady GOでブレ補正が出来ちゃうのです!!
なんだってーーー
できるんです。
今回はその方法を解説していきます。
更新履歴
2021-1-28:以下の項目追加と、言いまわし、誤字脱字修正
GoPro以外のカメラでも ReelSteady GOが使用できる仕組み
動画のサイズについて
ReelSteady GOでブレ補正したビデオ
初めに、GoPro以外のカメラで撮影されたビデオが、本当に ReelSteady GOでブレ補正をしちゃった動画をごらん下さい。
このビデオは3インチのレーシングドローンに搭載された、RunCam Hyblidで撮影しました。
見事にブレ補正されていますね。ちょっと雑に飛んでみたのですが、揺れが無くなっています。
GoPro以外のカメラでも ReelSteady GOが使用できる仕組み
簡単に一言でいえば、
ReelSteady GO を GoProで撮影した動画 だと騙します。
簡単ですね。
そのためには以下の条件がそろっている必要があります。
- ジャイロデータが必要
- ジャイロデータはGoProの独自形式で動画に格納されている
- 動画のメタデータに、どのGoProで、どんなモードで撮影されたか記録してある
これらのデータがないとReelSteady GOは「メタ―データが見つからない」と表示します。
GoPro以外のカメラでジャイロのデータを取得する方法
ReelSteady GOでブレ補正する前提となるのがジャイロデータです。当然撮影するカメラの動きを表すジャイロデータではなくてはなりません。つまりカメラと固定されたジャイロセンサーが必要という事です。
どのジャイロ使用するか
ジャイロというと、ドローンのフライトコントローラー(以降:FC)にはジャイロが搭載されていますね。そのジャイロのデータを取得できないでしょうか?それが出来るんです。FCのファームウェアである、Betaflightはジャイロや加速度計のデータもブラックボックスのログに出力できますのでこれを利用します。
しかし、マイクロドローンのFCなどは軽量化のため、ブラックボックスに当たる記憶領域であるメモリを搭載していないことがほとんどです。
今回テストで使用した機体のFCもブラックボックスを搭載していない製品でした。
こういう場合は、別のブラックボックスがあるFCを機体に搭載してジャイロデータを取得します。
カメラを搭載する機体のFCに、
ブラックボックスがある場合はこれを利用する。
ブラックボックスが無い場合は、ブラックボックスがある別のFCをカメラと一緒に載せる。
今回たまたま4年以上前の古いFCで、ブラックボックス用にマイクロSDスロットを搭載したFCがあったのでこれを利用しました。今回使用したFCはこちら。
FCに、FrSky XM+レシーバーが組み込まれているめずらしいFCです。ブラックボックス用にマイクロSDスロットが搭載されていますので、ログの容量を気にする必要はありません。
このFCを3Dプリンターで出力したケースに入れて機体に固定しました。リポバッテリーのバランス端子に接続すると自動でブラックボックスの記録が始まるように設定しました。
ブラックボックスの使用方法
FC搭載のブラックボックスをBetaflightで利用するには次のように設定します。
ログレートは、1kHzに設定し、デバッグ項目はNONEにします。
これでアーミングと同時に記録が開始され、ディスアームすると停止します。
機体のFCではなく、別のFCを利用する時は、ログの開始が出来ません。そのために電源ONで自動で記録開始するように設定します。
set blackbox_mode = ALWAYS
save
Betaflight Configurator のCLIタブから、上記のコマンドを入力して保存します。これでFCに電源を供給すると数秒後から記録が始まります。
ログの取り扱いについて
FC内蔵のブラックボックスは容量が少なく、8MBから32MBくらいです。8MBの場合3分ほどのフライト2パックで一杯になってしまいます。
そのため、1フライトごとにブラックボックスデータを退避させた方が安心です。
ブラックボックスデータを退避する
画像はスマホアプリのSpeedy Beeでブラックボックスタブを開いたところ。
初めに Activate Mass Storage Device Mode をタップしてFCのブラックボックスメモリを、USBメモリとしてアクセスできるよう有効にします。
有効にしたらファイルマネージャ等で、LOG00001.BFL などのファイルをコピーしてスマホ内の別の場所に保存します。
このときファイル名をフライトに関連付けおくと便利です。例:
LOG00001.BFL → 神社フライト1回目.BFL
ログを保存したら、Speedy Beeにもどり
Erase flashでブラックボックスを空にします。
もちろん、マイクロSDカードがブラックボックスになる場合はこの作業は必要ありません。
ただしフライトとログの回数(電源ON/OFF)を関連付けてメモなりしておかないとあとで混乱することがあります。(実証済み)
フライト時のコツ
フライトで取得したブラックボックスのログは、撮影した動画とタイミングを合わせなくてはいけません。その時の作業がしやすいように、フライト開始時に動画とジャイロの両方に分かりやすい記録をさせます。
機体のFCにブラックボックスがある場合は、ログにアーミングのシグナルが記録されます。なので動画の方にも同じタイミングで何かを記録させればいいのです。つまり、送信機のアームスイッチをパチリと入れた瞬間を画面に映るようにして同時に録画してしまいます。
機体とは別のFCを使用する時は、アームミングのシグナルはありませんので、別の手段が必要です。これには、録画を開始しFCへの電源も供給してONにした数秒後に、機体を静止状態から、横方向を傾けるように持ち上げてから、ストンと落とします。これにより画面は傾きます。同時にジャイロデータも大きく動きます。ストンと落とすことで急な変化になりますからさらに合わせやすくなります。
後ほど実際の映像で確認できます。
動画のサイズについて
ブレ補正をする動画はGoProで撮影した時と同じサイズである必要があります。そうでない場合は、あらかじめ撮影した動画をリサイズします。
使用できる動画のサイズ一覧
720 16:9 1280×720
1080 16:9 1920×1080
1440 4:3 1920×1440
2.7K 16:9 2704×1520
2.7K 4:3 2704×2028
4K 16:9 3840×2160
4K 4:3 4000×3000
動画の圧縮コーデックは、H.246
動画のコンテナは、MP4
なお、ReelSteady GOでブレ補正すると16:9の動画は16:7位に上下がカットされます。4:3の動画は補正後も16:9になります。
アナログのFPV映像を録画したサイズの小さい動画でも、上のサイズ一覧にあった物にリサイズすると ReelSteady GOでブレ補正できるのでその後に元の大きさに戻すという事も出来ます。
パソコンの環境を設定する
ここからはパソコンでの作業になります。
申し訳ありませんが今回の解説ではWindows環境での作業について説明していきます。他の環境では適宜該当する作業を行ってください。
Betaflight Blackbox Explorer のインストール
フライト時に取得したブラックボックスのジャイロデータと撮影した動画のタイミングを合わせるのにBetaflight Blackbox Explorerを使用します。
以下のサイトからBlackbox Explorerをダウンロードします。
Windowsなので、betaflight-blackbox-explorer-installer_3.5.0_win32.exe をクリックしてダウンロードします。
ダウンロード後、実行してインストールします。
Pythonのインストール
BetaflightのジャイロデータをGoProの記録方式に変換し、動画に埋め込むためのスクリプトは、Python(パイソン)というプログラム言語で作られています。そのためスクリプトが実行できるようにPythonをパソコンにインストールします。以下のサイトにアクセスします。
DownloadsをポイントするとDownload for Windows と表示されますので Python 3.9.1とをクリックしてダウンロードを開始します。
ダウンロード後、実行するとインストーラーが起動します。下図のようにAdd Python 3.9 to PATH にチェックを付けてください。上の「Install Now」をクリックしてインストールします。
インストールが完了したら、コマンドプロンプトを開きます。
プログラムとファイルの検索欄にcmdと入力してEnterキー。
コマンドプロンプトが開いたら、Python –version と入力して正しくインストールできたか確認します。インストール時にPATHの設定もされたのでPythonだけで起動できます。
注:versionの前はハイフンが2つです。以降のオプション指定も同じ。
つづいて必要なライブラリをインストールしていきます。
■ Pythonと同時にインストールされたpipというパッケージ管理ツールのバージョンが古いのでアップデートします。
以下のコマンドをコピペしてEnter(コピペが間違いないです。)
python -m pip install –upgrade pip
出力されたログの最後の行にSuccessfullyがあれば成功です。
C:¥Windows¥System32>python -m pip install --upgrade pip
Collecting pip
Downloading pip-21.0-py3-none-any.whl (1.5 MB)
|████████████████████████████████| 1.5 MB 6.4 MB/s
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 20.2.3
Uninstalling pip-20.2.3:
Successfully uninstalled pip-20.2.3
Successfully installed pip-21.0
■ numpy のインストール
最新版はバグがあるのでバージョン指定でインストールします。
以下のコマンドをコピペしてEnter
pip install numpy==1.19.3
C:¥Windows¥System32>pip install numpy==1.19.3
Collecting numpy==1.19.3
Downloading numpy-1.19.3-cp39-cp39-win_amd64.whl (13.3 MB)
|████████████████████████████████| 13.3 MB 1.7 MB/s
Installing collected packages: numpy
Successfully installed numpy-1.19.3
■ get-video-properties のインストール
以下のコマンドをコピペしてEnter
pip install -U get-video-properties
C:¥Windows¥System32>pip install -U get-video-properties
Collecting get-video-properties
Downloading get_video_properties-0.1.1-py3-none-any.whl (45.1 MB)
|████████████████████████████████| 45.1 MB 9.0 kB/s
Installing collected packages: get-video-properties
Successfully installed get-video-properties-0.1.1
以上でPython関係のインストールは終了です。
BlackboxToGPMF のダウンロード
次はブラックボックスのジャイロデータをGoProの形式に変換し、撮影した動画に埋め込むための専用のスクリプト、BlackboxToGPMF をダウンロードします。
以下のサイトにアクセスします。
緑色の Code をクリックします。
表示されたメニューの一番下 Download ZIP をクリックしてダウンロードします。
ダウンロードが完了したら、ZIPを展開します。展開先はReelSteady GOでアクセスできるようにパスに日本語が入っていない場所にします。
展開後のフォルダ内はこうなっています。
ジャイロデータと動画の一致点を見つける
いよいよ撮影した動画の処理を開始していきます。
ここでは撮影した動画と、ブラックボックスに記録されたジャイロデータの一致点を見つける作業をします。ジャイロデータが動画と一致していなければブレ補正は出来ませんので、一番重要な作業になります。
ログと動画の読み込み
Betaflight Blackbox Explorerを起動します。左上の Open log file/video をクリックして保存してあるブラックボックスファイル LOG00001.BFL 等を選択します。
ログが読み込まれました。引き続き動画も読み込みます。右上にあるOpen log file/videoをクリックして動画を選択します。
グラフの設定
必要なグラフを表示する用に設定します。右下のGraph setupをクリックします。
+Add graph をクリックします。プルダウンメニューからGyrosを選択します。
Fields欄のName Gyrosをクリックし、Gyro[roll]を選択します。
+Add fieldをクリックして追加し、同じようにしてGyro[pitch]とGyro[yaw]を設定します。
ふたたび+Add graph をクリックしてAccelemeters(加速度計)を選択します。Gyroと同じように各軸を選択していきます。Save Changes をクリックして設定を保存します。
このグラフの設定は初回のみです。
一致点を見つける
以下の図はジャイロデータと動画を読み込み、グラフの設定が終わったところです。
真ん中にある赤色の縦線が現在の再生ポイントです。
2種類のグラフが表示されています。上のGyroグラフで各軸の傾きが分かります。
Accelemeters(加速度計)のZ軸は地球の重力である1Gを示しています。
再生ポイントを移動するには、下部の短い赤線をドラッグする。画面内でマウスホイールを回す。矢印キーで移動する。などがあります。
さて、最重要ポイントです。動画とジャイロを一致させてください。
再生ポイントを移動させていき、どこかで動画とジャイロの、それぞれで、特徴的な瞬間を見つけます。先のフライト時のコツで説明したように機体を大きく傾けて落とすとジャイロも分かりやすくなります。
動画とジャイロで同じと思われる特徴点を見つけたら、ジャイロのデータをずらして動画の特徴点と合わせます。
特徴点を合わせるためにSyncをクリックします。
左右の矢印をクリックするごとに、動画に対してジャイロデータが移動します。かなり離れている時は大体の秒数を直接入力すると楽です。プラスの秒数を入力するとその秒数だけログ(グラフ)が右に移動します。
動画で見てみると分かりやすいと思います。再生してみてください。
上の動画はそれぞれの特徴点を一致させて再生した物です。機体を傾けてから手を離して落とした時の様子です。機体の右側を持ち上げたのでロール軸のジャイロが初めは下に振れています。
この特徴点は動画の始めの部分で行います。
Syncの数字を変更して動画とジャイロの一致点を合わせることが出来たら、そのSyncに設定した秒数をメモします。
次に動画の終わり再生ポイントを移動して、ここでも一致しているか確認します。もし一致していない時は先ほどと同じように一致させます。そしてここでもSyncの秒数をメモします。
つまり動画の始めと終わりで一致点が異なる時があるので両方を確認します。
これは、フレームが抜け落ちていたり、フレームレートが異なる(29.97fpsなど)場合に発生します。
ブラックボックスのデータをCSV形式でエクスポートする
ここまでの作業で動画とジャイロの一致点を見つけ秒数をメモしました。
次にブラックボックスのデータをCSV形式でエクスポートします。
Betaflight Blackbox Explorer の上部のメニューにある Export CSV をクリックして保存します。
この時ファイル名にSyncの秒数を加えておくと便利です。
Blackbox Explorer は閉じてかまいません。
BlackboxToGPMF でGoPro形式のデータに変換して動画にする
次はジャイロデータをGoProの形式に変換して、動画の指定した場所(先程見つけた一致点)に合わせてMP4コンテナにメタデータとして格納します。同時に動画がどのGoProカメラで、どのモードで撮影されたかのメタデータも加えます。この作業によってGoProで撮影した動画になるのです。
BlackboxToGPMF を展開したフォルダに移動します。gp.py をダブルクリックして実行します。
GUIウィンドウが開きます。
Load video file と Load blackbox file をクリックして動画と、exportしたCSVファイルを読み込みます。
Start offset に初めのSyncの秒数を入力します。End offsetには終わりのSyncの秒数を入力します。終了時にSyncのズレが無かった場合は初めのSyncの秒数を入れておきます。
Start time と End time には動画の必要な開始点と終了点を時刻形式の秒数で入力します。
Camera angleを入力します。これはブラックボックスのデータを記録したFCと撮影したカメラの角度です。つまりチルト角です。
Profaile 選択します。ここではRunCam Hyblid で 4K 16:9 30fpsで撮影したので、
Session5 Wide 16:9 3840×2160 を選択しました。
Profileの選択肢が少ないですがReelSteady GOで使用できると解析されている物だけです。したがってここにある中で似たようなProfileを選択します。
設定が終わったらProcess video をクリックして実行します。
GoProの動画と違うフレームレートの場合は、フレームレートをGoProに合わせた中間ファイルが作成されます。中間ファイルには動画と同じフォルダ内に、_corrected_fpsという文字が付加されたファイルが作成されます。
全ての処理が終わると、動画があったフォルダではなく、スクリプトがあるフォルダに_out文字列が付加された動画が作成されます。
これでGoPro形式の動画が作成されましたのでReelSteady GOで処理することが出来ます。
まとめ
単にGoProで撮影してReelSteady GOでブレ補正するよりかなり手間がかかります。特にジャイロと動画を一致点を見つけるには一工夫が必要です。
しかし、ReelSteady GOの滑らかなブレ補正は苦労してでもやる価値はあります。
既にGoProで使用できるので、GoProより高画質なカメラ、剥きプロでも載せれないようなMobula6 HDのような小型機で撮影した動画、FPVのアナログDVR動画など、やってみると面白いことはたくさんありそうです。超安価な中華4Kアクションカメラなども面白そうですね。
今回は一連の作業方法を解説しました。今後気が付いた点などは随時追記していきたいと思います。