15

I am using ffmpeg for Concatenating two MP3 files together,

I use this command :

ffmpeg -y -i first.mp3 -i second.mp3 -filter_complex "[0:0][1:0] amix=inputs=2:duration=longest" -c:a libmp3lame output.mp3

It works, but there is a little problem, the overlay together!

I want first song plays, and when it finished, second file starts (in output file)

But now they starts at the same time.

How can i change that command, to have a output that contains first song then when the first finished, second plays ?

Plus, I've tried concat command but not worked, I just can use something like what i sent.

Karami
  • 153

3 Answers3

18

To skip re-encoding, use the concat demuxer:

Create a text file

file '/path/to/first.mp3'
file '/path/to/second.mp3'

and then

ffmpeg -f concat -i list.txt -c copy out.mp3

If re-encoding is fine,

ffmpeg -i first.mp3 -i second.mp3 -filter_complex [0:a][1:a]concat=n=2:v=0:a=1 out.mp3
Gyan
  • 38,955
11

Usually,

cat first.mp3 second.mp3 > out.mp3

should just work. You didn't say what goes wrong when you try it.

Alternatively, you can use mp3wrap:

mp3wrap out.mp3 first.mp3 second.mp3 third.mp3 ...

This doesn't re-encode the MP3s like ffmpeg would, it keeps the ID3 tags, and you can split the files again later with mp3split.

I advise against using ffmpeg or similar programs, because reencoding causes loss of quality.

dirkt
  • 17,461
4

you could also use cat [your files] > concat.mp3 which will produce a mp3 file that has multiple headers and ID3 tags. Afterwards you can correct this by invoking mp3val -f -nb concat.mp3.