mcpField
F
ffmpeg-transitions-effects

ffmpeg-transitions-effects

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

ffmpeg-transitions-effects について

FFmpegを使った動画編集ワークフロー向けのトランジションとエフェクトのリファレンスです。組み込みトランジション、複数クリップのタイミング調整、カスタム効果を扱います。

主な機能

  1. 01xfadeによるクリップ間トランジション
  2. 02映像のフェードと音声クロスフェード
  3. 03複数クリップのオフセット計算
  4. 04式とマスクによるカスタム効果

活用シーン

  1. 01動画クリップ間にトランジションを追加
  2. 02画像からトランジション付きスライドショーを作成
  3. 03映像と音声のフェードを同期

インストール

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

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

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

詳細

重要なガイドライン

Windows のファイルパス要件

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

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

ドキュメント作成のガイドライン

ユーザーから明示的に依頼されない限り、新しいドキュメントファイルを作成しないでください。


クイックリファレンス

トランジションコマンド
クロスフェード[0:v][1:v]xfade=transition=fade:duration=1:offset=4[v]
ディゾルブxfade=transition=dissolve:duration=1:offset=4
左ワイプxfade=transition=wipeleft:duration=1:offset=4
円形オープンxfade=transition=circleopen:duration=1.5:offset=4
左スライドxfade=transition=slideleft:duration=1:offset=4
フェードイン/アウト-vf "fade=t=in:d=1,fade=t=out:st=9:d=1"
オーディオのクロスフェード[0:a][1:a]acrossfade=d=1[a]
オフセットの計算式T のトランジションを使用する N 個のクリップ
offset1clip1_duration - T
offset22*duration - 2*T
offsetNN*duration - N*T

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

動画トランジションのワークフローで使用します:

  • クリップをプロ品質のトランジションでつなぐ
  • 画像からスライドショーを作成する
  • フェードイン/アウト効果を追加する
  • 複数クリップのシーケンスを編集する
  • カスタムトランジション式を作成する

FFmpeg のトランジションとエフェクト(2025)

FFmpeg を使用した動画トランジション、クロスフェード、クリエイティブなエフェクトの完全ガイドです。

トランジションの概要

使用可能な方法
方法用途複雑さ
xfade フィルター2 つのクリップ間中
fade フィルター単一クリップのフェードイン/アウト簡単
blend フィルターフレームのブレンド簡単
overlay + alphaカスタムトランジション高度
xfade のトランジションタイプ

FFmpeg の xfade フィルターは、40 種類以上の組み込みトランジションに対応しています:

カテゴリトランジション
フェードfade, fadeblack, fadewhite, fadegrays
ワイプwipeleft, wiperight, wipeup, wipedown, wipetl, wipetr, wipebl, wipebr
スライドslideleft, slideright, slideup, slidedown
リビールrevealright, revealleft, revealup, revealdown
プッシュhorzopen, horzclose, vertopen, vertclose
円形circleopen, circleclose, circlecrop
四角形rectcrop, hblur, radial
対角線diagtl, diagtr, diagbl, diagbr
ピクセルエフェクトdissolve, pixelize, hlslice, hrslice, vuslice, vdslice
その他zoomin, squeezeh, squeezev, hlwind, hrwind, vuwind, vdwind, coverleft, coverright, coverup, coverdown

基本的なフェード効果

フェードイン/アウト(単一クリップ)
# Fade in from black (first 2 seconds)
ffmpeg -i video.mp4 \
  -vf "fade=t=in:st=0:d=2" \
  -c:a copy \
  fade_in.mp4

# Fade out to black (last 2 seconds)
ffmpeg -i video.mp4 \
  -vf "fade=t=out:st=8:d=2" \
  -c:a copy \
  fade_out.mp4

# Both fade in and fade out
ffmpeg -i video.mp4 \
  -vf "fade=t=in:st=0:d=1,fade=t=out:st=9:d=1" \
  -c:a copy \
  fade_both.mp4

# Fade to white instead of black
ffmpeg -i video.mp4 \
  -vf "fade=t=out:st=8:d=2:color=white" \
  -c:a copy \
  fade_white.mp4
音声付きフェード
# Video and audio fade in/out together
ffmpeg -i video.mp4 \
  -vf "fade=t=in:st=0:d=2,fade=t=out:st=8:d=2" \
  -af "afade=t=in:st=0:d=2,afade=t=out:st=8:d=2" \
  fade_complete.mp4

# Audio crossfade between two files
ffmpeg -i audio1.mp3 -i audio2.mp3 \
  -filter_complex "[0][1]acrossfade=d=3:c1=tri:c2=tri" \
  crossfade.mp3

xfade トランジション(クリップ間)

