mcpField
F
ffmpeg-stabilization-360

ffmpeg-stabilization-360

github.com/josiahsiegelクリエイティブ・メディア5992 回インストール19 週間前に更新
リポジトリ

ffmpeg-stabilization-360 について

手ぶれ映像、360動画、レンズ歪みを扱う動画編集者向けのFFmpegリファレンスです。複数の手ぶれ補正方法、投影変換、リフレーミング、ズーム・パン効果、補正フィルターを例示付きで解説します。

主な機能

  1. 011パスと2パスの手ぶれ補正
  2. 02OpenCLによる補正オプション
  3. 03360投影の変換と回転
  4. 04360映像から平面視点へのリフレーミング
  5. 05Ken Burns風のズームとパン
  6. 06レンズとパースの補正

活用シーン

  1. 01手持ち撮影やドローン映像の安定化
  2. 02360動画の投影形式の変換
  3. 03VR映像から平面視点の映像を抽出
  4. 04アクションカメラのレンズ歪み補正

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/josiahsiegel/claude-plugin-marketplace --skill ffmpeg-stabilization-360

インストール後、Claude Code で/ffmpeg-stabilization-360を入力して読み込まれたか確認します。

詳細

重要なガイドライン

Windows のファイルパス要件

必須:Windows ではファイルパスに常にバックスラッシュを使用してください

Windows で Edit または Write ツールを使用する場合、ファイルパスにはスラッシュ(/)ではなく、必ずバックスラッシュ(\)を使用してください。


クイックリファレンス

タスクフィルターコマンドパターン
基本的な手ぶれ補正deshake-vf deshake
VidStab(2 パス)vidstab2 パスのワークフローを参照
OpenCL による手ぶれ補正deshake_opencl-vf deshake_opencl
360 度投影v360-vf v360=e:c3x2
ケン・バーンズ効果zoompan-vf zoompan=z='...'
レンズ補正lenscorrection-vf lenscorrection=k1=...

このスキルを使用する場面

モーション補正と VR のワークフローで使用します:

  • 手持ち撮影の揺れを補正する
  • アクションカメラ(GoPro、DJI)の映像を処理する
  • ドローン映像を滑らかにする
  • 360 度/VR 動画のフォーマットを変換する
  • ズーム/パン効果を作成する
  • レンズの歪みを補正する

FFmpeg による手ぶれ補正と 360 度動画(2025)

動画の手ぶれ補正、VR 処理、モーション効果に関する包括的なガイドです。

動画の手ぶれ補正

deshake - 基本的な手ぶれ補正

組み込みの 1 パス手ぶれ補正フィルターです。

# Basic stabilization
ffmpeg -i shaky.mp4 -vf "deshake" stable.mp4

# With custom parameters
ffmpeg -i shaky.mp4 -vf "deshake=x=-1:y=-1:w=-1:h=-1:rx=16:ry=16" stable.mp4

# Strong stabilization
ffmpeg -i shaky.mp4 -vf "deshake=rx=64:ry=64:edge=mirror" stable.mp4

パラメーター:

パラメーター説明デフォルト範囲
x、yモーション検索の開始位置-1(自動)0~幅/高さ
w、hモーション検索のサイズ-1(自動)0~幅/高さ
rx、ry最大移動量160~64
edgeエッジ処理mirrorblank、original、clamp、mirror
blocksizeモーション検索のブロックサイズ84~128
contrastコントラストのしきい値1251~255
search検索方法exhaustiveexhaustive、less

エッジモード:

  • blank - エッジを黒で塗りつぶします
  • original - 元のエッジピクセルを維持します
  • clamp - エッジの値にクランプします
  • mirror - エッジのピクセルを反転します(通常は最適です)
deshake_opencl - GPU アクセラレーションによる手ぶれ補正

OpenCL を使用して、より高速に手ぶれを補正します。

# OpenCL stabilization
ffmpeg -i shaky.mp4 \
  -vf "hwupload,deshake_opencl,hwdownload,format=yuv420p" \
  stable.mp4

