この記事でわかること
vidstabdetectとvidstabtransformフィルターの役割- 2パス手ブレ補正パイプライン
- 主要パラメータ:
shakiness(揺れ検出)・smoothing(平滑化)・crop(黒枠)・zoom - FFmpegがこれらのフィルターを使えるように
libvidstabをインストールする方法 - 制限事項と代替手段
テスト済みバージョン: FFmpeg 6.1(ubuntu-latest / CI検証済み)
対象 OS: Linux / macOS / Windows
前提条件:
vidstabdetectおよびvidstabtransformフィルターは、FFmpegが--enable-libvidstab付きでコンパイルされている必要があります。Ubuntu 24.04の標準パッケージ(apt install ffmpeg)にはlibvidstabが含まれていません。インストールセクションを参照してください。
動画手ブレ補正の仕組み
FFmpegの動画手ブレ補正は外部ライブラリlibvidstabに依存し、2つのフィルターを使用します:
vidstabdetect— パス1: 動画のカメラ動きを分析し、モーションベクターファイル(デフォルト:transforms.trf)に書き出すvidstabtransform— パス2: モーションデータを読み込み、揺れを打ち消す変換(平行移動・回転)を適用する
2パス方式が必要な理由:フィルターが滑らかなカメラパスを計算するために、動き全体の軌跡を事前に把握する必要があるからです。
基本的な2パス手ブレ補正
注意: このセクションのFFmpegコマンドはすべて
--enable-libvidstabが必要です。libvidstabが利用可能なシステムで実行してください。
パス1 — モーション検出:
# requires --enable-libvidstab
ffmpeg -i input.mp4 -vf vidstabdetect -f null /dev/null
カレントディレクトリにtransforms.trfが書き出されます。
パス2 — 手ブレ補正:
# requires --enable-libvidstab
ffmpeg -i input.mp4 -vf vidstabtransform output.mp4
transforms.trfを読み込み、安定化された動画を生成します。
補正強度の調整
パス1:shakiness
shakinessパラメータ(1〜10、デフォルト: 5)は、検出器が動きを探す積極さを制御します。非常に揺れの大きい映像では値を上げます:
# requires --enable-libvidstab
ffmpeg -i input.mp4 -vf "vidstabdetect=shakiness=8:accuracy=15" -f null /dev/null
| パラメータ | 範囲 | デフォルト | 説明 |
|---|---|---|---|
shakiness | 1〜10 | 5 | 検出する動きの範囲 |
accuracy | 1〜15 | 15 | 検出精度(高いほど遅い) |
result | パス | transforms.trf | モーションファイルの出力先 |
パス2:smoothingとcrop
# requires --enable-libvidstab
ffmpeg -i input.mp4 -vf "vidstabtransform=smoothing=30:crop=black" output.mp4
| パラメータ | デフォルト | 説明 |
|---|---|---|
smoothing | 15 | 時間的平滑化半径(フレーム数)。高いほど滑らかだが黒枠が広くなる |
crop | black | 安定化の境界処理: black(黒で塗りつぶし)またはkeep(元の端を保持) |
zoom | 0 | 境界アーティファクトを隠すための追加ズーム率(%) |
interpol | bilinear | 補間方法: no・linear・bilinear・bicubic |
ズームで黒枠を隠す
手ブレ補正はカメラの動きを補償するためにフレームをシフトし、端に黒枠が現れます。zoomでスケールアップして黒枠を隠します:
# requires --enable-libvidstab
ffmpeg -i input.mp4 -vf "vidstabtransform=smoothing=20:zoom=5:crop=black" output.mp4
zoom=5で出力を5%拡大し、黒枠を覆います。トレードオフとして画像領域がわずかに縮小します(クロップイン効果)。
カスタムパスを使った完全なパイプライン
スクリプトや複数ファイルを処理する場合、モーションファイルのパスを明示的に指定します:
# requires --enable-libvidstab
ffmpeg -i input.mp4 -vf "vidstabdetect=result=/tmp/transforms.trf" -f null /dev/null
# requires --enable-libvidstab
ffmpeg -i input.mp4 -vf "vidstabtransform=input=/tmp/transforms.trf:smoothing=20" output.mp4
インストール
Ubuntu / Debian
Ubuntu 24.04のリポジトリのffmpegパッケージにはlibvidstabが含まれていません。対処法:
-
外部ライブラリを含むPPAからインストール:
sudo add-apt-repository ppa:savoury1/ffmpeg4 sudo apt update sudo apt install ffmpeg確認:
ffmpeg -filters | grep vidstab -
--enable-libvidstab付きでFFmpegをソースからビルド(libvidstab-devが必要):sudo apt install libvidstab-devその後FFmpegを
--enable-libvidstabで設定してコンパイル。
macOS(Homebrew)
brew install ffmpeg
HomebrewのFFmpegフォーミュラにはlibvidstabが含まれています。ffmpeg -filters | grep vidstabで確認してください。
Windows
gyan.dev/ffmpeg/buildsから”full”ビルドをダウンロードしてください — libvidstabが含まれています。
ビルドの確認方法
ffmpeg -filters 2>/dev/null | grep vidstab
出力にvidstabdetectとvidstabtransformが表示されれば、手ブレ補正が使用可能です。
制限事項
- libvidstabは中程度の手ブレに最適です。 極端な手ブレ(走りながら撮影した映像など)では、見た目のゆがみや補正不足が生じることがあります。
- 2パスは必須です。 シングルパスの手ブレ補正はありません。
- ズームで画像領域が縮小します。 補正量が多いほど黒枠を隠すために必要なズームが大きくなり、フレームがクロップされます。
関連記事
テスト環境: ffmpeg 6.1.1 / Ubuntu 24.04(GitHub Actions — 標準パッケージにlibvidstabは含まれていません)
一次ソース: ffmpeg.org/ffmpeg-filters.html#vidstabdetect / ffmpeg.org/ffmpeg-filters.html#vidstabtransform / trac.ffmpeg.org/wiki/Stabilize_video