ubuntuusers.de

Dateiliste aus Script-Variable an mp3wrap übergeben

Status: Gelöst | Ubuntu-Version: Ubuntu 21.04 (Hirsute Hippo)
Antworten |

Shrotty

Anmeldungsdatum:
11. Mai 2021

Beiträge: Zähle...

Hallo Zusammen!

Ich baue mir gerad ein bash-Script mit dem ich Hörbücher verarbeiten kann. Einzelne MP3's entsprechend Kapiteln zusammenfügen. Den jeweiligen Kapitelstart hole ich mir aus einem vorher angepaßten MP3-Tag. Es funktioniert soweit auch, daß das Script durch die teilweise hunderte von Dateien durchläuft und ich mir in einer Variablen eine Dateiliste pro Kapitel aufbaue. Der erste Eintrag ist die Zieldatei die mp3wrap gerne hätte und danach folgen successive die einzelnen Dateien aus denen das Kapitel besteht.

In der Variable ist folgendes festgehalten (ein kurzes Kapitel):

1
"../002 - Kapitel 1.mp3" "Perry Rhodan - Silber Edition - 015 - Track 002.mp3" "Perry Rhodan - Silber Edition - 015 - Track 003.mp3"

Wenn ich nun im Script versuche mp3wrap die Liste zu übergeben

1
mp3wrap $DATEILISTE

gibt mir mp3wrap seine Hilfe-Seite aus. Ich hab auch schon ${DATEILISTE} probiert, aber ohne Erfolg.

Wenn ich ihm in der Shell die Dateiliste mit den Anführungszeichen überhelfe, dann funktioniert es einwandfrei.

Kann mir jemand hierbei behilflich sein?

Herzlichen Dank im Voraus!

haveaproblem

Anmeldungsdatum:
2. Januar 2015

Beiträge: 1163

Shrotty schrieb: Hallo Zusammen!

Moin

In der Variable ist folgendes festgehalten (ein kurzes Kapitel):

1
"../002 - Kapitel 1.mp3" "Perry Rhodan - Silber Edition - 015 - Track 002.mp3" "Perry Rhodan - Silber Edition - 015 - Track 003.mp3"

Da sind Leerzeichen drin, die sind hoffentlich eigentlich makiert oder die Variable ist in singe, bzw. double quotes gesetzt?

Wenn ich nun im Script versuche mp3wrap die Liste zu übergeben

1
mp3wrap $DATEILISTE

gibt mir mp3wrap seine Hilfe-Seite aus. Ich hab auch schon ${DATEILISTE} probiert, aber ohne Erfolg.

Einfach mal ein

echo $DATEILISTE

vor den mp3wrap Aufruf stellen und die Variable überprüfen, ich tippe mal auf fehlende Maskierung.

Wenn ich ihm in der Shell die Dateiliste mit den Anführungszeichen überhelfe, dann funktioniert es einwandfrei.

Also ich habe dein Problem nachgestellt und bei mir läuft es, sollte also prinzipiell möglich sein. Ansonsten kannst du wenn du magst dein Skript oder entscheidende Teile veröffentlichen wenn dir das hier nicht hilft.

Shrotty

(Themenstarter)

Anmeldungsdatum:
11. Mai 2021

Beiträge: 3

@haveaproblem: Danke für Deine Rückmeldung. Bei echo $DATEILISTE erscheint die Liste wie schon aufgeführt. Ich füge Dir das Script bei.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/bin/bash

#--- Dateinamenaufbau: Perry Rhodan - Silber Edition - xxx - Track yyy.mp3

#--- MP3-Title-Tag enthält "Perry Rhodan - Silber Edition - xxx", außer bei Start-Track für ein Kapitel
#--- dies ist der Inhalt für $VORSPANN

#--- Ausgabe von id3v2 (exemplarisch):
#--- id3v2 tag info for Perry Rhodan - Silber Edition - 015 - Track 001.mp3:
#--- TIT2 (Title/songname/content description): Intro
#--- TPE1 (Lead performer(s)/Soloist(s)): Perry Rhodan - Silber Edition
#--- TALB (Album/Movie/Show title): PRSB015: Mechanica
#--- TYER (Year): 2008
#--- TCON (Content type): Audiobook (255)
#--- TRCK (Track number/Position in set): 001
#--- APIC (Attached picture): ()[, 3]: image/jpeg, 85059 bytes
#--- Perry Rhodan - Silber Edition - 015 - Track 001.mp3: No ID3v1 tag

IFS='
'

ZAEHLER=0               #--- zukünftige Track-Nr
KAPITELNEU=0            #--- 1=Neues Kapitel gestartet, 0=undefiniert bzw im Multi-Datei-Kapitel
ANFUEGEN=0              #--- 1=im Multi-Datei-Kapitel, 0=undefiniert bzw Kapitelneustart
KAPITELDATEI=""         #--- zukünftiger Dateiname für das Kapitel Zähler + Titel aus MP3-Tag
DATEILISTE=""           #--- beinhaltet die zu verarbeitenden Dateien je Kapitel, 1. Eintrag = Zieldatei, dann die einzelnen Tracks