# With custom parameters
ffmpeg -i shaky.mp4 \
  -vf "hwupload,deshake_opencl=tripod=0:smooth=9:adaptive_crop=1,hwdownload,format=yuv420p" \
  stable.mp4
VidStab - 高品質な 2 パス手ぶれ補正

VidStab は、2 パス方式により最高品質の手ぶれ補正を実現します。

パス 1:モーションを解析

# Analyze video and save transform data
ffmpeg -i shaky.mp4 \
  -vf "vidstabdetect=stepsize=6:shakiness=8:accuracy=9:result=transforms.trf" \
  -f null -

パス 2:変換を適用

# Apply stabilization with transforms
ffmpeg -i shaky.mp4 \
  -vf "vidstabtransform=input=transforms.trf:zoom=1:smoothing=30" \
  stable.mp4

vidstabdetect のパラメーター:

パラメーター説明デフォルト範囲
stepsizeモーション推定のステップサイズ61~32
shakiness揺れの度合い(値が大きいほど解析量が増加)51~10
accuracy検出精度151~15
result変換ファイルの出力先transforms.trfファイル名
show検出結果を視覚化00~2

vidstabtransform のパラメーター:

パラメーター説明デフォルト範囲
input変換ファイルtransforms.trfファイル名
smoothing平滑化するフレーム数(値が大きいほど滑らか)100~100
zoomズーム率0-100~100
optzoom最適なズームの計算10~2
zoomspeed1 フレームあたりの最大ズーム変更量0.250~5
cropクロップモードkeepkeep、black
relative変換の種類10~1
tripod三脚モード(固定位置)00~1

VidStab の完全なワークフロー:

#!/bin/bash
# Professional stabilization workflow

INPUT="$1"
OUTPUT="${1%.*}_stabilized.mp4"

echo "Pass 1: Analyzing motion..."
ffmpeg -i "$INPUT" \
  -vf "vidstabdetect=stepsize=6:shakiness=8:accuracy=15:result=transforms.trf" \
  -f null -

echo "Pass 2: Applying stabilization..."
ffmpeg -i "$INPUT" \
  -vf "vidstabtransform=input=transforms.trf:smoothing=30:zoom=2:optzoom=1" \
  -c:v libx264 -crf 18 -preset slow \
  -c:a copy \
  "$OUTPUT"

rm transforms.trf
echo "Stabilized: $OUTPUT"
手ぶれ補正の比較
方法品質速度GPU用途
deshake良好高速いいえ手早い補正
deshake_opencl良好非常に高速はいGPU を使った手早い補正
vidstab(2 パス)最高低速いいえプロフェッショナルな作業

360 度/VR 動画の処理

v360 - 360 度動画の投影変換

さまざまな 360 度動画の投影方式を相互に変換します。

# Equirectangular to Cubemap 3x2
ffmpeg -i equirect.mp4 -vf "v360=e:c3x2" cubemap.mp4

# Equirectangular to Cubemap 6x1
ffmpeg -i equirect.mp4 -vf "v360=e:c6x1" cubemap_6x1.mp4

# Cubemap to Equirectangular
ffmpeg -i cubemap.mp4 -vf "v360=c3x2:e" equirect.mp4

# Equirectangular to EAC (YouTube format)
ffmpeg -i equirect.mp4 -vf "v360=e:eac" youtube_360.mp4

# Dual fisheye to Equirectangular
ffmpeg -i dual_fisheye.mp4 -vf "v360=dfisheye:e:ih_fov=190:iv_fov=190" equirect.mp4

入力/出力の投影方式:

コード投影方式説明
e正距円筒図法標準的な 360 度形式(比率 2:1)
c3x23x2 キューブマップ横に 3 面、縦に 2 面
c6x16x1 キューブマップ6 面を横一列に配置
c1x61x6 キューブマップ6 面を縦一列に配置
eac等角キューブマップYouTube 360 形式
dfisheyeデュアル魚眼2 つの円形の魚眼画像
sgステレオグラフィック歪みの少ない投影
flatフラット/直線投影通常の遠近表示
barrelバレルバレル分割
fbFacebookFacebook 360 形式

パラメーター:

