[gelöst] Massentagging MP3

Du suchst ein Programm für einen bestimmten Zweck?
tobo
Beiträge: 2336
Registriert: 10.12.2008 10:51:41

Re: [gelöst] Massentagging MP3

Beitrag von tobo » 04.12.2024 21:44:39

dasebastian hat geschrieben: ↑ zum Beitrag ↑
04.12.2024 20:51:00
tobo hat geschrieben: ↑ zum Beitrag ↑
04.12.2024 20:43:00
Dann noch als Vervollständigung ...
Du meinst statt "for file in "${workdir}"/**/*.mp3; do"?
Genau, als Alternative, falls du die find-Variante bevorzugst oder höhere Ansprüche stellst, die man beim find halt deutlich besser ausbauen kann.
Beim ausführlicheren Testen bin ich draufgekommen, dass Genretags mit Leerzeichen nicht verarbeitet werden, weder beim Auffinden (zB "Deutscher Indie") noch beim Setzen eines neuen Tags (zB "Germ Alt") mit Leerzeichen.
Du gibst diese Tags beim Skriptaufruf aber schon (wie oben gezeigt) mit ".." umschlossen an?

Falls es daran nicht liegt, dann kannst du die 3 Variablenzuweisungen der Positionsparameter noch quoten. Normalerweise ist das zwar eine der Ausnahmen, bei denen man das eben nicht quoten muss, allerdings weiß ich auch nicht genau, bei welchen Shells das so gilt und du sourcest das Skript ja. Benutzt du als aufrufende Shell eine andere Shell als die Bash?
Im Zweifel lesend immer quoten:

Code: Alles auswählen

workdir="${1:-.}"
old_genre="${2:-altesgenre}"
new_genre="${3:-neuesgenre}"

EDIT: Wenn es daran auch nicht liegt, dann solltest du mal einen entsprechenden eyeD3-Aufruf direkt im Terminal machen, um zu schauen, ob das Teil überhaupt mit Leerzeichen-Tags zurecht kommt. Also sowas ungefähr (mit gesetztem Dateinamen):

Code: Alles auswählen

eyeD3 -G "Germ Alt" <FILE>

dasebastian
Beiträge: 2124
Registriert: 12.07.2020 11:21:17

Re: [gelöst] Massentagging MP3

Beitrag von dasebastian » 05.12.2024 16:59:54

Hoi tobo, hat ein bißchen gedauert, sorry.
tobo hat geschrieben: ↑ zum Beitrag ↑
04.12.2024 21:44:39
Du gibst diese Tags beim Skriptaufruf aber schon (wie oben gezeigt) mit ".." umschlossen an?
Ja, schon.
Falls es daran nicht liegt, dann kannst du die 3 Variablenzuweisungen der Positionsparameter noch quoten ... Benutzt du als aufrufende Shell eine andere Shell als die Bash?
Ich habe deinen Änderungsvorschlag umgesetzt, das hat an der Situation mit den mehrteiligen Tags nichts verändert. Bash, ja.
Wenn es daran auch nicht liegt, dann solltest du mal einen entsprechenden eyeD3-Aufruf direkt im Terminal machen ...
Habe ich, eyed3 kann das.

tobo
Beiträge: 2336
Registriert: 10.12.2008 10:51:41

Re: [gelöst] Massentagging MP3

Beitrag von tobo » 05.12.2024 17:47:53

Gut, dann gibt's nur noch eine einzige Möglichkeit, die abzufragen wäre. Zeige mal die beiden Ausgaben von:

Code: Alles auswählen

eyeD3 --no-color "Datei mit Leerzeichen"
##und von derselben Datei
eyeD3 --no-color "Datei mit Leerzeichen" | grep -E "\sgenre:\s" | sed 's/^.*genre:\ \([^(]*\).*/\1/;s/\s\+//'
Beim Genre ist nur ein einziger Eintrag möglich?

dasebastian
Beiträge: 2124
Registriert: 12.07.2020 11:21:17

Re: [gelöst] Massentagging MP3

Beitrag von dasebastian » 05.12.2024 18:07:04

Code: Alles auswählen

~/dwn/test/Blumfeld/L' Etat Et Moi >
$ ls
 ./                                            '04 Walkie, Talkie.mp3'                                    '09 Sing Sing.mp3'
 ../                                           '05 Eine Eigene Geschichte.mp3'                            '10 Evergreen.mp3'
