• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[Gelöst]m3u in ein mp3 zusammenfassen?

gm2601

Advanced Hacker
Hi Gurus,

geht das?
Falls ja, wie?

:???: Ich habe nicht die geringste Ahnung, welche Angaben ich noch machen müsste, es handelt sich um 180 teils sehr kleine files.
 

lOtz1009

Moderator
Teammitglied
1. alle ID3-Tags aus den Dateien löschen (nicht zwingend nötig, kann aber ansonsten zu falsch angezeigter Länge führen)
2. cat *.mp3 > neu.mp3
 
OP
gm2601

gm2601

Advanced Hacker
Danke Dir!

Das hat flugs geklappt, auch wenn ich mich wunderte, dass "cat *.mp3 > neu.mp3" nicht zigmal ein kleines file "neu.mp3" erzeugte, aber leider wurden die mp3-dateien nicht in ihrer zeitlichen Reihenfolge, sondern einfach (vermutlich) alphabetisch verwurstet, was dem musikalischen Gesamtwerk nicht wirklich gerecht wird. :(

Lade ich die Liste.m3u in Amarok, so klingts wie gewohnt und das sollte das dicke mp3-file eigentlich auch tun..... so zumindest meine Wunschvorstellung.
 

lOtz1009

Moderator
Teammitglied
Dazu müsste man wissen, wie die .m3u genau aufgebaut ist. Dann kann dir bestimmt jemand auf Konsolenebene zu einer passenden Schleife verhelfen.
Vielleicht kennt auch noch wer ein grafisches Tool :)
 
OP
gm2601

gm2601

Advanced Hacker
Das "Einfachbedientool" dachte ich in streamtuner gefunden zu haben.... es ist ein paar Jahre her, dass ich damit mal erfolgreich war.

Die Wiedergabeliste ist dadurch entstanden, dass ich "~/Stream/..../viele_kleine_mp3" in Amarok packte, vorne und hinten von Überflüssigem befreite und dann abspeicherte.
 

Faxxon

Member
Mp3 klingt nach "schmutzigen" Dateinamen, deshalb mit printf %q:
Code:
bash -c "cat $(while read f; do [ ${f:0:1} = "#" ] || printf "%q " "$f"; done <LISTE.M3U)" >ASSEM.MP3
 
OP
gm2601

gm2601

Advanced Hacker
Danke, diese Syntax bringt zumindest die Fehlermeldungen "Datei oder Verzeichnis nicht gefunden" in einer vernünftig erscheinenden Reihenfolge.
Alle files enthalten, wie unterstellt, "schmutzige" Zeichen wie zB " - "[leer-leer], enden aber alle mit mp3. Meine Versuche ein "*.mp3" einzubauen scheiterten.
Code:
Anfang der filelist
-rw-r--r-- 1 guenter users 320K  5. Mär 10:06  - Das Konzert am Vormittag (4).mp3
-rw-r--r-- 1 guenter users 602K  5. Mär 10:07 BR - KLASSIK- Das Klassikprogramm des Bayerischen Rundfunks (3).mp3
.....

Anfang des m3u-files
#EXTM3U
#EXTINF:20000,Das Konzert am Vormittag
../Stream/BR-Klassik/ - Das Konzert am Vormittag (4).mp3
#EXTINF:38000,KLASSIK: Das Klassikprogramm des Bayerischen Rundfunks
../Stream/BR-Klassik/BR - KLASSIK- Das Klassikprogramm des Bayerischen Rundfunks (3).mp3
....
Software is the real hard ware... :???:...
 

abgdf

Guru
Wenn es "nur" Leerzeichen und keine Single-Quotes sind, könnte sowas vielleicht helfen:
Code:
perl -e 'BEGIN{while($a=<>){chomp($a);push(@b,"'\''$a'\''")}}END{for(@b){print"$_\n"}}' m3ufile.m3u
 

Faxxon

Member
gm2601 schrieb:
Danke, diese Syntax bringt zumindest die Fehlermeldungen "Datei oder Verzeichnis nicht gefunden" in einer vernünftig erscheinenden Reihenfolge.
Du hast da relative Pfade drin. Bist Du sicher, dass Du im richtigen Verzeichnis warst?

Poste doch mal, wie Du die Befehlszeile aufgerufen hast (mit 10 Fehlermeldungen und Deinem Prompt).
 

SUSEDJAlex

Advanced Hacker
Ich will ja nicht unhöflich sein....

Aber eines vergesst ihr bei der Sache:

Datei.m3u = Playlist , wonach die einzelnen MP3-Files abgespielt werden

Ich würde die Files in Audacity laden und das Ganze als Neu.MP3 abspeichern.

Wäre das ein guter Vorschlag ?

LG SUSEDJAlex
 
OP
gm2601

gm2601

Advanced Hacker
abgdf schrieb:
Wenn es "nur" Leerzeichen und keine Single-Quotes sind, könnte sowas vielleicht helfen:
Code:
perl -e 'BEGIN{while($a=<>){chomp($a);push(@b,"'\''$a'\''")}}END{for(@b){print"$_\n"}}' m3ufile.m3u

Nicht dass ich behaupten möchte, die Syntax auch nur im Ansatz zu verstehen, sie läuft durch und zeigt jede Zeile des files "m3ufile.m3u" mit einem alleinstehenden Gänsebein vorne und hinten. So also:
ursprüngliche Zeile <---> 'ursprüngliche Zeile'

