【ffmpeg】強力な手ぶれ補正フィルタ vid.stab の使い方

公式サイト
vid.stab - Transcode video stabilization plugin
georgmartius/vid.stab: Video stabilization library

vid.stab(Video Stabilization)は linux や ffmpeg のフィルタとして使える手ぶれ補正機能。1パス目に解析して、その解析ログから2パス目で手ぶれを補正する。手振ぶれはもちろんのこと、定点カメラでバイクや自転車に備え付けて撮影した時の画面の揺れにも大きな効果がある。解析と実際に補正するのに2回エンコードするので生放送用途では使えない。

Windows 用の ffmpeg は以下から保存する
FFmpegダウンロード お気に入りの動画を携帯で見よう
Zeranoe FFmpeg - Builds

効果の具合は公式のサンプル動画を参照

ffmpeg での使い方


1パス目は解析するためのものなので動画を出力する必要はない。
このコマンドを実行し終わると「transforms.trf」という解析ログ(テキスト)が出力される。

ffmpeg -i infile -vf vidstabdetect -an -f null -

2パス目で解析ログから補正する。

ffmpeg -i infile -vf vidstabtransform -vcodec libx264 -acodec copy outfile.mp4

これで既定値を使って補正することができる。一つづつ再生しても違いがよくわからないかもしれないので動画編集ソフトで横に並べると違いがわかる。

フィルタを使って補正する前と後の映像を上下、または左右に並べて再生することも出来る。

上が補正する前
ffplay -i infile -vf split[a],vidstabtransform,[a]vstack
左が補正する前
ffplay -i infile -vf split[a],vidstabtransform,[a]hstack

フィルタの設定方法


1パス目の解析に使う vidstabdetect の使い方。既定値の例

-vf vidstabdetect=result=transforms.trf:shakiness=5:accuracy=9:stepsize=6
:mincontrast=0.25:tripod=0:show=0


FFmpeg documentation : : vidstabdetect

  • result
    出力される解析ログのファイル名とパスの指定:既定値は transforms.trf
  • shakiness
    どれだけ映像が振れているかの設定:既定値は 5
    値が大きいほど大きく振れている:1 から 10 まで
  • accuracy
    どれだけ振れを検出するかの精度:既定値は 15
    値が大きいほど精度が高い:1 から 15 まで
  • stepsize
    何ピクセル単位で調べるか:既定値は 6
    値が小さいほど精度が高い:1 から 32 まで
  • mincontrast
    最小コントラスト比:既定値は 0.25
    大きな値は振れを検出しなくなる:0 から 1 までの小数点を含む値
  • show
    ログファイルの出力タイプ指定:既定値は 0
    普通用途なら変更しない:0 から 2 までの整数値
  • tripod
    tripod(三脚)モード:既定値は 0
    持ち歩く時ではなく三脚を使った場合の振れを補正する:1 で有効化


2パス目の解析結果から実際の補正を行う vidstabtransform の使い方。既定値の例

-vf vidstabtransform=input=transforms.trf:smoothing=10:maxshift=-1
:maxangle=-1:crop=keep:invert=0:relative=1:zoom=0:interpol=bilinear:tripod:0


このほかに同時に unsharp フィルタの適用も推奨している。

