13

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.

2

3 Answers 3

16

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
15
  • thanks but i couldn't use that, is there anyway to use amix command?
    – Karami
    Jun 4, 2017 at 7:07
  • 1
    Yes, but you have to manually supply the duration, and volume will be reduced. ffmpeg -i 1.mp3 -i 2.mp3 -filter_complex "[1]adelay=75000|75000[b];[0][b]amix" out.mp3 75000 is the duration of 2.mp3 in milliseconds.
    – Gyan
    Jun 4, 2017 at 7:18
  • 1
    Add -map_metadata 1
    – Gyan
    Jun 4, 2017 at 7:31
  • 1
    Add -map_metadata 0. if any fields clash, the last specified map_metadata will overwrite the first.
    – Gyan
    Jun 4, 2017 at 8:00
  • 2
    Add -safe 0 before -i if see error: [concat @ 0x7fcef3000000] Unsafe file name '/path/to/first.mp3' list.txt: Operation not permitted
    – Honghao Z
    Jan 6, 2019 at 2:37
8

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.

8
  • You're right ffmpeg is not good , but i have to currently. Is there anyway to use ffmpeg right now? concat doesn't work for me. I have to use amix format
    – Karami
    Jun 4, 2017 at 7:08
  • if you don't re-encode doesn't that mess up the timecode?
    – niico
    Dec 11, 2019 at 15:14
  • This is the fastest way but will need some tweaking if you have spaces in the filename. Aug 7, 2020 at 16:45
  • 1
    I know that the question has ffmpeg in the title but this solution is so simple and straightforward that it should deserve more praise. Have been using Linux for a while but realizing the real potential of cat has eluded me until now. cat * > out.mp3 worked like a charm, thanks
    – toraritte
    Oct 8, 2020 at 14:10
  • 1
    what does this do to mp3 tags?
    – cannyboy
    Nov 23, 2021 at 11:08
2

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.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .