[[Vorlage(Archiviert, )]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] }}} [[Inhaltsverzeichnis(1)]] Möchte man viele einzelne MP3-Dateien zu einer einzigen zusammenführen, z.B. weil eine Hörspiel-CD in 20 einzelnen Stücken vorliegt, man das Hörspiel aber lieber in einer einzelnen Datei sichern möchte, so geht dies mit wenigen Kommandozeilenbefehlen recht einfach. Benötigt werden die Programme [:Archiv/avconv:] und '''id3cp'''. = Pakete installieren = Die benötigten Pakete installieren [1]: {{{#!vorlage Paketinstallation libav-tools id3-tools, universe }}} = MP3-Dateien zusammenführen = Zunächst wechselt man in das Verzeichnis, in welchem die einzelnen MP3-Dateien liegen. In diesem Beispiel sei angenommen, dass vier Dateien existieren, die '''Track1.mp3''' - '''Track4.mp3''' heißen. Im Terminal [2] gibt man ein: {{{#!vorlage Befehl cat Track1.mp3 Track2.mp3 Track3.mp3 Track4.mp3 > GESAMT.mp3 }}} Hierdurch werden die vier Tracks in der Datei '''GESAMT.mp3''' zusammengefasst. Fortgeschrittene Nutzer schreiben hierbei übrigens nicht jede Datei persönlich aus, sondern kürzen das Ganze wie folgt ab: {{{#!vorlage Befehl cat Track{1..4}.mp3 > GESAMT.mp3 }}} = Reparatur = Das Zusammenführen der Dateien zerstört für gewöhnlich den Dateiheader, so dass die entstandene Datei z.B. nicht von iTunes abgespielt werden kann. Andere Player hingegen "denken", die Spieldauer der Gesamtdatei sei nur so lang, wie die des zuerst hinzugefügten Stücks (in obigem Beispiel '''Track1.mp3'''). Um diesen Fehler zu beheben, gibt man anschließend ein: {{{#!vorlage Befehl avconv -i GESAMT.mp3 -acodec copy GESAMT_KORRIGIERT.mp3 rm GESAMT.mp3 }}} avconv repariert die Datei und speichert das Ergebnis als '''GESAMT_KORRIGIERT.mp3''' ab. Anschließend wird die nicht mehr benötigte Datei '''GESAMT.mp3''' gelöscht. Jetzt kann man noch optional den ID3-Tag der Originaldatei in die neue Datei übertragen. Das Programm '''id3cp''' ist im Paket '''id3-tools''' enthalten: {{{#!vorlage Befehl id3cp Track1.mp3 GESAMT_KORRIGIERT.mp3 }}} Die Datei '''GESAMT_KORRIGIERTid3-tools.mp3''' ist nun fertig und bereit für die Musiksammlung. = Zenity-Script = Wenn man nicht ständig diese Befehlsfolge eingeben möchte, kann man sich ein entsprechendes [:Zenity:]-Script schreiben. Damit dieses funktioniert, muss [:Zenity:] zuerst installiert werden: {{{#!vorlage Paketinstallation zenity }}} Jetzt legt man eine neue Datei an, die z.B. '''mp3join.sh''' genannt wird, und fügt mit einem Editor [3] folgenden Inhalt ein: {{{#!code bash #! /bin/bash # # Dieses sehr einfache Script zum Zusammenfuehren mehrerer MP3-Dateien in # eine einzige benötigt die Pakete "libav-tools" und "id3-tools" # Unter Ubuntu kann man diese wie folgt nachinstallieren: # sudo apt-get install libav-tools id3-tools # # Quelldateien werden ausgewaehlt und in die Variable QUELLE geschrieben QUELLE=$(zenity --file-selection --text "Welche Dateien sollen verknüpft werden?" --title "Quelldateien auswählen" --multiple) # # # Hat der User wirklich Dateien angegeben? if [ !$QUELLE ]; then echo "Nichts ausgewaehlt... breche ab..." exit 1; fi ZIEL=$(zenity --entry --text "Bitte den Namen und vollständigen Pfad der Zieldatei angeben" --entry-text="Desktop/Ziel.mp3") touch "${ZIEL}" # # # Der Separator (ist hier standardmaessig "|") wird in IFS gespeichert IFS="|" # # ( # Überprüfe, ob /tmp/tmp.mp3 existiert # wenn ja, dann lösche sie... echo "10" echo "# Vorbereitung..." if [ -f /tmp/tmp.mp3 ]; then rm /tmp/tmp.mp3 fi # # Hilfsdatei wird angelegt. touch /tmp/tmp.mp3 echo "30" echo "# Erzeuge neue Datei..." # Alle Dateien per cat miteinander verbinden for arg in ${QUELLE} do echo "${arg}" cat /tmp/tmp.mp3 "${arg}" > /tmp/tmp2.mp3 rm /tmp/tmp.mp3 mv /tmp/tmp2.mp3 /tmp/tmp.mp3 done # # # # echo "60" echo "# Repariere Datei-Header..." # repariere Datei-Header und speichere das Endergebnis nach # ~/Desktop/mp3Join-Ziel.mp3 avconv -i /tmp/tmp.mp3 -acodec copy ~/Desktop/mp3Join-Ziel.mp3 # echo "80" echo "# Speichere Ziel-Datei..." mv ~/Desktop/mp3Join-Ziel.mp3 "$ZIEL" echo "90" echo "# Räume auf..." # lösche Hilfsdatei rm /tmp/tmp.mp3 # # if [ -f "${ZIEL}" ]; then echo "100" echo "# Fertig!" else echo "99" echo "# Keine Schreibberechtigung! Datei konnte nicht angelegt werden!" fi )|zenity --progress --text="Vorgang wird bearbeitet" --percentage=0 # exit 0; }}} Das Script muss nun noch ausführbar gemacht werden: {{{#!vorlage Befehl chmod u+x mp3join.sh }}} Jetzt kann das Script gestartet werden per {{{#!vorlage Befehl ./mp3join.sh }}} Wenn das Script startet, öffnet sich ein Dialogfenster, in welchem man die einzelnen MP3-Dateien auswählen kann. Per Klick auf ''"OK"'' werden die Dateien zusammengeführt, der Header wird repariert, und das Ergebnis auf dem Desktop als '''mp3Join-Ziel.mp3''' gespeichert. = Einen Starter anlegen = Um die Verwendung zu erleichtern, legt man sich noch einen Starter entweder auf dem Desktop oder im Panel an. Dies geht über Rechtsklick [[Vorlage(tasten, rmb)]] -> ''"Starter anlegen..."'' bzw. Rechtsklick [[Vorlage(tasten, rmb)]] -> ''"Zum Panel hinzufügen... -> Benutzerdefinierter Anwendungsstarter"''. Dort macht man folgende Angaben: ||'''Name''': ||mp3join || ||'''Kommentar''': ||Fügt mehrere MP3-Dateien zusammen || ||'''Befehl''': || /PFAD/ZU/mp3join.sh || ||'''Typ''': ||Anwendung || = Links = * [http://lyncd.com/2009/02/how-to-merge-mp3-files/ How to losslessly concatenate / merge MP3 files] {en} - Blogbeitrag, 02/2009 * [:mp3wrap:] - alternatives Programm #tag: Shell, Multimedia, Audiobooks, MP3