concat files with ffmpeg and preserve exact frame timestamps
Audio codecs like AAC or MP3 have a priming sample before the first audio sample. The priming sample has a negative timestamp. For a 48 kHz stream, the timestamp will be -1024/48000 s = -0.0213s. What the concat demuxer does is add an offset to the timestamps of all files after the first one. The priming sample created in step 2 is affecting the timestamp post-offset.

If you skip audio during extraction and concat, and add it only at the end, you can avoid that.