xfade の基本的な使い方
# Simple crossfade between two clips
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0:v][1:v]xfade=transition=fade:duration=1:offset=4[v];\
                   [0:a][1:a]acrossfade=d=1[a]" \
  -map "[v]" -map "[a]" \
  output.mp4

パラメーター:

  • transition:トランジション効果の種類
  • duration:トランジションの長さ(秒)
  • offset:トランジションを開始するタイミング(最初のクリップからの時間)
よく使われるトランジション効果
# Dissolve (pixel-based crossfade)
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0:v][1:v]xfade=transition=dissolve:duration=1:offset=4[v]" \
  -map "[v]" dissolve.mp4

# Wipe left to right
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0:v][1:v]xfade=transition=wipeleft:duration=1:offset=4[v]" \
  -map "[v]" wipe_left.mp4

# Wipe right to left
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0:v][1:v]xfade=transition=wiperight:duration=1:offset=4[v]" \
  -map "[v]" wipe_right.mp4

# Slide left
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0:v][1:v]xfade=transition=slideleft:duration=1:offset=4[v]" \
  -map "[v]" slide_left.mp4

# Circle open (iris)
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0:v][1:v]xfade=transition=circleopen:duration=1.5:offset=4[v]" \
  -map "[v]" circle_open.mp4

# Circle close
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0:v][1:v]xfade=transition=circleclose:duration=1.5:offset=4[v]" \
  -map "[v]" circle_close.mp4

# Radial wipe
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0:v][1:v]xfade=transition=radial:duration=1.5:offset=4[v]" \
  -map "[v]" radial.mp4

# Zoom in
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0:v][1:v]xfade=transition=zoomin:duration=1:offset=4[v]" \
  -map "[v]" zoom_in.mp4

# Pixelize transition
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0:v][1:v]xfade=transition=pixelize:duration=1:offset=4[v]" \
  -map "[v]" pixelize.mp4

# Diagonal wipe (top-left to bottom-right)
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0:v][1:v]xfade=transition=diagtl:duration=1:offset=4[v]" \
  -map "[v]" diag_tl.mp4

# Horizontal blur
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0:v][1:v]xfade=transition=hblur:duration=1:offset=4[v]" \
  -map "[v]" hblur.mp4
xfade の全トランジションタイプ
# Fades
fade        # Standard crossfade
fadeblack   # Fade through black
fadewhite   # Fade through white
fadegrays   # Fade through gray

# Wipes
wipeleft    # Left to right wipe
wiperight   # Right to left wipe
wipeup      # Bottom to top wipe
wipedown    # Top to bottom wipe
wipetl      # Wipe from top-left corner
wipetr      # Wipe from top-right corner
wipebl      # Wipe from bottom-left corner
wipebr      # Wipe from bottom-right corner

# Slides
slideleft   # Slide new clip from right
slideright  # Slide new clip from left
slideup     # Slide new clip from bottom
slidedown   # Slide new clip from top

# Reveals
revealleft  # Reveal from right edge
revealright # Reveal from left edge
revealup    # Reveal from bottom edge
revealdown  # Reveal from top edge

# Open/Close
horzopen    # Horizontal opening (curtain)
horzclose   # Horizontal closing
vertopen    # Vertical opening
vertclose   # Vertical closing
circleopen  # Circle iris open
circleclose # Circle iris close

# Shapes
circlecrop  # Circle crop transition
rectcrop    # Rectangle crop transition
radial      # Radial/clock wipe

# Diagonals
diagtl      # Diagonal from top-left
diagtr      # Diagonal from top-right
diagbl      # Diagonal from bottom-left
diagbr      # Diagonal from bottom-right

# Pixel Effects
dissolve    # Random pixel dissolve
pixelize    # Pixelization effect
hlslice     # Horizontal left slice
hrslice     # Horizontal right slice
vuslice     # Vertical up slice
vdslice     # Vertical down slice

# Other
zoomin      # Zoom into new clip
squeezeh    # Horizontal squeeze
squeezev    # Vertical squeeze
hlwind      # Horizontal left wind
hrwind      # Horizontal right wind
vuwind      # Vertical up wind
vdwind      # Vertical down wind
coverleft   # Cover from right
coverright  # Cover from left
coverup     # Cover from bottom
coverdown   # Cover from top

複数クリップのトランジション

トランジション付きの 3 つのクリップ
# Calculate offsets: clip1=5s, clip2=5s, clip3=5s, transition=1s
# offset1 = clip1_duration - transition = 5-1 = 4
# offset2 = clip1_duration + clip2_duration - 2*transition = 5+5-2 = 8

