Unterordner durchsuchen und mp3 joinen

marios774

Neues Mitglied
Thread Starter
Dabei seit
17.03.2022
Beiträge
6
Reaktionspunkte
1
Hallo,
ich habe über die Jahre und unterschiedlichen Betriegssystemen Unmengen an MP3 Hörspielen konvertiert und gesammelt. Nun muss (VW-Mediasystem läuft über) ich diese joinen um die Dateianzahl zu verringern.
Da die in diversen Unterordner liegen suche ich eine Möglichkeit die irgendwie einfach zu joinen.
Code:
Drei Fragezeichen
                    - Folge 1
                                - 001-001.mp3
                                - 001-002.mp3
                    - Folge 200
                                - CD
                                    - 200-001.mp3
                                    - 200-002.mp3
Ninjago
                    - Folge 99

usw.

Ich habe mit dem cat schon mal in einem Ordner gespielt, das würde aber bedeuten, dass ich über 600x den Befehl in jedem Unterorder anwenden müsste.

Danke schonmal für Vorschläge.
Mario
 
Mit cat ist es unsauber, das kann manche Player aus dem Tritt bringen.

Besser du nimmst ffmpeg oder mp3joiner.
Oder mach doch gleich m4a Audiobooks draus.
 
  • Gefällt mir
Reaktionen: dg2rbf
kann ich das mit den Apps auch per Script abarbeiten? Mir ging es ja um einer Arbeitserleichterung. Ich hatte auch schon mit mp3-cutter-joiner probiert. Dort muss ich immer in der Order wechseln Dateien auswählen, join durchführen…warten und den nächste Ordner auswählen. usw.usw.usw…..
Die Geschichte mit m4a … klappt leider nicht.. Meine aktuellen Fahrzeuge verstehen nur klassische MP3.
 
ffmpeg ist ein Kommandozeilen Tool.
Das kannst du natürlich auch im Script verwenden.
So ein Script hat doch bestimmt schon jemand geschrieben, fütter mal Google mit ffmeg mp3 join subdir o.ä.

Edit:
Vielleicht dieses Tool:
https://github.com/dmulholl/mp3cat

Dann musst nur noch den Teil mit dem Ordner abklappern bauen.
 
Zuletzt bearbeitet:
Hi,
Drei Fragezeichen
- Folge 1
- 001-001.mp3
- 001-002.mp3
damit ich das richtig verstehe: Du hast den Ordner "Drei Fragezeichen" mit dem Unterordner "Folge 1" und den beiden Dateien.

Und aus diesen Beiden Mp3s möchtest du eine Datei machen, z.B. "001-001-001-002.mp3", die dann in dem Unterordner "Folge 1" neben den beiden alten Dateien abgelegt wird?
 
damit ich das richtig verstehe: Du hast den Ordner "Drei Fragezeichen" mit dem Unterordner "Folge 1" und den beiden Dateien.
Ja ich habe den Ordner - Drei Fragezeichen- mit den jeweiligen Folgen als Unterorder, teilweise noch mit weiteren Unterordner z.B. CD. Darin liegen jeweils 8-10 MP3.
Mir würde es reichen, das in jedem Ordner (- Drei Fragezeichen - Folge 001 -) die normalen MP3 sowie die JOINED.MP3 liegen würde.

Es geht mir hier primär um das Script wie ich einen Befehl (ffmpeg, mp3cat, cat,....) in diversen Unterordner ausführen kann.
 
Hi,

anbei mal ein Skript:
Bash:
#!/bin/bash
IFS=$'\n'

> DIRS_WITH_MP3.txt

for FILE_WITH_PATH in `find . -type f -name "*.mp3"`
do
        #echo "$FILE_WITH_PATH"
        #FILENAME=$(basename ${FILE_WITH_PATH})
        DIRNAME=$(dirname ${FILE_WITH_PATH})

        echo $DIRNAME >> DIRS_WITH_MP3.txt
        #echo $FILENAME
done

