Isso pode ser feito com o ffmpeg. Se os vídeos forem do mesmo tamanho:
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex \
'[0:v]pad=iw:ih*2:0:0[intv];[intv][1:v]overlay=0:H/2[vid]' \
-map [vid] -c:v libx264 -crf 22 -preset veryfast output.mp4
Se eles tiverem tamanhos diferentes (em que input1.mp4 tem a resolução mais alta):
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex \
'[0:v]pad=iw:ih*2:0:0[intv];[intv][1:v]overlay=(W-w)/2:H/2[vid]'
-map [vid] -c:v libx264 -crf 22 -preset veryfast output.mp4
Se você conhece as resoluções dos vídeos, pode obter uma saída melhor. Assumindo que input1.mp4 é maior (ou pelo menos a mesma resolução), e input2.mp4 tem uma altura de 360:
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex \
'[0:v]pad=iw:ih+360:0:0[intv];[intv][1:v]overlay=(W-w)/2:H-360[vid]'
-map [vid] -c:v libx264 -crf 22 -preset veryfast output.mp4