'01 Draußen Auf Kaution.mp3'                   '06 Verstärker.mp3'                                        '11 Superstarfighter.mp3'
'02 Jet Set.mp3'                               '07 Ich-Wie Es Wirklich War.mp3'                           '12 You Make Me.mp3'
'03 2 Oder 3 Dinge, Die Ich Von Dir Weiß.mp3'  '08 L'\'' Etat et Moi (Mien Vorgehen in 4, 5 Sätzen).mp3'
~/dwn/test/Blumfeld/L' Etat Et Moi >
$ eyeD3 --no-color "05 Eine Eigene Geschichte.mp3"
/home/sebastian/dwn/test/Blumfeld/L' Etat Et Moi/05 Eine Eigene Geschichte.mp3                                                                    [ 7.21 MB ]
--------------------------------------------------------------------------------------------------------------------------------------------------------------
Time: 03:55	MPEG1, Layer III	[ 256 kb/s @ 44100 Hz - Joint stereo ]
--------------------------------------------------------------------------------------------------------------------------------------------------------------
ID3 v2.3:
title: Eine Eigene Geschichte
artist: Blumfeld
album: L' Etat Et Moi
recording date: 1995
track: 5		genre: Deutsche Alternative (id None)
Publisher/label: Blumfeld Tonträger
FRONT_COVER Image: [Size: 40176 bytes] [Type: image/jpeg]
Description: 

PRIV: [Data: 14 bytes]
Owner Id: PeakValue
PRIV: [Data: 41 bytes]
Owner Id: WM/MediaClassSecondaryID
PRIV: [Data: 39 bytes]
Owner Id: WM/MediaClassPrimaryID
PRIV: [Data: 20 bytes]
Owner Id: WM/Provider
PRIV: [Data: 31 bytes]
Owner Id: WM/WMContentID
PRIV: [Data: 34 bytes]
Owner Id: WM/WMCollectionID
PRIV: [Data: 39 bytes]
Owner Id: WM/WMCollectionGroupID
PRIV: [Data: 138 bytes]
Owner Id: WM/UniqueFileIdentifier

MCDI: [Data: 146 bytes]
--------------------------------------------------------------------------------------------------------------------------------------------------------------
~/dwn/test/Blumfeld/L' Etat Et Moi >
$ eyeD3 --no-color "05 Eine Eigene Geschichte.mp3" | grep -E "\sgenre:\s" | sed 's/^.*genre:\ \([^(]*\).*/\1/;s/\s\+//'
DeutscheAlternative 
~/dwn/test/Blumfeld/L' Etat Et Moi >
$ 

Aha? In Easytag wird das aber MIT Leerzeichen dargestellt.
tobo hat geschrieben: ↑ zum Beitrag ↑
05.12.2024 17:47:53
Beim Genre ist nur ein einziger Eintrag möglich?
Das weiß ich nicht. Ich verwende immer nur ein Genre. Hör- und Sortiergewohnheit...

tobo
Beiträge: 2336
Registriert: 10.12.2008 10:51:41

Re: [gelöst] Massentagging MP3

Beitrag von tobo » 05.12.2024 18:27:14

Dann ersetze mal die sed-Zeile durch Folgende:

Code: Alles auswählen

sed -E 's/^.*genre: *([^(]+).*/\1/; s/ +$//'
Wobei diese sed-Zeile jetzt natürlich nur an einem einzigen Beispiel ausgerichtet ist.

dasebastian
Beiträge: 2124
Registriert: 12.07.2020 11:21:17

Re: [gelöst] Massentagging MP3

Beitrag von dasebastian » 05.12.2024 21:12:37

Jup. So sieht das dann aus:

Code: Alles auswählen

~/dwn/test/Blumfeld/L' Etat Et Moi >
$ eyeD3 --no-color "05 Eine Eigene Geschichte.mp3" | grep -E "\sgenre:\s" | sed -E 's/^.*genre: *([^(]+).*/\1/; s/ +$//'
Deutsche Alternative
~/dwn/test/Blumfeld/L' Etat Et Moi >
$ 

dasebastian
Beiträge: 2124
Registriert: 12.07.2020 11:21:17

Re: [gelöst] Massentagging MP3

Beitrag von dasebastian » 05.12.2024 21:16:44

Danke tobo, ich denke, jetzt läuft das wirklich. Hier nochmal das komplette Skript in Sauber:

Code: Alles auswählen

#!/usr/bin/env bash

# Aufruf mit . /scriptname /verzeichnis/zu/mucke "zu aendernder tag" "neuer tag"

shopt -s globstar

workdir="${1:-.}"
old_genre="${2:-altesgenre}"
new_genre="${3:-neuesgenre}"

getgenre () {
  eyeD3 --no-color "$@" | \
    grep -E "\sgenre:\s" | \
    sed -E 's/^.*genre: *([^(]+).*/\1/; s/ +$//'
}
for file in "${workdir}"/**/*.mp3; do
  current_genre="$(getgenre "${file}")"
    if [ "${current_genre}" == "${old_genre}" ]; then
      eyeD3 -G "${new_genre}" "${file}"
    fi
done
Top! :THX: :THX: :THX:

Antworten