Puede hacer esto programáticamente con el demuxer concat de ffmpeg.
Primero, cree un archivo llamado input.txt con líneas como
file '/path/to/input1.mp3'
file '/path/to/input2.mp3'
file '/path/to/input3.mp3'
...etc. Luego, ejecute el siguiente comando ffmpeg:
ffmpeg -f concat -i inputs.txt -c copy output.mp3
Es posible generar input.txt fácilmente con bash for bucle (esto probablemente también se puede hacer con un lote de Windows), asumiendo que desea fusionar los archivos en orden alfabético. Esto coincidirá con cada *.mp3 en el directorio de trabajo, pero se puede modificar fácilmente:
for f in ./*.mp3; do echo "file '$f'" >> inputs.txt; done
## Alternatively
printf "file '%s'\n" ./*.mp3 >> inputs.txt
También es posible hacer todo en una sola línea, evitando la creación de un archivo de lista intermedio con sustitución de procesos:
ffmpeg -f concat -i <(printf "file '%s'\n" ./*.mp3) -c copy output.mp3
Use ffmpeg o una herramienta similar para convertir todos sus archivos MP3 en un formato consistente, por ejemplo,
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
Luego, en tiempo de ejecución, concatene sus archivos:
cat intermediateA.mp3 intermediateB.mp3 > output.mp3
Finalmente, ejecútelos a través de la herramienta MP3Val para corregir cualquier error de transmisión sin forzar una nueva codificación completa:
mp3val output.mp3 -f -nb
(fuente)