Gefällt dir dieser Artikel?

Linux: MP3 Dateien zusammenschneiden

erschienen in der Kategorie Software, am 20.11.2015
Schnatterente
Bei mir kam kürzlich die Frage an, wie man unter Linux mit geringem Aufwand mehrere MP3-Dateien zusammenfügen kann, sodass am Ende nur noch ein großes MP3-File übrig bleibt.

Wie so oft in Sachen Linux gilt hier, wer mit Klickibunti-Programmen anfängt die Audioströme hintereinander zu basteln, kommt auch zum Ziel, aber mit der Konsole geht es doch sehr viel schneller. Und wenn man nur ein paar MP3s zusammenführen will, dann sind dafür auch nur wenige Befehle nötig, die so einfach sind, dass sie eigentlich niemanden überfordern sollten. Mein Appell lautet also wie immer: Habt Mut die Konsole zu benutzen, sie ist euer Freund! ;-)

MP3s zusammenfügen

Der grobe Ablauf lässt sich in drei einfache Schritte gliedern:
  • Die MP3-Dateien aneinanderfügen: Das heißt, man nimmt die Dateien einfach und verschweißt sie zu einer großen Datei.
    Dies ist mit den Konsolentools mp3wrap oder cat möglich. (cat sollte man nur bei Dateien mit gleicher Bitrate verwenden!)
  • Die Länge der MP3-Datei reparieren: Dadurch, dass man die ursprünglichen Dateien einfachen nur aneinandergeklebt hat, ohne irgendwelche dateiformatspezifischen Änderungen vorzunehmen, stimmt die Längeangabe der entstandenen MP3-Datei nicht mehr. Manche Player korrigieren diesen Fehler selbstständig beim Abspielen, andere zeigen eine falsche Dauer für den Track an und wieder andere behandeln die Datei als Audiostream nicht definierter Länge und verwehren folglich das Vor- und Zurückspulen innerhalb der Datei.
    Der Grund für dieses Verhalten besteht darin, dass der Audioplayer beim Einlesen nur den Header der ersten hinzugefügten MP3-Datei findet. Er zeigt daraufhin also die Länge des ersten im Gesamtergebnis enthaltenen Tracks an.
    Um die Längenangabe zu reparieren, kann man ffmpeg verwenden. (Nicht näher betrachtete Alternativen sind vbrfix für MP3s mit variabler Bitrate sowie die MP3-Reparatursuite MP3Diags.)
  • ID3-Tags anlegen: Damit für die MP3-Datei im Player auch ein Titel, ein Interpret, usw. angezeigt wird, sollte sie mit ID3-Tags bestückt werden. Ich habe mich damit begnügt, die ID3-Informationen des ersten ursprünglichen Tracks in die neue Datei zu kopieren.
    Dies ist mit id3cp sehr einfach möglich. Zum Nachbearbeiten eignen sich die meisten Musikplayer, da sie oft eine Funktion zum Bearbeiten der ID3-Tags mitbringen. (Wer die Tags einer ganzen MP3-Sammlung gut und mittels Stapelverarbeitung verwalten will, dem sei hier am Rande die grafische Anwendung Easytag empfohlen.)

Linux Audio-Bearbeitungsprogramme

Da wir schon bei Software-Tipps sind, möchte ich noch kurz auf zwei weitere nützliche Audioanwendungen hinweisen: Audacity und Soundconverter. Audacity ist ein vollwertiges Musikproduktionsprogramm mit vielfältigen Aufnahme- und Bearbeitungsfunktionen. Es kann genutzt werden, um Audioströmezu normalisieren, Fade-Outs einzufügen, sie zu schneiden und vieles mehr. Der Soundconverter ist ein sehr einfach gehaltenes Stapelverarbeitungswerkzeug zum Umwandeln von Audiodateien in andere Formate, also z. B. von *.ogg nach *.mp3. Es kann auch genutzt werden, um die Größe von MP3-Dateien zu reduzieren, indem man sie in einer niedrigeren Qualität abspeichert.

Natürlich handelt es sich bei allen genannten Anwendungen um kostenlose Open-Source-Programme.

