This will concatenate two mp3 files, and the resulting metadata will be that of the first file:
ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy output.mp3
This is because, for ffmpeg, the whole "concat:" part is a single "input file", and its metadata will be of the first concatenated file. If you want to use metadata from the second file instead, you have to add it as a dummy input file and map its metadata to that of the output:
ffmpeg -i "concat:file1.mp3|file2.mp3" -i file2.mp3 -acodec copy test.mp3 -map_metadata 0:1
If you want to construct your metadata from the two metadatas, you'll have to do it by hand. You can dump a file's metadata with
ffmpeg -i file1.mp3 -f ffmetadata file1.metadata
After dumping both metadatas and constructing new metadata, you can add it to the output file with -metadata
, and you can disable metadata copying by setting a -map_metadata
mapping from a negative input file number. This sets a name value and no other metadata:
ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy -metadata "title=Some Song" test.mp3 -map_metadata 0:-1
https://trac.ffmpeg.org/wiki/Concatenate – DmitrySandalov – 2015-04-08T23:52:13.597
1Just wanted to clarify a few things for others:
-acodec
means that audio codec will be used andcopy
mean that there will only be muxing and demuxing, but not encoding/transcoding (i.e. very fast and no quality loss) – Housemd – 2018-02-04T05:28:20.257When several files have to be concatenated, as in the original question, the following snippet might come in handy to construct the string "file1.mp3|file2.mp3|file3.mp3"etc:
s=""; for i in file*.mp3; do s="$s|$i"; done; echo ${s:1}
– Immanuel Weihnachten – 2018-03-03T23:53:17.4431It would be great if there was a GUI program where I can drag and drop multiple files (e.g. sorted chronologically for recordings recorded sequentially, and perhaps some files edited) and it will then output one file. – James Ray – 2018-11-15T04:13:29.447
1This is a good answer, however in almost every case, the resulting MP3 file has a short (sub-second) gap between where the files were joined. So if you're trying to merge MP3 tracks to create a seamless playback album / set / whatever, this doesn't work quite right. – The Lizard – 2018-12-11T17:59:00.877
FYI this requires a certain version of ffmpeg. If it says file not found concat... try upgrading and running it again – Sameer – 2012-09-09T23:14:01.613
Works fine in ffmpeg 0.10.4 in Gentoo. What are you using? Are you sure you haven't just mistyped the command? – Ambroz Bizjak – 2012-09-10T00:05:29.090
Ambroz I was saying that I had an old version and had to upgrade, then it worked. – Sameer – 2012-09-14T20:58:06.127
Typing this in a DOS box in XP doesn't work: "'file2.mp3' is not recognized as an internal or external command, operable program or batch file". Is the command Linux-specific? – OverTheRainbow – 2012-10-18T16:54:29.710
@OverTheRainbow the argument is supposed to be "concat:file1.mp3|file2.mp3", without the backslash. The backslash is an escape character to prevent the unix shell from treating | as a pipe. I've changed it to use double quotes instead. – Ambroz Bizjak – 2012-10-19T21:19:57.777
It's worth noting the mp3s have to have the same formats - I had one mp3 at 16000hz and another at 44000hz - they merged without error, didnt play - it wasn't until I used mp3val to see the issues and I had to re-encode my source files - then they merged fine – Rob – 2013-10-28T13:37:51.843