この記事でわかること

テスト済みバージョン: 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つのフィルターを使用します:

  1. vidstabdetect — パス1: 動画のカメラ動きを分析し、モーションベクターファイル(デフォルト: transforms.trf)に書き出す
  2. 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
パラメータ範囲デフォルト説明
shakiness1〜105検出する動きの範囲
accuracy1〜1515検出精度(高いほど遅い)
resultパスtransforms.trfモーションファイルの出力先

パス2:smoothingcrop

# requires --enable-libvidstab
ffmpeg -i input.mp4 -vf "vidstabtransform=smoothing=30:crop=black" output.mp4
パラメータデフォルト説明
smoothing15時間的平滑化半径(フレーム数)。高いほど滑らかだが黒枠が広くなる
cropblack安定化の境界処理: black(黒で塗りつぶし)またはkeep(元の端を保持)
zoom0境界アーティファクトを隠すための追加ズーム率(%)
interpolbilinear補間方法: nolinearbilinearbicubic

ズームで黒枠を隠す

手ブレ補正はカメラの動きを補償するためにフレームをシフトし、端に黒枠が現れます。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が含まれていません。対処法:

  1. 外部ライブラリを含むPPAからインストール

    sudo add-apt-repository ppa:savoury1/ffmpeg4
    sudo apt update
    sudo apt install ffmpeg

    確認:ffmpeg -filters | grep vidstab

  2. --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

出力にvidstabdetectvidstabtransformが表示されれば、手ブレ補正が使用可能です。


制限事項


関連記事


テスト環境: 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