If you were in my boat you were frustrated that you had to double encode, eg. one separate encode for watermark and a separate from concat and it's not easy to figure out this with ffmpeg on your own. However it is a nice way to save time!
ffmpeg -i file1.mp4 -i file2.mp4 -i file3.mp4 -i watermark.png -filter_complex "[0:v]setpts=PTS-STARTPTS[v0]; [1:v]setpts=PTS-STARTPTS[v1]; [2:v]setpts=PTS-STARTPTS[v2]; [v0][0:a][v1][1:a][v2][2:a]concat=n=3:v=1:a=1[v][aout]; [v][3:v]overlay=W-w-10:10[vout]" -map "[vout]" -map "[aout]" -crf 20 output.mp4
Of course file1.mp4 file2.mp4 file3.mp4 are your source videos you are concatenating (in that order) and the watermark.png is your watermark. The overaly
W-w-10:10 sets your mark on the top right.
To overlay on the bottom right: W-w-25:H-h-25
I also added "-crf 20" as the default is 23. In general the higher the number the faster the encode but lower the quality. I found 20 is a good medium. A good test is that if your output video is smaller than your input you have lost quality. Try to experiment with crf until you get a size the same or slightly larger than your original input.
ffmpeg, watermark, concatenate, commandif, frustrated, encode, eg, concat, mp, png, filter_complex, quot, setpts, pts, startpts, aout, overlay, vout, crf, output, videos, concatenating, overaly, default, medium, input, larger,