Vous pouvez le faire par programmation avec le démultiplexeur concat de ffmpeg.
Tout d'abord, créez un fichier appelé inputs.txt avec des lignes comme
file '/path/to/input1.mp3'
file '/path/to/input2.mp3'
file '/path/to/input3.mp3'
...etc. Ensuite, exécutez la commande ffmpeg suivante :
ffmpeg -f concat -i inputs.txt -c copy output.mp3
Il est possible de générer facilement inputs.txt avec un bash for boucle (cela peut probablement être fait avec un lot Windows pour la boucle également), en supposant que vous souhaitez fusionner les fichiers dans l'ordre alphabétique. Cela correspondra à chaque *.mp3 dans le répertoire de travail, mais il peut être facilement modifié :
for f in ./*.mp3; do echo "file '$f'" >> inputs.txt; done
## Alternatively
printf "file '%s'\n" ./*.mp3 >> inputs.txt
Il est aussi possible de faire le tout sur une seule ligne, en évitant la création d'un fichier liste intermédiaire avec substitution de process :
ffmpeg -f concat -i <(printf "file '%s'\n" ./*.mp3) -c copy output.mp3
Utilisez ffmpeg ou un outil similaire pour convertir tous vos MP3 dans un format cohérent, par exemple
ffmpeg -i originalA.mp3 -f mp3 -ab 128kb -ar 44100 -ac 2 intermediateA.mp3
ffmpeg -i originalB.mp3 -f mp3 -ab 128kb -ar 44100 -ac 2 intermediateB.mp3
Ensuite, lors de l'exécution, concaténez vos fichiers :
cat intermediateA.mp3 intermediateB.mp3 > output.mp3
Enfin, exécutez-les via l'outil MP3Val pour corriger les erreurs de flux sans forcer un réencodage complet :
mp3val output.mp3 -f -nb
(source)