ffmpeg -i clip1.mp4 -i clip2.mp4 -i clip3.mp4 \
  -filter_complex "\
    [0:v][1:v]xfade=transition=fade:duration=1:offset=4[v1];\
    [v1][2:v]xfade=transition=fade:duration=1:offset=8[v];\
    [0:a][1:a]acrossfade=d=1[a1];\
    [a1][2:a]acrossfade=d=1[a]" \
  -map "[v]" -map "[a]" \
  three_clips.mp4
トランジション付きスライドショー
#!/bin/bash
# slideshow.sh - Create slideshow from images with transitions

DURATION=3      # Each image duration
TRANSITION=1    # Transition duration
FPS=30

# Generate input commands
inputs=""
for img in *.jpg; do
    inputs="$inputs -loop 1 -t $DURATION -i $img"
done

# Calculate filter for 4 images
# Adjust offsets based on image count
ffmpeg $inputs \
  -filter_complex "\
    [0:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=$FPS[v0];\
    [1:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=$FPS[v1];\
    [2:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=$FPS[v2];\
    [3:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=$FPS[v3];\
    [v0][v1]xfade=transition=fade:duration=$TRANSITION:offset=$((DURATION-TRANSITION))[x1];\
    [x1][v2]xfade=transition=wipeleft:duration=$TRANSITION:offset=$((2*DURATION-2*TRANSITION))[x2];\
    [x2][v3]xfade=transition=circleopen:duration=$TRANSITION:offset=$((3*DURATION-3*TRANSITION))[v]" \
  -map "[v]" -c:v libx264 -pix_fmt yuv420p \
  slideshow.mp4
カットごとに異なるトランジション
# Use different transitions between each clip
ffmpeg -i clip1.mp4 -i clip2.mp4 -i clip3.mp4 -i clip4.mp4 \
  -filter_complex "\
    [0:v][1:v]xfade=transition=fade:duration=1:offset=4[x1];\
    [x1][2:v]xfade=transition=wipeleft:duration=1:offset=8[x2];\
    [x2][3:v]xfade=transition=circleopen:duration=1.5:offset=12[v]" \
  -map "[v]" \
  varied_transitions.mp4

式を使ったカスタムトランジション

カスタム xfade 式
# Custom diagonal wipe with easing
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0:v][1:v]xfade=transition=custom:duration=1:offset=4:\
    expr='if(gt(X+Y,W+H*P),B,A)'[v]" \
  -map "[v]" custom_diag.mp4

# Smooth custom fade
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0:v][1:v]xfade=transition=custom:duration=1:offset=4:\
    expr='A*(1-P)+B*P'[v]" \
  -map "[v]" smooth_fade.mp4

# Circular reveal with custom center
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0:v][1:v]xfade=transition=custom:duration=1.5:offset=4:\
    expr='if(gt(sqrt(pow(X-W/2,2)+pow(Y-H/2,2)),P*sqrt(pow(W/2,2)+pow(H/2,2))),A,B)'[v]" \
  -map "[v]" circle_reveal.mp4
式の変数
変数説明
X現在のピクセルの X 座標
Y現在のピクセルの Y 座標
Wフレーム幅
Hフレーム高
P進行度(0~1)
A1 つ目のクリップのピクセル値
B2 つ目のクリップのピクセル値

高度なトランジション技法

ルマ/アルファマットトランジション
# Using a gradient image as transition mask
ffmpeg -i clip1.mp4 -i clip2.mp4 -loop 1 -i gradient.png \
  -filter_complex "\
    [0:v]format=rgba[a];\
    [1:v]format=rgba[b];\
    [2:v]format=gray,scale=1920:1080[mask];\
    [a][b][mask]maskedmerge[v]" \
  -map "[v]" -t 5 \
  luma_transition.mp4
モーションブラーのトランジション
# Add motion blur during transition
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "\
    [0:v]split[a1][a2];\
    [1:v]split[b1][b2];\
    [a1][b1]xfade=transition=fade:duration=1:offset=4[fade];\
    [fade]tblend=all_mode=average:all_opacity=0.5[v]" \
  -map "[v]" \
  blur_transition.mp4
プッシュ/リビールトランジション
# Push left (new clip pushes old off screen)
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "\
    [0:v]fps=30[a];\
    [1:v]fps=30[b];\
    [a][b]xfade=transition=slideleft:duration=0.5:offset=4.5[v]" \
  -map "[v]" \
  push_left.mp4

# Cover transition (new clip covers old)
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0:v][1:v]xfade=transition=coverright:duration=0.75:offset=4.25[v]" \
  -map "[v]" \
  cover_right.mp4
ケン・バーンズ効果付きズーム
# Zoom transition with motion
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "\
    [0:v]scale=2*iw:-1,zoompan=z='min(zoom+0.0015,1.5)':d=150:s=1920x1080[a];\
    [1:v][a]xfade=transition=zoomin:duration=1:offset=4[v]" \
  -map "[v]" -t 6 \
  zoom_transition.mp4

