is there anyway to concate two video file with fade effect with
something like this:
ffmpeg -f concat -i input.txt -c copy "--with:fade:out-in" output.ogg
Your present command specifies stream copy, but since you wish to alter the video frames during the transition, that won't work.
It can be done if you know the duration of the two videos and the duration of fade. Also, for the command below, the resolutions of the two videos should be the same.
ffmpeg -i first.ogg -i second.ogg \ -filter_complex \ "color=black:WxH:d=Video1Length+Video2Length-FadeDuration[base]; \ [0:v]setpts=PTS-STARTPTS[v0]; \ [1:v]format=yuva420p,fade=in:st=0:d=FadeDuration:alpha=1, \ setpts=PTS-STARTPTS+((Video1Length-FadeDuration)/TB)[v1]; \ [base][v0]overlay[tmp]; \ [tmp][v1]overlay,format=yuv420p[fv]; \ [0:a][1:a]acrossfade=d=FadeDuration[fa]" \ -map [fv] -map [fa] output.ogg
WxH with the resolution of the videos i.e.
FadeDuration with their value in seconds.
ffmpeg-concat is the easiest way to accomplish what you want and allows you to use a bunch of sexy OpenGL transitions, with the default being crossfade.
ffmpeg-gl-transition is a custom ffmpeg filter which allows you to use GLSL to smoothly transition between two video streams. This filter is significantly easier to use and customize than the alternatives listed here.
This filter supports a large list of transition types, with the default being crossfade.
./ffmpeg -i 0.mp4 -i 1.mp4 -filter_complex "gltransition=duration=4:offset=1.5" out.mp4