Faxxon schrieb:
Du hast da relative Pfade drin. Bist Du sicher, dass Du im richtigen Verzeichnis warst?
Eigentlich schon, das auf absolute Pfade zu trimmen müsste ich schaffen, aber heute bin ich etwas knapp mit meiner Zeit.

SUSEDJAlex schrieb:
Ich würde die Files in Audacity laden und das Ganze als Neu.MP3 abspeichern.
Der Gedanke war mir mit dem m3u-file schon gekommen, aber das "frisst" Audacity nicht und für 180 kleine mp3-files war mir der Aufwand dann zu groß.
Gibt es eine Möglichkeit ein gesamtes Verzeichnis mit mp3-files in Audacity zu laden??? "> Audacity *mp3" ... für 180 files kann ich mir nicht so recht vorstellen.
 

Faxxon

Member
gm2601 schrieb:
Eigentlich schon, das auf absolute Pfade zu trimmen müsste ich schaffen, aber heute bin ich etwas knapp mit meiner Zeit.
Wenn Du nicht komplett antworten magst - Dein Problem. Von Trimmen habe ich nichts geschrieben.
 

josef-wien

Ultimate Guru
gm2601 schrieb:
Das hat flugs geklappt, auch wenn ich mich wunderte, dass "cat *.mp3 > neu.mp3" nicht zigmal ein kleines file "neu.mp3" erzeugte, aber leider wurden die mp3-dateien nicht in ihrer zeitlichen Reihenfolge, sondern einfach (vermutlich) alphabetisch verwurstet, was dem musikalischen Gesamtwerk nicht wirklich gerecht wird.
gm2601 schrieb:
Anfang des m3u-files
#EXTM3U
#EXTINF:20000,Das Konzert am Vormittag
../Stream/BR-Klassik/ - Das Konzert am Vormittag (4).mp3
#EXTINF:38000,KLASSIK: Das Klassikprogramm des Bayerischen Rundfunks
../Stream/BR-Klassik/BR - KLASSIK- Das Klassikprogramm des Bayerischen Rundfunks (3).mp3
Die Datei wiedergabeliste.m3u (da mußt Du Deinen Namen verwenden) muß in jenem Verzeichnis sein, von dem die relativen Pfade ausgehen, und in diesem Verzeichnis führst Du
Code:
grep -v ^# wiedergabeliste.m3u | while read "datei" ; do cat "$datei" >> ausgabe.mp3 ; done
aus. Anführungszeichen dürfen in den einzelnen Dateinamen nicht vorkommen.

P. S. Bei mir entspricht das Ergebnis 1:1 dem Ergebnis des Befehls von Faxxon (bei 5 Dateien mit Leerzeichen und Umlauten in den Dateinamen), Du solltest
gm2601 schrieb:
nocheinmal überprüfen.
 

abgdf

Guru
gm2601 schrieb:
abgdf schrieb:
Wenn es "nur" Leerzeichen und keine Single-Quotes sind, könnte sowas vielleicht helfen:
Code:
perl -e 'BEGIN{while($a=<>){chomp($a);push(@b,"'\''$a'\''")}}END{for(@b){print"$_\n"}}' m3ufile.m3u

Nicht dass ich behaupten möchte, die Syntax auch nur im Ansatz zu verstehen, sie läuft durch und zeigt jede Zeile des files "m3ufile.m3u" mit einem alleinstehenden Gänsebein vorne und hinten. So also:
ursprüngliche Zeile <---> 'ursprüngliche Zeile'
Ja, das ist korrekt.
Entschuldigung, ich glaube, ich habe falsch gedacht. Das hier müßte schon genügen:
Code:
cat m3ufile.m3u | while read i; do cat "$i" >> out.mp3; done
 
OP
gm2601

gm2601

Advanced Hacker
Faxxon schrieb:
gm2601 schrieb:
....aber heute bin ich etwas knapp mit meiner Zeit.
Wenn Du nicht komplett antworten magst - Dein Problem. Von Trimmen habe ich nichts geschrieben.
Zeitknappheit hat mit "mögen" nichts zu tun...und relative Pfade -- ../Restpfad/Datei ist meiner Erinnerung nach ein relativer Pfad-- sind anderen hier auch aufgestoßen, ergo habe ich mich auch daran mal gemessen.

abgdf schrieb:
gm2601 schrieb:
ursprüngliche Zeile <---> 'ursprüngliche Zeile'
Ja, das ist korrekt.
Entschuldigung, ich glaube, ich habe falsch gedacht. Das hier müßte schon genügen:
Code:
cat m3ufile.m3u | while read i; do cat "$i" >> out.mp3; done

josef-wien schrieb:
Ja, aber es produziert im Gegensatz zu meiner Variante pro Kommentarzeile eine Fehlermeldung
...Ja, aber soweit ich das sehe, nur bei den Zeilen, die KEIN "mp3" enthalten.... und somit:


THE WINNER IS: abgdf !!!! :thumbs:
denn sein out.mp3 enthält die gesamte C-Dur Sinfonie von Franz Schubert, Deutsch-Verzeichnis 944, wie ich sie kenne und schätze.
Es steht mir nicht zu, zu beurteilen, ob mein "trimmen" auf und in allen beteiligten files auf absolute Pfade --was mich schon mal Stunden kosten kann-- darauf Einfluss hatte.

Mein Dank geht an alle, die sich meines Problems annahmen.
huldig.gif
 
Oben