-vf vidstabtransform=input=transforms.trf:smoothing=10:maxshift=-1
:maxangle=-1:crop=keep:invert=0:relative=1:zoom=0:interpol=bilinear :tripod:0,unsharp



  • input
    読み込む解析ログのファイル名とパスの指定:既定値は transforms.trf
  • smoothing
    振れを調べる先読みフレーム数:既定値は 15
    現在のフレームと、指定した値の前後フレームを参照する:0 から 1000 までの整数値
    大きな値ほどなめらかになるが、制限がある(詳細はよくわからない)
  • optalgo
    アルゴリズムの指定:既定値は opt
    • 0, opt
      グローバル最適化
    • 1, gauss
      カメラの動きをローパス(ハイカット)でフィルタしてガウス処理を行う
    • 2, avg
      カメラの動きを平均化する
  • maxshift
    最大何ピクセルのフレームを対象とするか:既定値は -1:-1 から 500 までの整数値
    変更しなくても良い
  • maxangle
    ラジアン単位の最大角度:既定値は -1(制限なし):-1 から 3.14まで
    変更しなくても良い:-1 から 500 までの整数値
  • crop
    補正により映像のない境界をどうするか
    • 0, keep(既定値)
      周りの情報で埋め合わせる
    • 1, black
      黒色で表示する
  • invert
    揺れを反転するかどうか:既定値は 0
    変更しなくても良い
  • relative
    揺れの参照フレームを相対参照するか、絶対参照するか:既定値は 1(相対参照)
    0 は絶対参照
  • zoom
    何パーセント拡大するか:既定値は 0
    揺れが大きい場合に補正により情報がない映像が増え、それを回避するために拡大することで補正映像を表示させないようにできる。0未満で縮小、0より大きいと拡大。0は拡大せずそのままのサイズ:-100 から 100 まで
  • optzoom
    上の zoom を使うと最適な拡大範囲に調整する:既定値は 1
    • 0
      使わない
    • 1
      固定ズーム。激しく揺れていると枠が見えることもある
    • 2
      可変ズーム。枠が見えなくなる。この下の zoomspeed を参照
  • zoomspeed
    最大何パーセント、ズーム(拡大)するか:既定値は 0.25
    大きい値ほどより拡大される:0 から 5 まで
  • interpol
    補完処理のアルゴリズム
    • 0, no
      処理を行わない
    • 1, linear
      横方向の linear 処理を行う
    • 2, bilinear(既定値)
      縦と横の bilinear 処理を行う
    • 3, bicubic
      縦と横の cubic 処理(bicubic)を行う(低速度)
  • tripod
    tripod(三脚)モード:既定値は 0
    vidstabdetect で tripod を使ったときに併用する
    1 にすると relative=0:smoothing=0 になる
  • debug
    デバグモード:既定値は 0
    1で有効化


バッチファイルの仕様


バッチファイル(ここに動画をD&D.bat)に動画を D&D することで自動でエンコードしてくれる。
適宜エンコードする時間とエンコーダ、エンコード設定を変える。
読み込み開始時間の指定は入力ファイル(-i)の前に -ss 秒
読み込み開始時間からの動画時間の指定は入力ファイル(-i)の後ろに -t 秒
例:ffmpeg -ss 10 -i %1 -t 10

@ECHO OFF

ffmpeg -i %1 -vf vidstabdetect -an -f null - && ffmpeg -i %1 -vf vidstabtransform -vcodec libx264 -acodec copy %~n1_encoded.mp4
:EXIT



libx264 の設定:libx264のオプション
可逆圧縮の Utvideo も使える、この場合は出力コンテナを .mkv に変える:-vcodec utvideo

libx264 の2パスエンコードもできる。

ffmpeg -i infile -vf vidstabdetect -vcodec libx264 -b:v 1800k -pass 1 -an -f null -
ffmpeg -i infile -vf vidstabtransform -vcodec libx264 -b:v 1800k -pass 2 -acodec copy 2pass.mp4


ffmpeg へのインストール方法は Zeranoe FFmpeg • View topic - vid.stab, vid.stabのコンパイル&インストール お気に入りの動画を携帯で見よう を参照。
関連記事

コメント

-

SJ4000の動画に使ってみました。コマンドラインで万人向けではないですが、フリーでできる手ぶれ補正では文句無く最強の方法だと思います。余計な中間フォーマットへの変換なしで最終エンコードまでいけるのが素晴らしい。xvidへ出力したかったのでとても助かりました。ありがとうございます。
非公開コメント

プロフィール

ロベルト

お問い合わせはこちらまで
robelt2525[at]gmail.com

中の人 @nico_lab

広告リンク
Amazon
楽天市場

ブログ更新用 @blo_nico_lab

詳しいプロフィールはこちら

当ブログは、Amazonアソシエイトに参加しています。