Serve FFmpeg con encoder libmp3lame: su Debian/Ubuntu installa ffmpeg. Metti prima.mp3 e seconda.mp3 nella cartella di lavoro; gli esempi seguenti presumono 30 secondi per ciascun file.
Un fade attenua l’inizio o la fine di una traccia; non è un crossfade, che sovrappone due brani. Con due file della durata di 30 secondi ciascuno, questo esempio applica due secondi di fade-in e fade-out a ogni traccia, quindi le concatena:
ffmpeg -n -i "prima.mp3" -i "seconda.mp3" -filter_complex \
"[0:a]aresample=44100,aformat=channel_layouts=stereo,asetpts=PTS-STARTPTS,afade=t=in:st=0:d=2,afade=t=out:st=28:d=2[a];[1:a]aresample=44100,aformat=channel_layouts=stereo,asetpts=PTS-STARTPTS,afade=t=in:st=0:d=2,afade=t=out:st=28:d=2[b];[a][b]concat=n=2:v=0:a=1[out]" \
-map "[out]" -c:a libmp3lame -q:a 2 "unito.mp3"-n impedisce di sovrascrivere un output esistente. Per durate diverse, imposta l’inizio del fade-out a durata meno due secondi: 28 non significa “28 secondi a volume pieno”. La ricodifica MP3 comporta perdita di qualità; conserva gli originali. L’encoder libmp3lame deve essere disponibile nella tua build.
Puoi leggere la durata con ffprobe, come nell’esempio PHP. La vecchia ricetta SoX con fade t 2 28 2 non descriveva correttamente una traccia di 30 secondi: il parametro centrale è il punto finale del fade-out.
Misura e verifica
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "prima.mp3"
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "unito.mp3"Controlla anche la seconda traccia prima di scegliere il suo fade-out. Con due tracce da 30 secondi l’output deve durare circa 60 secondi, con una piccola tolleranza per il padding MP3. Ascolta inizio, passaggio intorno a 30 secondi e fine: le due tracce sfumano separatamente, senza sovrapposizione.