この記事でわかること

  • xfade フィルタで2つの動画クリップ間にトランジションを追加する方法
  • offsetduration パラメータの設定
  • 利用可能なトランジション種類の一覧
  • 3本以上のクリップを連結する方法
  • acrossfade で音声トランジションを同期させる方法

テスト済みバージョン: FFmpeg 6.1で確認済み
対象 OS: Windows / macOS / Linux


基本構文

2つのクリップを1秒のクロスフェードでつなぐ:

ffmpeg -i input.mp4 -i input.mp4 -filter_complex "[0:v][1:v]xfade=transition=fade:duration=1:offset=4[v]" -map "[v]" output.mp4

offset はトランジション開始位置(最初のクリップの開始からの秒数)です。

パラメータ説明デフォルト
transitionトランジション種類fade
durationトランジション時間(秒)1
offsetトランジション開始位置(秒)0

offset の計算方法

offset はクリップ1の開始から何秒後にトランジションを始めるかを指定します。

例: クリップ1が10秒の場合、最後の2秒でトランジションを始めるには offset=8 を指定します。

ffmpeg -i input.mp4 -i input.mp4 -filter_complex "[0:v][1:v]xfade=transition=fade:duration=2:offset=8[v]" -map "[v]" -t 14 output.mp4

-t で出力の長さを調整します(クリップ1の長さ + クリップ2の長さ - トランジション時間)。


利用可能なトランジション

フェード系

ffmpeg -i input.mp4 -i input.mp4 -filter_complex "[0:v][1:v]xfade=transition=fade:duration=1:offset=4[v]" -map "[v]" output.mp4
ffmpeg -i input.mp4 -i input.mp4 -filter_complex "[0:v][1:v]xfade=transition=fadeblack:duration=1:offset=4[v]" -map "[v]" output.mp4
ffmpeg -i input.mp4 -i input.mp4 -filter_complex "[0:v][1:v]xfade=transition=fadewhite:duration=1:offset=4[v]" -map "[v]" output.mp4

スライド系

ffmpeg -i input.mp4 -i input.mp4 -filter_complex "[0:v][1:v]xfade=transition=slideleft:duration=0.8:offset=4[v]" -map "[v]" output.mp4
ffmpeg -i input.mp4 -i input.mp4 -filter_complex "[0:v][1:v]xfade=transition=slideright:duration=0.8:offset=4[v]" -map "[v]" output.mp4
ffmpeg -i input.mp4 -i input.mp4 -filter_complex "[0:v][1:v]xfade=transition=slideup:duration=0.8:offset=4[v]" -map "[v]" output.mp4
ffmpeg -i input.mp4 -i input.mp4 -filter_complex "[0:v][1:v]xfade=transition=slidedown:duration=0.8:offset=4[v]" -map "[v]" output.mp4

ワイプ系

ffmpeg -i input.mp4 -i input.mp4 -filter_complex "[0:v][1:v]xfade=transition=wipeleft:duration=0.5:offset=4[v]" -map "[v]" output.mp4
ffmpeg -i input.mp4 -i input.mp4 -filter_complex "[0:v][1:v]xfade=transition=wipetl:duration=1:offset=4[v]" -map "[v]" output.mp4

ズーム・回転系

ffmpeg -i input.mp4 -i input.mp4 -filter_complex "[0:v][1:v]xfade=transition=zoomin:duration=0.8:offset=4[v]" -map "[v]" output.mp4
ffmpeg -i input.mp4 -i input.mp4 -filter_complex "[0:v][1:v]xfade=transition=circleopen:duration=1:offset=4[v]" -map "[v]" output.mp4

その他のトランジション一覧

fade, fadeblack, fadewhite, distance, wipeleft, wiperight, wipeup, wipedown, slideleft, slideright, slideup, slidedown, smoothleft, smoothright, smoothup, smoothdown, circleopen, circleclose, vertopen, vertclose, horzopen, horzclose, dissolve, pixelize, diagtl, diagtr, diagbl, diagbr, hlslice, hrslice, vuslice, vdslice, hblur, fadegrays, wipetl, wipetr, wipebl, wipebr, squeezev, squeezeh, zoomin, fadefast, fadeslow


音声付きクロスフェード(acrossfade)

映像トランジションに合わせて音声もクロスフェードするには acrossfade を組み合わせます。

ffmpeg -i input.mp4 -i input.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

acrossfade=d=1 で1秒の音声クロスフェードを追加します。


3本以上のクリップを連結する

3本のクリップを順番にフェードでつなぐ例:

ffmpeg -i input.mp4 -i input.mp4 -i input.mp4 \
  -filter_complex "[0:v][1:v]xfade=transition=fade:duration=1:offset=4[v01];[v01][2:v]xfade=transition=fade:duration=1:offset=8[vout]" \
  -map "[vout]" output.mp4

最初の2クリップを結合した結果([v01])を、さらに3本目のクリップと結合します。offset は最初のクリップの開始からの累積時間で計算します。


注意事項

クリップのフレームレートや解像度が異なる場合は、事前に統一してください。

ffmpeg -i clip1.mp4 -vf "scale=1280:720,fps=30" -c:v libx264 clip1_norm.mp4
ffmpeg -i clip2.mp4 -vf "scale=1280:720,fps=30" -c:v libx264 clip2_norm.mp4
ffmpeg -i clip1_norm.mp4 -i clip2_norm.mp4 -filter_complex "[0:v][1:v]xfade=transition=fade:duration=1:offset=4[v]" -map "[v]" output.mp4

関連リソース

よく使うオプション・フィルタ・コーデック設定をまとめた PDF チートシートです。手元に置いておくと調べる時間を短縮できます。

FFmpeg チートシート

関連記事


動作確認: ffmpeg 6.1 / Ubuntu 24.04 (検証スクリプトで実行確認)
一次ソース: ffmpeg.org/ffmpeg-filters.html#xfade