Puoi farlo in modo programmatico con il demuxer concat di ffmpeg.
Per prima cosa, crea un file chiamato inputs.txt con righe come
file '/path/to/input1.mp3'
file '/path/to/input2.mp3'
file '/path/to/input3.mp3'
...eccetera. Quindi, esegui il seguente comando ffmpeg:
ffmpeg -f concat -i inputs.txt -c copy output.mp3
È possibile generare facilmente inputs.txt con un bash for loop (probabilmente questo può essere fatto anche con un batch for loop di Windows), supponendo che tu voglia unire i file in ordine alfabetico. Questo corrisponderà a ogni *.mp3 nella directory di lavoro, ma può essere facilmente modificato:
for f in ./*.mp3; do echo "file '$f'" >> inputs.txt; done
## Alternatively
printf "file '%s'\n" ./*.mp3 >> inputs.txt
È anche possibile fare tutto in una riga, evitando la creazione di un file di elenco intermedio con sostituzione del processo:
ffmpeg -f concat -i <(printf "file '%s'\n" ./*.mp3) -c copy output.mp3
Usa ffmpeg o uno strumento simile per convertire tutti i tuoi MP3 in un formato coerente, ad es.
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
Quindi, in fase di esecuzione, concatena i tuoi file insieme:
cat intermediateA.mp3 intermediateB.mp3 > output.mp3
Infine, eseguili tramite lo strumento MP3Val per correggere eventuali errori di streaming senza forzare una ricodifica completa:
mp3val output.mp3 -f -nb
(fonte)