I have two H.264 encoded MPEG-4 files that I need to concatenate. I have been using MP4Box for this task by first ensuring the files are encoded identically (even went so far as to compare output from h264_parse on their video tracks) and then concatenating with this command:
MP4Box -cat file1.mp4 -cat file2.mp4 output_file.mp4
This works and the output file is playable, but on playback in Quicktime or VLC the second video's audio starts too soon, making the entire second part of the concatenated file out of sync.
I have tried reencoding the output through ffmpeg with
-vcodec copy and
-acodec copy but the sync issue persists.
I have also tried converting to MPEG-2 format first, concatenating with a simple
cat file1.mpg file2.mpg > output.mpg and reencoding the result with ffmpeg. This was even worse.
I know that I can pass commands to MP4Box to adjust the start time of the audio track, but I am trying to do this programmatically for any input video (in the same encoding of course). I am looking for possible solutions that would not require human intervention / manual adjustments. Or, at least, an understanding of what is happening to make the second part of the concatenated video go out of sync.