公式サイト
vid.stab - Transcode video stabilization plugingeorgmartius/vid.stab: Video stabilization libraryvid.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のコンパイル&インストール お気に入りの動画を携帯で見よう を参照。
- 関連記事
-
コメント
-
2015/09/04 URL 編集