この記事でわかること
xfadeフィルタで2つの動画クリップ間にトランジションを追加する方法offsetとdurationパラメータの設定- 利用可能なトランジション種類の一覧
- 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 6.1 / Ubuntu 24.04 (検証スクリプトで実行確認)
一次ソース: ffmpeg.org/ffmpeg-filters.html#xfade