ffmpeg-stabilization-360 について
手ぶれ映像、360動画、レンズ歪みを扱う動画編集者向けのFFmpegリファレンスです。複数の手ぶれ補正方法、投影変換、リフレーミング、ズーム・パン効果、補正フィルターを例示付きで解説します。
主な機能
- 011パスと2パスの手ぶれ補正
- 02OpenCLによる補正オプション
- 03360投影の変換と回転
- 04360映像から平面視点へのリフレーミング
- 05Ken Burns風のズームとパン
- 06レンズとパースの補正
活用シーン
- 01手持ち撮影やドローン映像の安定化
- 02360動画の投影形式の変換
- 03VR映像から平面視点の映像を抽出
- 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 パス) | vidstab | 2 パスのワークフローを参照 |
| 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 | 最大移動量 | 16 | 0~64 |
edge | エッジ処理 | mirror | blank、original、clamp、mirror |
blocksize | モーション検索のブロックサイズ | 8 | 4~128 |
contrast | コントラストのしきい値 | 125 | 1~255 |
search | 検索方法 | exhaustive | exhaustive、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 | モーション推定のステップサイズ | 6 | 1~32 |
shakiness | 揺れの度合い(値が大きいほど解析量が増加) | 5 | 1~10 |
accuracy | 検出精度 | 15 | 1~15 |
result | 変換ファイルの出力先 | transforms.trf | ファイル名 |
show | 検出結果を視覚化 | 0 | 0~2 |
vidstabtransform のパラメーター:
| パラメーター | 説明 | デフォルト | 範囲 |
|---|---|---|---|
input | 変換ファイル | transforms.trf | ファイル名 |
smoothing | 平滑化するフレーム数(値が大きいほど滑らか) | 10 | 0~100 |
zoom | ズーム率 | 0 | -100~100 |
optzoom | 最適なズームの計算 | 1 | 0~2 |
zoomspeed | 1 フレームあたりの最大ズーム変更量 | 0.25 | 0~5 |
crop | クロップモード | keep | keep、black |
relative | 変換の種類 | 1 | 0~1 |
tripod | 三脚モード(固定位置) | 0 | 0~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) |
c3x2 | 3x2 キューブマップ | 横に 3 面、縦に 2 面 |
c6x1 | 6x1 キューブマップ | 6 面を横一列に配置 |
c1x6 | 1x6 キューブマップ | 6 面を縦一列に配置 |
eac | 等角キューブマップ | YouTube 360 形式 |
dfisheye | デュアル魚眼 | 2 つの円形の魚眼画像 |
sg | ステレオグラフィック | 歪みの少ない投影 |
flat | フラット/直線投影 | 通常の遠近表示 |
barrel | バレル | バレル分割 |
fb | Facebook 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.5 | 0-1 |
k1 | 主係数 | 0 | -1 から 1 |
k2 | 副係数 | 0 | -1 から 1 |
i | 補間方式 | bilinear | nearest、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
ベストプラクティス
- 高品質に仕上げるなら VidStab - 2 パス処理は遅くなりますが、deshake より大幅に優れた結果が得られます
- ズーム用の余裕を確保する - 手ぶれ補正では、クロップするための余白が必要です
- フレームレートを一致させる - 処理の前後で fps が一貫していることを確認します
- 利用可能な場合は GPU を使用する - 高速化には deshake_opencl を使用します
- 係数をテストする - レンズ補正には試行錯誤が必要です
- 360 度メタデータを保持する - VR 動画には
-map_metadata 0を使用します
このガイドでは、2025 年の手ぶれ補正と 360 度処理について説明しています。ハードウェアアクセラレーションについては、ffmpeg-hardware-acceleration を参照してください。フィルターとエフェクトについては、ffmpeg-filter-complex-patterns を参照してください。