MP3s zusammenführen: die Konsolen-Kommandos

Der erste Schritt, das Zusammenfügen der Dateien, kann mit dem Programm mp3wrap erfolgen.
$ mp3wrap ausgabe.mp3 datei1.mp3 datei2.mp3 datei3.mp3 ...

Dies fügt die aufgeführten MP3-Dateien zu einer Gesamtdatei zusammen. mp3wrap hat dabei die Angewohnheit, den angegebenen Ausgabedateinamen noch um den eigenen Programmnamen anzureichern. So heißt die Datei am Ende ausgabe_MP3WRAP.mp3. Das Programm füllt übrigens auch die ID3-Tags mit Eigenwerbung. Das macht aber nichts, die werden im letzten Schritt ohnehin überschrieben.

Schöner ist das Ganze natürlich, wenn man nicht jede Datei einzeln aufführen muss:
$ mp3wrap ausgabe.mp3 *.mp3

Dies fügt alle im Verzeichnis enthaltenen MP3-Dateien zur Ausgabedatei hinzu. Bei der Verarbeitung listet mp3wrap alle Dateien auf der Konsole auf, sodass man kontrollieren kann, ob die Reihenfolge der Dateien auch stimmt.
(Vorsicht ist hier geboten, wenn man mehr als zehn MP3-Dateien zusammenfügen will und die ersten Dateien nicht mit führenden Nullen nummeriert sind. Dann entsteht nämlich, aufgrund alphabetischer Sortierung, die Reihenfolge 10, 1, 20, 2, ...)

Manchmal will man viele MP3-Dateien aus mehreren Ordnern zusammenführen (z. B. bei Hörbüchern, deren Dateien auf Ordner "CD1" "CD2", usw. verteilt sind). Auch hier kommt man mit einem Befehl aus:
$ mp3wrap ausgabe.mp3 */*.mp3



Nachdem man die MP3s nun zusammengeschraubt hat, kommt der zweite Schritt, die Reparatur der entstandenen Gesamtdatei mit ffmpeg:
$ ffmpeg -i ausgabe_MP3WRAP.mp3 -acodec copy repariert.mp3

ffmpeg erstellt eine neue MP3-Datei repariert.mp3. Es erfolgt keine Umwandlung des Audiostroms, dieser wird einfach nur kopiert. Die erzeugte Datei weist einen korrekten MP3-Header mit richtiger Längenangabe auf.


Zum Schluss kopieren wir noch die ID3-Informationen der ersten verwendeten MP3-Datei in die neue Gesamtdatei:
$ id3cp datei1.mp3 repariert.mp3



Damit ist man am Ziel angekommen. Unter Umständen muss man an den ID3-Tags der erzeugten Gesamtdatei repariert.mp3 noch ein paar Kleinigkeiten ändern. Das Zwischenergebnis ausgabe_MP3WRAP.mp3 kann man bedenkenlos löschen.

Die ursprünglichen Quelldateien sollte man besser noch aufheben, bis man sich davon überzeugt hat, dass man auch alle Dateien in der richtigen Reihenfolge zusammengeführt hat.
(Falls das Kind in den Brunnen gefallen ist: Mit mp3splt kann man die Datei wieder splitten. ;-))

Geschnatter

3 Kommentare, selbst mitschnattern << < Seite 1/1 > >>
Jagg, am 20.11.2015 um 16:19 Uhr
Genau andersrum würde es dann wie funktionieren?!

Man hat also eine große mp3 Datei (Hörbuch etc.) und möchte daraus mehrere Teile machen, damit man im Auto leichter "vorspulen" kann?
Anonym, am 20.11.2015 um 16:22 Uhr
@Jagg:
Mit dem in der letzten Zeile verlinkten Programm mp3splt geht das. (Ist halt nur lästig, weil du natürlich selbst die Zeitpunkte festlegen musst, an denen gesplittet werden soll.)

Dazu gibt es auch eine GUI namens mp3splt-gtk.

http://mp3splt.sourceforge.net/mp3splt_page/home.php
Jens, am 24.11.2015 um 17:05 Uhr
Cool, Danke für die Anleitung