テキスト/グラフィックを使ったトランジション

タイトルカードのトランジション
# Fade to title card, then fade to next clip
ffmpeg -i clip1.mp4 \
  -f lavfi -i "color=c=black:s=1920x1080:d=3" \
  -i clip2.mp4 \
  -filter_complex "\
    [1:v]drawtext=text='Chapter 2':fontsize=72:fontcolor=white:x=(w-tw)/2:y=(h-th)/2[title];\
    [0:v][title]xfade=transition=fadeblack:duration=1:offset=4[x1];\
    [x1][2:v]xfade=transition=fadeblack:duration=1:offset=6[v]" \
  -map "[v]" \
  title_transition.mp4
ローワーサードのトランジション
# Animate lower third with clip transition
ffmpeg -i clip1.mp4 -i clip2.mp4 -i lower_third.png \
  -filter_complex "\
    [0:v][1:v]xfade=transition=fade:duration=1:offset=4[bg];\
    [2:v]format=rgba[lt];\
    [bg][lt]overlay=x=50:y=H-h-50:enable='between(t,1,4)'[v]" \
  -map "[v]" \
  lower_third_trans.mp4

パフォーマンスの最適化

ハードウェアアクセラレーションを使用したトランジション
# Use NVENC for faster encoding after transition
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0:v][1:v]xfade=transition=fade:duration=1:offset=4[v]" \
  -map "[v]" \
  -c:v h264_nvenc -preset fast \
  output.mp4

# Hardware decode + CPU transition + hardware encode
ffmpeg -hwaccel cuda -i clip1.mp4 -hwaccel cuda -i clip2.mp4 \
  -filter_complex "[0:v][1:v]xfade=transition=dissolve:duration=1:offset=4[v]" \
  -map "[v]" \
  -c:v h264_nvenc \
  output.mp4
プレビュー向けの最適化
# Lower resolution preview
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "\
    [0:v]scale=640:360[a];\
    [1:v]scale=640:360[b];\
    [a][b]xfade=transition=fade:duration=1:offset=4[v]" \
  -map "[v]" \
  -c:v libx264 -preset ultrafast \
  preview.mp4

トラブルシューティング

よくある問題

「Discordant resolution」エラー

# Ensure both clips have same resolution
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "\
    [0:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1[a];\
    [1:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1[b];\
    [a][b]xfade=transition=fade:duration=1:offset=4[v]" \
  -map "[v]" output.mp4

「Input streams have different frame rates」警告

# Normalize frame rates
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "\
    [0:v]fps=30[a];\
    [1:v]fps=30[b];\
    [a][b]xfade=transition=fade:duration=1:offset=4[v]" \
  -map "[v]" output.mp4

複数のクリップのオフセット計算

For clips of duration D with transition T:
- offset1 = D - T
- offset2 = 2D - 2T
- offset3 = 3D - 3T
- offsetN = N*D - N*T

音声が映像のトランジションと一致しない

# Sync audio crossfade with video xfade
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "\
    [0:v][1:v]xfade=transition=fade:duration=1:offset=4[v];\
    [0:a][1:a]acrossfade=d=1:c1=tri:c2=tri[a]" \
  -map "[v]" -map "[a]" \
  output.mp4
検証コマンド
# Check clip durations before creating transitions
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 clip1.mp4

# Check frame rate
ffprobe -v error -select_streams v -show_entries stream=r_frame_rate -of default=noprint_wrappers=1:nokey=1 clip1.mp4

# Check resolution
ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=p=0 clip1.mp4

ベストプラクティス

タイミング
  1. 標準的なトランジションの長さ:0.5~1.5秒
  2. トランジションのスタイルをコンテンツの雰囲気に合わせます
  3. シーケンス内では一貫したトランジションを使用します
  4. 長すぎるトランジション(2秒超)は避けます
品質
  1. トランジションを適用する前に、解像度とフレームレートを統一します
  2. 最終レンダリングには高品質なプリセットを使用します
  3. 一括処理の前に、フル解像度でトランジションをテストします
  4. クリップ間の色合わせを検討します
スタイルガイドライン
  1. フェード/ディゾルブ:汎用的でプロフェッショナル
  2. ワイプ:エネルギッシュで、アクションコンテンツ向け
  3. スライド/プッシュ:モダンでダイナミック
  4. 円形/アイリス:ドラマチックで演劇的
  5. ピクセル化/ぼかし:クリエイティブで芸術的

このガイドではFFmpegのトランジションについて説明しています。図形やグラフィックの描画については、shapes-graphicsスキルを参照してください。

コメント