for DATEI in *; do
        [[ "$VORSPANN" = "" ]] && VORSPANN=$(echo $DATEI | cut -dT -f1 | sed 's/ - $//')
        TRACKNUMMER=$(id3v2 -l $DATEI | grep TRCK | cut -d: -f2 | sed 's/^[ \t]*//;s/[ \t]*$//')
        TRACKTITEL=$(id3v2 -l $DATEI | grep TIT2 | cut -d: -f2 | sed 's/^[ \t]*//;s/[ \t]*$//')
        [[ "$ARTIST" = "" ]] && ARTIST=$(id3v2 -l $DATEI | grep TPE1 | cut -d: -f2 | sed 's/^[ \t]*//;s/[ \t]*$//')
        [[ "$ALBUM" = "" ]] && ALBUM=$(id3v2 -l $DATEI | grep TALB | cut -d: -f2- | sed 's/^[ \t]*//;s/[ \t]*$//')
        [[ "$YEAR" = "" ]] && YEAR=$(id3v2 -l $DATEI | grep TYER | cut -d: -f2 | sed 's/^[ \t]*//;s/[ \t]*$//')
        [[ "$GENRE" = "" ]] && GENRE=$(id3v2 -l $DATEI | grep TCON | cut -d: -f2 | sed 's/^[ \t]*//;s/[ \t]*$//' | cut -d\  -f1)

        if [ "$TRACKTITEL" != "$VORSPANN" ]; then                       #--- Prüfung, ob ein neues Kapitel beginnt
                if [ $ANFUEGEN -eq 1 ]; then                            #--- Prüfung, ob Kapitelzusammenstellung abgeschlossen
                        #echo "Zusammenfügen: "$DATEILISTE              #--- Zusammenstellung abgeschlossen; MP3's zusammenfügen
                        #echo "Zu schreibende MP3-Tags:"
                        #echo "     Track.....: "$ZAEHLER
                        #echo "     Artist....: "$ARTIST
                        #echo "     Titel.....: "$KAPITELDATEI
                        #echo "     Album.....: "$ALBUM
                        #echo "     Genre.....: "$GENRE
                        #echo "     Jahr......: "$YEAR
                        mp3wrap $DATEILISTE                             #--- MP3's zusammenfügen
                        #lame xxxxxxxxx                                 #--- mit lame zu einem sauberen MP3-VBR umkodieren
                        #mp3tags-schreiben                              #--- neue MP3-Tags schreiben
                elif [ $KAPITELNEU -eq 1 ]; then                        #--- Prüfung, ob Ein-Datei-Kapitel abgeschlossen
                        #echo "Kopieren: "$DATEILISTE                   #--- Kapitel besteht aus nur einer Datei
                        #echo "Zu schreibende MP3-Tags:"
                        #echo "     Track.....: "$ZAEHLER
                        #echo "     Artist....: "$ARTIST
                        #echo "     Titel.....: "$KAPITELDATEI
                        #echo "     Album.....: "$ALBUM
                        #echo "     Genre.....: "$GENRE
                        #echo "     Jahr......: "$YEAR
                        cp `echo $DATEILISTE | sed 's/.*\" //;s/\"//g'` `echo $KAPITELDATEI | sed 's/\"//g'`    #--- cp mag die " nicht und Reihenfolge ändern
                        #lame xxxxxxxxx                                 #--- mit lame zu MP3-VBR umkodieren
                        #mp3tags-schreiben                              #--- neue MP3-Tags schreiben
                fi
                                                                        #--- Vorheriger Loop-Durchgang abgeschlossen
                KAPITELNEU=1                                            #--- Neue (Aktuelle) Datei aus dem FOR-Loop
                ANFUEGEN=0
                (( ZAEHLER++ ))
                KAPITELDATEI='"../'$(printf "%03d" $ZAEHLER)' - '$TRACKTITEL'.mp3"'
                DATEILISTE=$KAPITELDATEI' "'$DATEI'"'
        else
                if [ $KAPITELNEU -eq 1 ]; then                          #--- Neues Kapitel gestartet; ist Multi-Datei-Kapitel -> Neue Dateiliste aufbauen
                        KAPITELNEU=0
                        ANFUEGEN=1
                        DATEILISTE=$DATEILISTE' "'$DATEI'"'
                else
                        DATEILISTE=$DATEILISTE' "'$DATEI'"'             #--- Multi-Datei-Kapitel --> weitere Datei anfügen
                fi
        fi
done

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13209

Du solltest DATEILISTE zu einem Array machen und dann wird z.B. Zeile 75 zu

1
DATEILISTE+=("$DATEI")             #--- Multi-Datei-Kapitel --> weitere Datei anfügen

Dann übergibst Du das als

1
mp3wrap "${DATEILISTE[@]}"

Shrotty

(Themenstarter)

Anmeldungsdatum:
11. Mai 2021

Beiträge: 3

Vielen Dank für den Hinweis! Mit Arrays läuft es super. Zwar mag jetzt lame die Dateien von mp3wrap nicht mehr, habe dann auf sox umgestellt.

Danke für die Hilfe!

Antworten |