Concatenazione di diversi file .mp3 in una .mp3

Come è stato suggerito, sto usando il comando cat per concatenare diversi file .mp3 in un file .mp3.

Immagina, ho seguito i file .mp3 nella cartella corrente:

 001001.mp3 001002.mp3 001003.mp3 001004.mp3 001005.mp3 

o, come questo:

 096001.mp3 096002.mp3 096003.mp3 096004.mp3 

Ho bisogno di concatenare questi file .mp3 nella sequenza ascendente, cioè 001001.mp3+001002.mp3+001003.mp3+etc.

Per unire questi file .mp3 in uno sto eseguendo il seguente comando nella cartella corrente:

 cat *.mp3 > final.mp3 

Ho testato il file .mp3 finale ed è quello che mi aspetto, ma ho bisogno di essere sicuro che il comando precedente prelevi i file nella sequenza ascendente.

Posso essere sicuro che il comando precedente concateni sempre i file nella sequenza crescente?

Grazie signore !

cat non è lo strumento giusto per questo lavoro. Il formato MP3 ha tutti i tipi di cianfrusaglie che possono nascondersi nella parte anteriore e alla fine del file e questo deve essere sgradevole. mp3wrap è quello che vuoi. Escluderà qualsiasi metadata nei file e attaccherà l’audio.

 sudo apt-get install mp3wrap mp3wrap output.mp3 *.mp3 

Prima di farlo, esegui ls *.mp3 per verificare che siano nell’ordine corretto. Quando ho originariamente scritto questa risposta (oltre sei anni fa!) I caratteri jolly apparentemente non si comportavano bene, ma penso che lo facciano ora.

Potrebbe essere necessario rinominare i file se, ad esempio, sono numerati ma non riempiti a zero, {1-11}.mp3 sarebbe ordinato per 1 10 11 2 3 4 5 6 7 8 9 . Questo può essere risolto facilmente .

mp3wrap sembra essere una soluzione abbastanza decente, ma quando ho riprodotto il file risultante, il timestamp non era corretto. Sembra che l’mp3wrap sia usato al meglio quando si uniscono gli mp3 in un file che si sa che vorrai suddividere in seguito.

Volevo semplicemente concatenare in modo permanente alcuni mp3 insieme. Ho finito per usare ffmpeg per concatenare i file:

  1. Innanzitutto, installa ffmpeg

    • Ubuntu 15.04+

       sudo apt install ffmpeg 
    • Ubuntu 14.10 e seguenti
      Vai a http://ffmpeg.org/download.html , scarica una delle build statiche, decomprimila e copia in / usr / local / bin

  2. ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy output.mp3

Maggiori informazioni: https://trac.ffmpeg.org/wiki/Concatenate#protocol
https://superuser.com/a/314245

Come precedentemente suggerito, mp3wrap è una buona soluzione. Tuttavia, potrebbe non funzionare tutto il tempo. Per quanto ne so, mp3wrap presuppone che tutti i file di input abbiano le stesse caratteristiche come VBR vs CBR, bitrate e così via. Se questa ipotesi non viene soddisfatta, è probabile che fallisca. In tal caso, l’unica soluzione sarebbe decodificare tutti i file mp3 in un formato raw come .wav , concatenarli con un programma come sox e terminare ricodificando tutto in mp3.

Fa un ordinamento alfabetico basato su singoli personaggi. Ciò significa che “01” viene prima di “1”, dal momento che nulla ha un valore inferiore a uno.

Ecco un esempio. Ho una directory con i file 1, 2, 3, 04, 05 e 06. Sono file di testo che contengono i loro nomi di file:

 test$ cat * 04 05 06 1 2 3 

Quindi, , lo sarà; ma devi assicurarti che tutti i tuoi file siano “imbottiti” correttamente.

Questa elegante linea di script bash ti permetterà di confrontare visivamente i nomi dei file, rendendo molto facile individuare eventuali errori:

 for f in $(ls); do printf "%05s\n" "$f"; done 

Il risultato sarà simile a questo:

  04 05 06 1 2 3 

Se non lo sono, è necessario eseguire il rilievo dei nomi dei file: lo script Bash per il rilievo dei nomi dei file su StackOverflow spiega come farlo.


Modificare. Vota per la risposta di Oli, è molto meglio. : P
Lascerò il mio perché aggiunge qualcosa, ma dovresti usare la sua soluzione,

 mp3wrap output.mp3 `ls -1 *.mp3 | sort` 

Tieni presente che sort sortirà le cose nel modo descritto sopra, dovrai comunque eseguire il pad dei nomi dei file se non sono uguali in lunghezza.

Ho trovato il falegname di servizio online che funziona molto bene e conserva il timestamp corretto (contrariamente a mp3wrap).

La maggior parte delle persone suggerisce il formato mp3wrap , ma ha mp3wrap negativi: il file generato non riporta la sua intera lunghezza in alcuni giocatori, e quindi non è ansible cercare oltre quel punto.

mp3cat fa il lavoro velocemente e bene, per quanto posso dire. Può essere scaricato in http://mulholland.xyz/dev/mp3cat/ e utilizzato come segue:

 mp3cat file1.mp3 file2.mp3 file3.mp3 

un’altra possibilità sarebbe il sox

 sudo apt-get install sox libsox-fmt-mp3 sox file1.mp3 file2.mp3 target.mp3 

ma sembra molto lento (può decodificare e ricodificare l’audio?)

Potresti provare a utilizzare un programma di editing audio dedicato (come Audacity )

Adoro il commento di bmaupin , eppure potrebbe produrre un tipo naturale di numeri (versione) usando sort -V :

 find . -maxdepth 1 -iname '*.mp3' -print0 | sort -Vz | xargs -0 mp3wrap ../tmp.mp3 

e non devi occuparti di caratteri speciali come ' " () [] {} nel nome del file.