パラメーター説明例
id_fov入力の対角視野角id_fov=195
ih_fov, iv_fov入力の水平/垂直視野角ih_fov=190:iv_fov=190
yaw, pitch, roll回転角度yaw=90:pitch=0
w, h出力サイズw=4096:h=2048
interp補間方式nearest、linear、cubic、lanczos
360 度動画の回転とリフレーミング
# Rotate 360 video 90 degrees
ffmpeg -i input_360.mp4 -vf "v360=e:e:yaw=90" rotated.mp4

# Tilt view up
ffmpeg -i input_360.mp4 -vf "v360=e:e:pitch=-30" tilted.mp4

# Extract flat view from 360
ffmpeg -i 360_video.mp4 \
  -vf "v360=e:flat:h_fov=120:v_fov=90:yaw=45:pitch=-10:w=1920:h=1080" \
  flat_extract.mp4
ステレオスコピック 360 度処理
# Split top-bottom stereo to left eye only
ffmpeg -i stereo_tb.mp4 -vf "v360=e:e:in_stereo=tb:out_stereo=2d" left_eye.mp4

# Convert side-by-side to top-bottom
ffmpeg -i stereo_sbs.mp4 -vf "v360=e:e:in_stereo=sbs:out_stereo=tb" stereo_tb.mp4

ケン・バーンズ効果とズーム効果

zoompan - パンとズームのアニメーション

静止画像や動画にケン・バーンズ風の効果を適用します。

# Basic zoom in on center
ffmpeg -loop 1 -i image.jpg -t 5 \
  -vf "zoompan=z='min(zoom+0.001,1.5)':d=125" \
  -c:v libx264 zoom_in.mp4

# Zoom in from top-left to center
ffmpeg -loop 1 -i image.jpg -t 5 \
  -vf "zoompan=z='min(zoom+0.001,1.5)':x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':d=125:s=1920x1080" \
  ken_burns.mp4

# Pan across image
ffmpeg -loop 1 -i image.jpg -t 10 \
  -vf "zoompan=z=1.3:x='if(gte(x,iw-iw/zoom),0,x+1)':y='ih/2-(ih/zoom/2)':d=1:s=1920x1080" \
  pan.mp4

# Zoom out
ffmpeg -loop 1 -i image.jpg -t 5 \
  -vf "zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.002))':d=125:s=1920x1080" \
  zoom_out.mp4

パラメーター:

パラメーター説明例
zズーム倍率の式z='min(zoom+0.001,1.5)'
x, yパン位置の式x='iw/2'
d画像ごとの長さ(フレーム数)d=125
s出力サイズs=1920x1080
fps出力フレームレートfps=30

便利な式:

  • zoom - 現在のズーム値
  • pzoom - 前回のズーム値
  • iw, ih - 入力の幅/高さ
  • on - 出力フレーム番号
アニメーション付きスライドショーの例
# Create slideshow with Ken Burns
ffmpeg -loop 1 -t 5 -i img1.jpg \
       -loop 1 -t 5 -i img2.jpg \
       -loop 1 -t 5 -i img3.jpg \
  -filter_complex "\
    [0:v]zoompan=z='min(zoom+0.001,1.3)':x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':d=150:s=1920x1080:fps=30[v0];\
    [1:v]zoompan=z=1.3:x='if(gte(x,iw-iw/zoom),0,x+2)':y='ih/2-(ih/zoom/2)':d=150:s=1920x1080:fps=30[v1];\
    [2:v]zoompan=z='1.3-0.002*on':d=150:s=1920x1080:fps=30[v2];\
    [v0][v1]xfade=transition=fade:duration=1:offset=4[x1];\
    [x1][v2]xfade=transition=fade:duration=1:offset=8[out]" \
  -map "[out]" slideshow.mp4

レンズ補正

lenscorrection - 樽型/糸巻き型歪みの補正

レンズの歪みを数理的に補正します。

# Correct barrel distortion
ffmpeg -i distorted.mp4 -vf "lenscorrection=k1=-0.2:k2=-0.05" corrected.mp4

# Correct pincushion distortion
ffmpeg -i distorted.mp4 -vf "lenscorrection=k1=0.2:k2=0.05" corrected.mp4

