ffmpeg 4.3から使えるフィルタ。映像の切り替えにフェード、スライド、ワイプ、ディゾルブなどのトランジションを追加するxfadeフィルタの使い方。1入力目の映像の最後につなげるフィルタではなく、1入力目の指定時間から指定時間秒トランジションを行い2入力目のファイルの先頭に切り替える。2つのファイルのタイムベースは一致しなければならないので、エラーが出るときはエラーが出たファイルにsettbフィルタを当てる。

関連フィルタ
フェードイン、フェードアウトの設定ができる fade

基本コマンド

映像をxfadeフィルタでクロスフェードし、音声もクロスフェードするにはafade、asetpts、amixフィルタを併用する。xfadeフィルタのoffsetafadeフィルタのstを同じ値にし、xfadeフィルタのdurationafadeフィルタのdを同じ値にすると映像のフェードと音声のフェードが同じように変化する。
ffmpeg -i input1 -i input2 -filter_complex [0:v][1:v]xfade=transition=fade:duration=1:offset=2[v];[0:a]afade=t=out:st=2:d=1,asetpts=PTS-STARTPTS[0a];[1:a]afade=t=in:st=2:d=1,asetpts=PTS-STARTPTS[1a];[0a][1a]amix[a] -pix_fmt yuv420p -map [v] -map [a] output

1入力目のファイルのタイムベースが1/25で2入力目が異なるときに2入力目を1/25に変更する。
ffmpeg -i input1 -i input2 -filter_complex "[1:v]settb=1/25,[0:v]xfade=offset=1" -pix_fmt yuv420p output

2入力目の映像の開始時間を5秒遅らせる。このままだと音声が遅れないので無効にしている。音声は別コマンドで5秒カットして別ファイルから合わせるか、atrim、asetptsフィルタで同じように遅らせる。
ffmpeg -i input1 -i input2 -filter_complex "[1:v]trim=5,setpts=PTS+5/TB,[0:v]xfade=offset=1" -pix_fmt yuv420p -an output

exprの例。単純なフェード。
ffmpeg -i input1 -i input2 -filter_complex xfade=expr='A*P+B*(1-P)’ -pix_fmt yuv420p -an output

FFmpeg-users – xfade filter – custom expressions

オプション

2つの映像は同じ解像度、フレームレート、タイムベースでなければならない。タイムベース変更はsettbフィルタを使う。下のサンプル動画を参照

  • transition[int]
    トランジションの指定
    • -1, custom
    • 0, fade:既定値
    • 1, wipeleft
    • 2, wiperight
    • 3, wipeup
    • 4, wipedown
    • 5, slideleft
    • 6, slideright
    • 7, slideup
    • 8, slidedown
    • 9, circlecrop
    • 10, rectcrop
    • 11, distance
    • 12, fadeblack
    • 13, fadewhite
    • 14, radial
    • 15, smoothleft
    • 16, smoothright
    • 17, smoothup
    • 18, smoothdown
    • 19, circleopen
    • 20, circleclose
    • 21, vertopen
    • 22, vertclose
    • 23, horzopen
    • 24, horzclose
    • 25, dissolve
    • 26, pixelize
    • 27, diagtl
    • 28, diagtr
    • 29, diagbl
    • 30, diagbr
    • 31, hlslice
    • 32, hrslice
    • 33, vuslice
    • 34, vdslice
    • 35, hblur
    • 36, fadegrays
    • 37, wipetl
    • 38, wipetr
    • 39, wipebl
    • 40, wipebr
  • duration[duration]
    トランジション効果が継続する秒指定
    既定値:1
  • offset[duration]
    トランジションが開始する秒指定
    既定値:0
  • expr[string]
    評価式の指定。オプションは後述。扱い方が難しい

expr のオプション

geqフィルタを参考にするがよくわからない。

  • X, Y
    入力映像の横と縦の解像度で 0 からはじまりW, Hまでを返す
  • W, H
    入力映像の横と縦の解像度。固定値
  • P
    Progress of transition effect.
  • PLANE
    Currently processed plane.
  • A
    Return value of first input at current location and plane.
  • B
    Return value of second input at current location and plane.
  • a0(x, y), a1(x, y), a2(x, y), a3(x, y)
    Return the value of the pixel at location (x,y) of the first/second/third/fourth component of first input.
  • b0(x, y), b1(x, y), b2(x, y), b3(x, y)
    Return the value of the pixel at location (x,y) of the first/second/third/fourth component of second input.

公式ドキュメント:FFmpeg Filters Documentation : xfade

トランジションのサンプル

公式wikiにサンプルGIFを掲載しているのでそれを引用する。

以下はフレーム数が異なるので別ファイル扱いにしている。

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)