for FILE_PATH in `cat DIRS_WITH_MP3.txt| sort | uniq`
do
        ls $FILE_PATH/*.mp3 | cat > $FILE_PATH/TO_JOIN.txt
done


IFS="$OIFS"
Durch die Leerzeichen ist es nicht arg so trivial find ich, aber mal der Reihe nach:
Das Skript durchsucht alle Verzeichnisse nach MP3-Dateien und speichert alle Verzeichnisse, die welche enthalten, in einer externen Datei. Danach wird in jedem Verzeichnis, welches MP3-Dateien enthält, eine Datei namens TO_JOIN.txt erstellt, die du wiederum nutzen kannst, um mit ffmpeg eine Datei erstellen zu lassen. Die Anleitung von oglimmer erklärt es ganz gut.

Könntest du auch noch skripten, aber das überlass ich dir. :)

Hoffe es hilft. Aber bevor du sowas produktiv nimmst, erstmal testen, denn selbst solche Skripte können Bugs enthalten, die Dateien löschen oder beschädigen.
 
Danke schonmal für die bisherige Hilfe..
Heute bin ich endlich mal dazu gekommen, mir das anzuschauen....

Ich habe das script zu laufen bekommen.. soweit so gut.
So sieht dann die Datei aus..

Code:
./# Wickie Und Die Starken Maenner/01 Der Wettlauf.mp3
./# Wickie Und Die Starken Maenner/02 Der schreckliche Sven.mp3

Ich habe ffmpeg per brew installiert und dann versucht das File TO_JOIN.txt zu nutzen.
Code:
#ffmpeg -f concat -safe 0 -i TO_JOIN.txt -c copy output.mp3

Nun gibt es die Fehlermeldung
Code:
[concat @ 0x7ff045704bc0] Line 1: unknown keyword './#'
TO_JOIN.txt: Invalid data found when processing input

Laut dem Wiki Eintrag sollte die Datei so aussehen..
Code:
file '/path/to/file1.wav'
Also mit dem Wort file und dem Pfad in einfachen Anführungszeichen.
 
  • Gefällt mir
Reaktionen: UnixCoon
Laut dem Wiki Eintrag sollte die Datei so aussehen..
Ja, und warum folgst du dann dem Schema nicht?
Da steht weder file in deiner Datei und auch keine ' .

Das kannst du mit einem Texteditor mittels Suchen/Ersetzen dort rein schreiben.
Oder wartest du jetzt darauf, dass der freundliche Script Ersteller das Script entsprechend anpasst?
 
Oder wartest du jetzt darauf, dass der freundliche Script Ersteller das Script entsprechend anpasst?
Vielen Dank für die Hilfe...

Ich war der Suche nach einer Möglichkeit mir die Arbeit zu erleichtern und anstelle jeden Ordner zu öffnen und die Daten in einem vorhandenen Programm zu laden (z.B. MP3 Cut) und dort zu joinen.

Nun habe ich insgesamt 762 txt Dateien in den Unterordnern, die ich dann auch einzeln per TEXT Editor bearbeiten muss um dann in jedem Unterordner das das Programm ffmpeg auszuführen....

Ich sehe darin noch keine Erleichterung, ggf. kann ja eine OSX Gott mir Erleuchtung bringen.
 
Dein Problem ist also nur verschoben nicht gelöst.

An sich musst du nur so was hier machen:
Code:
find . -iname TO_JOIN.txt -exec ffmpeg -f concat -safe 0 -i {} -c copy output.mp3\;
Allerdings müssen ja erst noch die txt korrigiert werden.
Und der find Befehl braucht etwas tuning.

Mit find und mp3cat könntest dir auch die txt Dateien sparen.
Mit der zsh müsste es auch eventuell ohne find und einer Schleife gehen.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: ruerueka
Hi,

ich hatte übersehen, dass der Inhalt der Datei nicht einfach die Dateinamen enthalten kann, sondern das Keyword "file" inklusive der Single-Quotes enthalten muss:
Perl:
#!/bin/bash
IFS=$'\n'

> DIRS_WITH_MP3.txt

# Findet alle MP3-Dateien im Verzeichnis . und aller Unterverzeichnisse
for FILE_WITH_PATH in `find . -type f -name "*.mp3"`
do
        DIRNAME="$(dirname ${FILE_WITH_PATH})"
        echo $DIRNAME >> DIRS_WITH_MP3.txt
done

# Erstellt in jedem Verzeichnis, welches MP3s enthält, eine Datei namens "TO_JOIN", die ffmpeg verarbeiten kann.
for FILE_WITH_PATH in `cat DIRS_WITH_MP3.txt| sort | uniq`
do
        ls $FILE_WITH_PATH/*.mp3 | cat > $FILE_WITH_PATH/TO_JOIN.txt

        #Fuegt in die erstellte Datei das Keyword "file" inklusive der Single-Quotes ein
        sed -i '' 's/^/file '\''/g;s/$/'\''/g' $FILE_WITH_PATH/TO_JOIN.txt

        # Hier ffmpeg einfügen
        ffmpeg -f concat -safe 0 -i $FILE_WITH_PATH/TO_JOIN.txt -c copy $FILE_WITH_PATH/output.mp3

done


IFS="$OIFS"
D.h. die erstellt TO_JOIN.txt sollte nun mit ffmpeg funktionieren.

Natürlich ohne Gewähr, und selbstverständlich wird dir das ein richtiger Guru in einem One-Liner zusammenbasteln können, allerdings wird das dann noch weniger wartbar sein als jetzt schon. UND du solltest immer ein Backup deiner Originaldateien haben, ich habe das zwar getestet, aber da du ja offensichtlich alles an mögliche Sonderzeichen in deinen Dateinamen hast kann ich Seiteneffekte nicht ausschließen.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: ruerueka
Zurück
Oben Unten