is there anyway to concate two video file with fade effect with ffmpeg in linux?
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]


WxH with the resolution of the videos i.e. 640x360,

Video1Length Video2Length FadeDuration with their value in seconds.

| improve this answer | |
  • what about adding a third, fourth, or nth video? I conceptualize this by running the above on first.ogg and second.ogg, producing output1.ogg. Then I would run the script with output1.ogg and third.ogg to get output2.ogg (and so on up to output[n-1].ogg). Is this efficient or is there a better way to do it all at once? – kraftydevil Mar 1 '19 at 5:44
  • I tried to use "ffmpeg-gl-transition" and followed all instruction for my mac. The transition works. However, I loose audio on my second video for some reason. My command was: fmpeg -i input1.mp4 -i input2.mp4 -filter_complex "gltransition=duration=4:source=ZoomInCircles.glsl" -y out.mp4 – Rajesh M Nov 29 '19 at 13:04

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
| improve this answer | |
  • Have you submitted this to ffmpeg-devel for integration? – Gyan Dec 6 '17 at 6:11
  • Official patch will be coming soon :) – fisch2 Dec 6 '17 at 8:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.