# With center offset
ffmpeg -i distorted.mp4 -vf "lenscorrection=cx=0.5:cy=0.5:k1=-0.2:k2=-0.05" corrected.mp4

パラメーター:

パラメーター説明デフォルト範囲
cx, cy中心位置0.50-1
k1主係数0-1 から 1
k2副係数0-1 から 1
i補間方式bilinearnearest、bilinear

係数を見つけるためのヒント:

  • 樽型歪み(魚眼):負の k1(-0.1 から -0.5)
  • 糸巻き型歪み:正の k1(0.1 から 0.5)
  • k2=0 から始め、まず k1 を調整します
lensfun - データベースを使用したレンズ補正

lensfun データベースを使用して、レンズを自動補正します。

# Auto-detect lens from metadata
ffmpeg -i photo.jpg -vf "lensfun=make=Canon:model=EOS 5D Mark II:lens_model=Canon EF 24-70mm" corrected.jpg

# With specific parameters
ffmpeg -i video.mp4 -vf "lensfun=make=GoPro:model=HERO10:mode=geometry" corrected.mp4

必要条件:lensfun ライブラリとデータベースがインストールされていること

perspective - 遠近補正

台形歪み/遠近歪みを補正します。

# Correct perspective with four corner points
# Map corners: (x0,y0)-(x1,y1)-(x2,y2)-(x3,y3) to rectangle
ffmpeg -i skewed.mp4 \
  -vf "perspective=x0=100:y0=50:x1=1820:y1=80:x2=0:y2=1030:x3=1920:y3=1000:interpolation=linear" \
  corrected.mp4

# Interactive: find coordinates with test overlay first
ffmpeg -i skewed.mp4 -vf "drawgrid=w=100:h=100:c=red" grid_overlay.mp4

一般的なワークフロー

アクションカメラの映像処理
# GoPro footage: stabilize + lens correct + encode
ffmpeg -i GOPR0001.MP4 \
  -vf "lenscorrection=k1=-0.2:k2=-0.05,vidstabdetect=shakiness=8:result=gopro.trf" \
  -f null -

ffmpeg -i GOPR0001.MP4 \
  -vf "lenscorrection=k1=-0.2:k2=-0.05,vidstabtransform=input=gopro.trf:smoothing=20:zoom=5" \
  -c:v libx264 -crf 18 \
  gopro_processed.mp4
ドローン映像の処理
# DJI footage: stabilize and enhance
ffmpeg -i DJI_0001.MP4 \
  -vf "vidstabdetect=shakiness=5:stepsize=6:result=drone.trf" -f null -

ffmpeg -i DJI_0001.MP4 \
  -vf "vidstabtransform=input=drone.trf:smoothing=40:zoom=2,eq=contrast=1.1:saturation=1.2" \
  -c:v libx264 -crf 18 -preset slow \
  drone_processed.mp4
360 度カメラ映像からフラット動画への変換
# Extract interesting view from 360 footage
ffmpeg -i insta360.mp4 \
  -vf "v360=e:flat:h_fov=110:v_fov=70:yaw=45:pitch=-15:w=1920:h=1080,deshake" \
  flat_view.mp4

ベストプラクティス

  1. 高品質に仕上げるなら VidStab - 2 パス処理は遅くなりますが、deshake より大幅に優れた結果が得られます
  2. ズーム用の余裕を確保する - 手ぶれ補正では、クロップするための余白が必要です
  3. フレームレートを一致させる - 処理の前後で fps が一貫していることを確認します
  4. 利用可能な場合は GPU を使用する - 高速化には deshake_opencl を使用します
  5. 係数をテストする - レンズ補正には試行錯誤が必要です
  6. 360 度メタデータを保持する - VR 動画には -map_metadata 0 を使用します

このガイドでは、2025 年の手ぶれ補正と 360 度処理について説明しています。ハードウェアアクセラレーションについては、ffmpeg-hardware-acceleration を参照してください。フィルターとエフェクトについては、ffmpeg-filter-complex-patterns を参照してください。

コメント