FFmpeg concat creating time jumps
There's no need to work with individual files; you can put everything into one ffmpeg command. This is also much faster and will result in better quality.

Define your three inputs (intro image, outro image, and the image sequence), then create individual filters to draw the text, trim the intro/outro clips, and run the fade filters. Finally concat everything into one stream.

I have omitted some specific text options and image file names for the sake of brevity.

ffmpeg \
    -y \
    -loop 1 -framerate 24 -t 5 -i intro.png \
    -loop 1 -framerate 24 -t 5 -i outro.png \
    -start_number 1 -framerate 1 -i frame-%04d.png \
    -filter_complex " \
    [0:v] \
        drawtext=fontsize=500:fontcolor=white:text=foo:x=(w-text_w)/2:y=(h-text_h-line_h)/2,
        fade=in:0:48 \
    [intro]; \
    [1:v] \
        drawtext=fontsize=500:fontcolor=white:text=foo:x=(w-text_w)/2:y=(h-text_h-line_h)/2,
        fade=out:20:60 \
    [outro]; \
    [intro][2:v][outro] \
        concat=n=3:v=1:a=0
    [outv] \
    " \
    -map "[outv]" -c:v libx264 -pix_fmt yuv420p -crf 16 out.mp4


The -t 5 sets the duration of the intro/outro directly.

You can replace the input -framerate parameters with the desired frame rates of the intro and outro, and also change it in order to set the slideshow speed. That is, if you want one image every second, use 1, if you want one every two seconds, use 0.5, etc.