I'd probably re-encode just to make sure the video is rotated correctly. I'd be willing to bet the issue in VLC is because it may be picking up on some metadata in the segments that changes when it goes from segment into spacer, which throws everything off. When re-encoding, the metadata would [usually] be stripped out, depending on what it is.
And if I did re-encode, it would be by using AviSynth+ to prepare the entire thing before handing it off to FFmpeg.
Code:
v1=FFmpegSource2("video1.mp4",atrack=-1).TurnRight()
v2=FFmpegSource2("video2.mp4",atrack=-1).TurnRight()
v3=FFmpegSource2("video3.mp4",atrack=-1).TurnRight()
# [other video files, following the same pattern]
spacer=BlankClip(v1,12)
v1 ++ spacer ++ v2 ++ spacer ++ v3 #[and so on...]
This would be saved as a file, e.g. test_concat.avs. You can then give the script file to FFmpeg for encoding.
The only rub would be the need to build AviSynth+ (easy), either re-build the system FFmpeg with --enable-avisynth (tricky) or build a separate [and preferably static] FFmpeg to handle it (easier, but depends on how many other things you want enabled), and also build the FFMS2 source plugin (easy, if you point it at that other build of FFmpeg). The deb-multimedia (dmo) repository is another option.
One advantage of this approach is that all filtering can be done in the script, and be changed basically on-the-fly so you don't waste time running re-encode after re-encode to get the video processing looking right. If FFmpeg was built with --enable-avisynth, the corresponding FFplay binaries can play the scripts back as if they were normal video files - although the better option would be building mpv and linking against that AviSynth-aware version of FFmpeg, since mpv is actually meant as a normal media player.
Bookmarks