フェードするファイルにアルファチャンネルあるなしで用途が異なるfade
フィルタの使い方。アルファチャンネルがない場合のフェードインは指定色から入力した映像にフェードし、フェードアウトは入力した映像から指定色にフェードする。アルファチャンネルがあればクロスフェードのように2つの映像をきれいにつなげることができる。
ffmpeg 4.3から手軽にトランジションできるフィルタが追加された。
映像のトランジションの設定ができる xfade
そのほかにアルファチャンネルの濃度の変化をマスクとして利用し、別のフィルタのタイムラインによる強度変化にも使える。出力フォーマットは RGB。
具体的な利用例
時間でフィルタに強弱をつける
ドラクエの戦闘シーンチェンジエフェクトを作る
- Windows の ffmpeg で生放送する方法 – amix
- 音声のフェードイン、フェードアウトの設定ができる afade
- 入力した2つの音声にクロスフェードをかける acrossfade の使い方
基本コマンド
元映像(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
reverse
フィルタを使って開始時間の指定なく最初と最後にフェード効果を当てることができる。しかしすべての映像をデコードするので短時間の映像向き。
最初に0.5秒フェードイン、最後に0.5秒フェードアウト。
ffmpeg -i input -vf fade=d=0.5,reverse,fade=d=0.5,reverse -c:a 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, 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