Wie füge ich viele MP3-Dateien zusammen?

59

Wenn Sie bei Google nach Möglichkeiten suchen, wie Sie viele MP3-Dateien zusammenfügen oder zusammenführen, sollten Sie diese einfach catzusammenfügen.

Das könnte "funktionieren", aber es ist offensichtlich nicht die richtige Vorgehensweise, da jeder Header und jeder Satz von IDv3-Tags auch verkettet werden.

Gibt es ein Linux-Programm, mit dem sich viele MP3-Dateien per Skript verbinden / zusammenführen lassen?

Kann mplayer / mencoder / ffmpeg das?

Sandra
quelle

Antworten:

79

Dies verkettet zwei MP3-Dateien und die resultierenden Metadaten sind die der ersten Datei:

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

Dies liegt daran, dass für ffmpeg der gesamte "concat:" - Teil eine einzelne "Eingabedatei" ist und die Metadaten der ersten verketteten Datei sind. Wenn Sie stattdessen Metadaten aus der zweiten Datei verwenden möchten, müssen Sie sie als Dummy-Eingabedatei hinzufügen und die Metadaten der Ausgabe zuordnen:

ffmpeg -i "concat:file1.mp3|file2.mp3" -i file2.mp3 -acodec copy test.mp3 -map_metadata 0:1

Wenn Sie Ihre Metadaten aus den beiden Metadaten erstellen möchten, müssen Sie dies von Hand tun. Sie können die Metadaten einer Datei mit sichern

ffmpeg -i file1.mp3 -f ffmetadata file1.metadata

Nachdem Sie beide Metadaten gesichert und neue Metadaten erstellt haben, können Sie sie mit der Ausgabedatei hinzufügen -metadataund das Kopieren von Metadaten deaktivieren, indem Sie eine -map_metadataZuordnung von einer negativen Eingabedateinummer festlegen. Dies setzt einen Namenswert und keine anderen Metadaten:

ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy -metadata "title=Some Song" test.mp3 -map_metadata 0:-1
Ambroz Bizjak
quelle
Zu Ihrer Information ist eine bestimmte Version von ffmpeg erforderlich. Wenn angezeigt wird, dass die Datei nicht gefunden wurde, aktualisieren Sie sie und führen Sie sie erneut aus
Sameer
Funktioniert gut in ffmpeg 0.10.4 in Gentoo. Was benutzt du? Sind Sie sicher, dass Sie den Befehl nicht falsch eingegeben haben?
Ambroz Bizjak
1
Ich wollte nur ein paar Dinge für andere klarstellen: Bedeutet, -acodecdass Audio-Codec verwendet wird und copybedeutet, dass nur Muxing und Demuxing stattfinden, aber kein Encoding / Transcoding (dh sehr schnell und kein Qualitätsverlust)
Housemd
1
Es wäre großartig, wenn es ein GUI-Programm gäbe, mit dem ich mehrere Dateien ziehen und ablegen kann (z. B. chronologisch nach Aufzeichnungen sortiert und möglicherweise einige Dateien bearbeitet), und dann eine Datei ausgeben kann.
James Ray
1
Dies ist eine gute Antwort. In fast allen Fällen weist die resultierende MP3-Datei jedoch eine kurze Lücke (unter einer Sekunde) zwischen den Verknüpfungspunkten auf. Wenn Sie also versuchen, MP3-Titel zusammenzuführen, um ein nahtloses Wiedergabealbum / -set / -was auch immer zu erstellen, funktioniert dies nicht richtig.
Die Eidechse
13

Mp3Wrap - Befehlszeilenprogramm, das mehrere MP3-Dateien in eine einzige abspielbare MP3-Datei umschließt, ohne Dateinamen oder ID3-Informationen zu verlieren und ohne Neukodierung. Unterstützt auch das Archivieren von Nicht-Audiodaten wie Wiedergabelisten, Infodateien und Titelbildern im MP3-Format. Diese Dateien können später entpackt werden (zB mit mp3splt); gewöhnliche MP3-Decoder können den gesamten Audio-Stream als einen langen Track abspielen.

lig
quelle
1
Vielen Dank für diese Empfehlung. Viel leichtere / einfachere Lösung als ffmpeg, da ich mehr als 100 MP3s kombiniert habe und die Option wollte, wieder auf Originale aufzuteilen.
Joshbaptiste
Diese Eigenschaft funktioniert nicht mehr. Versuchen Sie, einige Dateien zu verketten, und überprüfen Sie die Ausgabedatei darin. mp3valEs werden Synchronisierungsfehler gemeldet. Dies bedeutet, dass es nach dem ersten Block in Chrome 64+ nicht wiedergegeben wird (siehe bugs.chromium.org/p/chromium/issues/detail?id=794782 und bugs.chromium.org/p/chromium/issues/detail?id) = 806601 # c10 )
Housemd
Scheint nicht unter Windows zu funktionieren. Keine Metadaten erhalten.
Gruber
9

Dies verkettet einen Ordner voller MP3 in eine einzelne MP3-Datei:

1) Speichern Sie eine Liste der zu verkettenden MP3-Dateien, z.

$ cat mylist.txt
file '/tmp/01.mp3'
file '/tmp/02.mp3'
file '/tmp/03.mp3'
file '/tmp/04.mp3'
file '/tmp/05.mp3'
file '/tmp/06.mp3'
file '/tmp/07.mp3'

2) Führen des folgenden Befehls ( -safe 0ist nicht erforderlich , wenn mylist.txt relative Pfade verwendet stattdessen ):

$ ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp3
Miles Wolbe
quelle
3

Wenn Sie alle MP3-Dateien des aktuellen Verzeichnisses zusammenfassen möchten:

function join_by { local IFS="$1"; shift; echo "$*"; }
files=(*.mp3)
ffmpeg -i "concat:`join_by "|" $files`" -acodec copy output.mp3
hansaplast
quelle
0

Wenn Sie Skripte benötigen, ist es wahrscheinlich besser, die ffmpeg-Lösung zu verwenden. Wenn Sie jedoch jemals nur eine Anwendung für solche Aufgaben benötigen, können Sie Audacity ausprobieren . Es ist Open Source und plattformübergreifend. Ich habe es nicht verwendet, um MP3s zu verbinden, aber ich habe es verwendet, um Abschnitte aus einem MP3 zu schneiden und sie am Ende auszublenden. Ich bin bereit zu wetten, dass Sie MP3s zusammenfügen und sie damit auch überblenden können.

Brandon
quelle
4
Audacity arbeitet meines Wissens mit den unverarbeiteten Sounddaten, und die Verkettung von MP3s mit diesen führt zu einer Verschlechterung aufgrund von Transcodierung.
Ambroz Bizjak
0

zsh:

audio-join() ffmpeg -i "concat:${(j:|:)@[2,-1]}" -acodec copy $1

audio-join output.mp3 *.mp3
Glückliches Gesicht
quelle
Wir erwarten, dass die Antworten Erklärungen enthalten. (Nicht alle Antworten auf dieser Seite sind gute Beispiele.)
Scott
0

Basierend auf der Antwort von Miles Wolbe ist hier ein Einzeiler, der für mich funktioniert hat:

ls *.mp3 | \
    sed -e "s/\(.*\)/file '\1'/" | \
    ffmpeg -protocol_whitelist 'file,pipe' -f concat -i - -c copy output.mp3
Andy Bileam
quelle