フェードするファイルにアルファチャンネルあるなしで用途が異なる fade フィルタの使い方。アルファチャンネルがない場合のフェードインは指定色から入力した映像にフェードし、フェードアウトは入力した映像から指定色にフェードする。アルファチャンネルがあればクロスフェードのように2つの映像をきれいにつなげることができる。

そのほかにアルファチャンネルの濃度の変化をマスクとして利用し、別のフィルタのタイムラインによる強度変化にも使える。出力フォーマットは RGB。

具体的な利用例
ドラクエの戦闘シーンチェンジエフェクトを作る
時間でフィルタに強弱をつける

音声のフェードイン、フェードアウトの設定ができる afade
入力した2つの音声にクロスフェードをかける acrossfade の使い方
Windows の ffmpeg で生放送する方法 – amix

基本コマンド

元映像(testsrc)から始まり開始1秒から2秒間で白にフェードインする。
ffplay -f lavfi -i testsrc,fade=t=out:st=1:d=2:c=white

赤から始まり開始1秒から元映像(testsrc)に2秒間でフェードアウトする。
ffplay -f lavfi -i testsrc,fade=t=in:st=1:d=2:c=0xff0000

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

オプション

フェードインはフェードイン開始までは color で指定した色を継続する。
フェードアウトはフェードアウトが終了したら color で指定した色を継続する。

  • type, t[int] フェードタイプの指定
    • 0, in
      フェードイン。既定値
    • 1, out
      フェードアウト
  • 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, s を併用した場合 start_time, st よりも時間が短ければ合算される。併用しない方が無難
    既定値:0
  • duration, d[duration]
    フェード効果が適用されるタイムスタンプ秒。nb_frames, n を併用した場合は duration, d を優先する。併用しない方が無難
    既定値:0
  • color, c[color]
    フェードの色指定。16進数のrrggbb形式か、色名を指定
    既定値:”black”

応用例

クロスフェード

開始4秒から1秒間で1入力の映像から2入力の映像にクロスフェードする。それぞれの映像の解像度とフレームレートを揃える。出力フォーマットは SDL で再生するために format=rgb24 で変換している。
ffmpeg -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=rgb24,realtime -f sdl -

開始4秒から1秒間で1入力目から2入力目へクロスフェードする。音声は無効。
ffmpeg -i input1 -i input2 f lavfi -i color=s=1280x720:r=30 -filter_complex [0:v]format=yuva420p,fade=t=out:st=4:d=1:alpha=1,setpts=PTS-STARTPTS[0v];[1:v]format=yuva420p,fade=t=in:st=4:d=1:alpha=1,setpts=PTS-STARTPTS[1v];[2:v][0v]overlay[02];[02][1v]overlay -an output

さらに音声も同じ時間にクロスフェードするなら、
ffmpeg -i input1 -i input2 f lavfi -i color=s=1280x720:r=30 -filter_complex [0:v]format=yuva420p,fade=t=out:st=4:d=1:alpha=1,setpts=PTS-STARTPTS[0v];[1:v]format=yuva420p,fade=t=in:st=4:d=1:alpha=1,setpts=PTS-STARTPTS[1v];[2:v][0v]overlay[02];[02][1v]overlay;[0:a]afade=t=out:st=4:d=1[0a];[1:a]afade=t=in:st=4:d=1[1a];[0a][1a]amix output

フィルタ強弱のクロスフェード

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

コメントを残す

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

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