Concatenazione di più file .mp3 in un unico file .mp3


46

Come è stato suggerito qui sto usando il catcomando per concatenare diversi file .mp3 in un unico file .mp3.

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

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

o, in questo modo:

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

Ho bisogno di concatenare questi file .mp3 in una sequenza crescente, 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 devo essere sicuro che il comando sopra raccolga i file in una sequenza crescente.

Posso essere sicuro che il comando precedente concatena sempre i file in sequenza crescente?

Grazie signore !

Risposte:


46

catnon è lo strumento giusto per questo lavoro. Il formato MP3 ha tutti i tipi di spazzatura che possono nascondersi all'inizio e alla fine del file e questo deve essere eliminato. mp3wrapè quello che vuoi. Escluderà eventuali metadati nei file e unirà l'audio.

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

Prima di farlo, esegui ls *.mp3per verificare che siano nell'ordine corretto. Quando originariamente ho scritto questa risposta (oltre sei anni fa!) I globi jolly apparentemente non si sono comportati bene, ma penso che lo facciano ora.

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


2
Destra - cat manipolerà il formato di file mp3 "creando un array" (per così dire) di file mp3 all'interno di un singolo file mp3. Ma sembra funzionare se il software del lettore è abbastanza intelligente.

Questo ha funzionato meglio per me, perché gestisce gli mp3 con spazi nel nome del file:find . -maxdepth 1 -iname '*.mp3' -print0 | sort -z | xargs -0 mp3wrap output.mp3
bmaupin

@bmaupin Un punto giusto ma non sono sicuro del perché non stavo solo usando l'espansione jolly di Bash. *.mp3dovrebbe bastare (e funziona con gli spazi).
Oli

Disponibile per mac dal gestore pacchetti brew ! $ brew install mp3wrap.
Rubens,

1
In bash, *.mp3è garantito per preservare l'ordine alfabetico. Se i file sono denominati 09.mp3, 10.mp3, 11.mp3, questo è probabilmente quello che volete. Se i file sono denominati 9.mp3, 10.mp3, 11.mp3, che probabilmente non è ciò che si vuole, ma si può fare `ls *.mp3 | sort -n`.
Jo Liss,

27

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

Volevo semplicemente concatenare permanentemente 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 precedenti
      Vai su http://ffmpeg.org/download.html , scarica una build statica, decomprimila e copia su / 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


ffmpegmanca, ma lo avconvsostituisce: askubuntu.com/questions/432542/…
muru

2
Sì, ho usato avconv per un po ', ma poi avevo bisogno di alcune funzionalità che ffmpeg aveva e avconv no, e da allora non l'ho più usato. In questi giorni sembra una perdita di tempo controllare se avconv ha le funzionalità di cui ho bisogno quando so già che ffmpeg lo fa.
bmaupin

Non esitare a partecipare a questa discussione sulla segnalazione di bug.
Orschiro,

Ho provato questo e non funziona alla grande; prova a passare output.mp3attraverso un mp3vale vedrai tutti i tipi di errori che creeranno problemi di riproduzione in Chrome64 + (vedi bugs.chromium.org/p/chromium/issues/detail?id=794782 e bugs.chromium.org/p/chromium/ numeri / dettagli? id = 806601 # c10 )
Nino Škopac

soluzione fantastica. comunque per normalizzare anche le canzoni?
ar2015,

8

Come precedentemente suggerito, mp3wrapè una buona soluzione. Tuttavia, potrebbe non funzionare tutto il tempo. Per quanto ne so, mp3wrappresuppone 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 quella di decodificare tutti i file mp3 in un formato raw come .wav, concatenarli con un programma simile soxe terminare ricodificando tutto in mp3.


Si noti che la ricodifica dei file mp3 (nota anche come "transcodifica") comporterà una perdita di qualità. Non lo raccomanderei.
Martin Tournoij,

5

Fa un ordinamento alfabetico basato su singoli caratteri. Ciò significa che "01" precede "1", poiché nulla ha un valore inferiore a uno.

Ecco un esempio Ho una directory con file denominati 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 farà; ma devi assicurarti che tutti i tuoi file siano "riempiti" correttamente.

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

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

L'output sarà simile al seguente:

   04
   05
   06
    1
    2
    3

In caso contrario, dovrai riempire i nomi dei file: lo script Bash per riempire i nomi dei file su StackOverflow spiega come farlo.


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

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

Tieni presente che sortordinerà ancora le cose nel modo che ho descritto sopra, dovrai comunque riempire i nomi dei file se non sono uguali in lunghezza.


4

La maggior parte delle persone sta suggerendo mp3wrap, ma ha degli aspetti negativi: il file generato non riporta la sua lunghezza in alcuni giocatori, e quindi non puoi cercare oltre quel punto.

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

mp3cat file1.mp3 file2.mp3 file3.mp3

un'altra possibilità sarebbe sox

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

ma sembra molto lento (forse decodifica e ricodifica l'audio?)



0

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


0

Adoro il commento di bmaupin , ma potrebbe produrre una sorta di numero (versione) naturale usando sort -V:

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

e non devi avere a che fare con caratteri speciali come ' " () [] {}nel nome del file.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.