フェードするチャンネルにアルファチャンネルあるなしで用途が異なる fade
フィルタの使い方。アルファチャンネルがない場合のフェードインは指定色から元映像にフェードし、フェードアウトは元映像から指定色にフェードする。アルファチャンネルがあればクロスフェードのように2映像をきれいにつなげることができる。そのほかにアルファチャンネルの濃度の変化をマスクとして利用し、別のフィルタの濃度変化にも使える。
基本コマンド
元映像から始まり開始2秒から白に1秒間でフェードインする
ffplay -f lavfi -i testsrc,fade=t=out:st=1:d=2:c=white
赤から始まり開始2秒から元映像に1秒間でフェードアウトする
ffplay -f lavfi -i testsrc,fade=t=in:st=1:d=2:c=0xff0000
開始4秒から1秒間で1入力の映像から2入力の映像にクロスフェードする。それぞれの映像の解像度とフレームレートを揃える。出力フォーマットは sdl で出力するために format=yuv420p
で変換している
ffmpeg -re -i input -f lavfi -i testsrc=s=640x360:r=30000/1001 -filter_complex [0:v]format=yuva420p,fade=t=out:st=4:d=1:alpha=1,setpts=PTS-STARTPTS[0a];[1:v]format=yuva420p,fade=t=in:st=4:d=1:alpha=1,setpts=PTS-STARTPTS[1a];color=s=640x360:r=30000/1001[2a];[2a][0a]overlay[02];[02][1a]overlay,format=yuv420p -f sdl -
3秒から1秒間の強くなって弱くなるブラー(gblur)を掛ける
ffmpeg -i input -filter_complex split[0],gblur=4:enable='between(t\,3,4)',format=yuva420p,fade=t=in:st=3:d=0.5:alpha=1,fade=t=out:st=3.5:d=0.5:alpha=1,[0]overlay -acodec copy output
4秒から1秒間のクロスフェードとブラー(gblur)を掛ける
ffmpeg -i input1 -i input2 -filter_complex format=yuva420p,fade=t=out:st=4:d=1:alpha=1[0];[1:v]format=yuva420p,fade=t=in:st=4:d=1:alpha=1,[0]overlay,split[01],gblur=16:2:enable='between(t\,3.3,6)',format=yuva420p,fade=t=in:st=3.9:d=0.8:alpha=1,fade=t=out:st=4.7:d=0.7:alpha=1,[01]overlay -acodec copy output
公式ドキュメント:FFmpeg Filters Documentation : fade
オプション
フェードインはフェードイン開始までは color で指定した色を継続する。フェードアウトはフェードアウトが終了したら color で指定した色を継続する。
- type, t[int]
フェードタイプの指定- 0, in
フェードイン。既定値 - 1, out
フェードアウト
- 0, in
- start_frame, s[int]
フェード効果が適用される 0 から始まる最初のフレーム番号
既定値:0
範囲:0 から INT_MAX まで - nb_frames, n[int]
フェード効果が適用されるフレーム数
既定値:25
範囲:0 から INT_MAX まで - alpha[boolean]
有効にすることで、入力した映像にアルファチャンネルがあればアルファチャンネルだけのフェードを行う。なければ color で指定した色でフェードする
既定値:0
範囲:0(無効) と 1(有効) - start_time, st[duration]
フェード効果が適用される最初のタイムスタンプ秒。start_frame を併用した場合は後ろの時間を優先する
既定値:0 - duration, d[duration]
フェード効果が適用されるタイムスタンプ秒。nb_frames を併用した場合は duration を優先する
既定値:0 - color, c[color]
フェードの色指定