FFMPEG demux concat dropping audio at stitch points I am trying to use FFMPEG (v.3.3.3) concat demuxer and as the file is stitched the audio drops at concat points. As I have files of same codecs, bitrates and so on - it doesn't make much sense to transcode again, so I really want to make concat demuxer to work. 

I've had this problem with h.264 and aac. Here is how to recreate so you can see what I am talking about.


Create test file with bars and tone (10s)

ffmpeg -f lavfi -i "sine=frequency=1000:sample_rate=48000:duration=10" -f lavfi -i smptehdbars=size=1920x1080 -t 10 test.mp4
Split the file into two using seeking

ffmpeg -i test.mp4 -ss 0 -t 5 test-1.mp4

ffmpeg -i test.mp4 -ss 5 -t 5 test-2.mp4
Join the files together using concat demuxer

ffmpeg -f concat -safe 0 -i &lt;(for f in ./test-*.mp4; do echo "file '$PWD/$f'"; done) -c copy testconcat.mp4


This creates a file with clearly audible audio drop at 5s mark. To picture this here I've created two spectrograms by extracting audio.


Extract audio

ffmpeg -i test.mp4 test.wav

ffmpeg -i testconcat.mp4 testconcat.wav
Create spectrograms

sox test.wav -n spectrogram -Y 130 -c "Input file" -o test.png

sox testconcat.wav -n spectrogram -Y 130 -c "Concat file" -o testconcat.png


And here is the result:





So my questions are: 


Can concat demuxer be used in such a way to avoid the described problem?
Or what would you see as a solution (beyond full re-transcode)?
ffmpeg -i test.mp4 -ss 0 -t 5 test-1.mp4
ffmpeg -i test.mp4 -ss 5 -t 5 test-2.mp4


This is the root of evil. You almost never can split your audio/video with very high precise. Reasons for it:


Non-integer FPS in video. You can't split non-integer number of frames, so if you use 29.997 fps, you can't get 149.985 frames in file.
Audio codecs compress audio samples in blocks of samples, for example, in 1024 samples per second. So, if you split your sound in 5 second and sound has samplerate 44100Hz, you can only get 44100*5/1024=215.332 frames, this is too not integer. Actually, here you get small drop. Some codecs always add some silent frames at end, mp3 do in that way. Only one exception I know: pcm (any kind), this "codec" can save any count of frame, with no rough.


So, in conclusion, if you want split and concatenate files without loss:


use integer count for fps
use codecs what can encode any count of samples without rough or padding.