[gelöst] Massentagging MP3
-
- Beiträge: 2124
- Registriert: 12.07.2020 11:21:17
[gelöst] Massentagging MP3
Ich suche den einfachsten Weg in meiner MP3-Sammlung ein bißchen umzustellen. Bisher habe ich mit easytag gearbeitet, das stößt hier aber an seine Grenzen.
Ich möchte in allen Songs mit dem Genretag X im Ordner ~/msk rekursiv eben jenes Genretag durch Y ersetzen. Gibt's da was? Kann auch Kommandozeile sein.
Ich möchte in allen Songs mit dem Genretag X im Ordner ~/msk rekursiv eben jenes Genretag durch Y ersetzen. Gibt's da was? Kann auch Kommandozeile sein.
Zuletzt geändert von dasebastian am 04.12.2024 20:30:15, insgesamt 2-mal geändert.
Re: Massentagging MP3
Keine wirkliche hilfe für Massentagging aberdasebastian hat geschrieben: Kann auch Kommandozeile sein
hast du das schon mit ffmpeg versucht.
gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.
Uns rottet die soziale Kälte viel früher aus.
Re: Massentagging MP3
In Thunar gibt es ein Tool namens Bulk Rename, ob das sowas kann, weiß ich aber nicht.
Falls sich sonst niemand mit einer anderen Idee meldet, kannst Du es ja mal ausprobieren.
Falls sich sonst niemand mit einer anderen Idee meldet, kannst Du es ja mal ausprobieren.
-
- Beiträge: 5613
- Registriert: 30.12.2004 15:31:07
- Wohnort: Wegberg
Re: Massentagging MP3
Hallo
Kann man nicht per id3v2 und einem Script viele mp3 in einem Rutsch taggen ?
mfg
schwedenmann
Kann man nicht per id3v2 und einem Script viele mp3 in einem Rutsch taggen ?
mfg
schwedenmann
Re: Massentagging MP3
Sieh Dir mal puddletag an. Ich selbst kenne das kaum, aber das könnte für Deinen Bedarf perfekt sein.
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
-
- Beiträge: 2124
- Registriert: 12.07.2020 11:21:17
Re: Massentagging MP3
Bulkrenaming kann thunar gut, stimmt. Ich wollte mir sowas Fettes halt nicht an Board holen, kann mich auch nicht daran erinnern, daß Thunar da schon eine Vorauswahl treffen könnte mittels Tags.
Puddletag hatte ich schon in der Hand, kam damit aber ü-ber-hauptnicht klar...
id3v2 war auch das, an was ich dachte. Ich habe dann probiert, die allseits geliebte KI dazu zu überreden, mir ein Skript zu bauen, das läuft auch eine Zeit, ändert aber nichts an den Tags. Vielleicht will wer drüber schauen:
Die Genres sind reine Testzwecke. Wie gesagt, der Durchlauf dauert, es wird aber nichts geschrieben und auch das echo nicht ausgeführt.
id3v2 fände ich schon allein deshalb super, weil es genau nur ein Paket wäre.
Puddletag hatte ich schon in der Hand, kam damit aber ü-ber-hauptnicht klar...
id3v2 war auch das, an was ich dachte. Ich habe dann probiert, die allseits geliebte KI dazu zu überreden, mir ein Skript zu bauen, das läuft auch eine Zeit, ändert aber nichts an den Tags. Vielleicht will wer drüber schauen:
Code: Alles auswählen
#!/bin/bash
# Ändere die Genres hier
declare -A genres
genres=( ["Pop"]="pop" ["Voixmusi"]="voix" ["Rock"]="rock" )
# Setze den absoluten Pfad zu deinem Musikverzeichnis
music_dir="/home/sebastian/dwn/test"
# Durchlaufe alle MP3-Dateien im Musikverzeichnis
find "$music_dir" -name "*.mp3" | while read -r file; do
for old_genre in "${!genres[@]}"; do
new_genre=${genres[$old_genre]}
# Lese das aktuelle Genre
current_genre=$(id3v2 -l "$file" | grep "Genre" | awk -F ': ' '{print $2}')
# Wenn das aktuelle Genre dem alten Genre entspricht, ändere es
if [[ "$current_genre" == "$old_genre" ]]; then
id3v2 -g "$new_genre" "$file"
echo "Ändere Genre von '$old_genre' zu '$new_genre' in '$file'"
fi
done
done
id3v2 fände ich schon allein deshalb super, weil es genau nur ein Paket wäre.
Re: Massentagging MP3
id3v2 zeigt mit der Option -l kein literales "Genre:", sondern "TCON (Content type):" an und kann mit der Option -g "Genrename" nichts anfangen (Genre wird als NUM verlangt). Ist also etwas verzwickt mit id3v2...
Das Auslesen/Filtern des Genres current_genre=... muesste angepasst werden und das Aenderen eines Genre-Tags muesste ein anderes Tool erledigen. eyeD3 kann zwar hervorragend Genre-Tags mit Angabe einer Zeichenkette aendern/schreiben, jedoch ist da die Ausgabe (fuer current_genre) schlechter zu verwursteln.
P.S. Das ist ein gutes Beispiel warum man nicht mal in Betracht ziehen sollte Ki generierten Code auszufuehren... Die KI hat nicht mal "id3v2 --help" geschweige denn die man-page herangezogen, sondern bei den 2 entscheidenden Befehlen im Skript nur etwas zusammenfabuliert.
Das Auslesen/Filtern des Genres current_genre=... muesste angepasst werden und das Aenderen eines Genre-Tags muesste ein anderes Tool erledigen. eyeD3 kann zwar hervorragend Genre-Tags mit Angabe einer Zeichenkette aendern/schreiben, jedoch ist da die Ausgabe (fuer current_genre) schlechter zu verwursteln.
P.S. Das ist ein gutes Beispiel warum man nicht mal in Betracht ziehen sollte Ki generierten Code auszufuehren... Die KI hat nicht mal "id3v2 --help" geschweige denn die man-page herangezogen, sondern bei den 2 entscheidenden Befehlen im Skript nur etwas zusammenfabuliert.
-
- Beiträge: 2124
- Registriert: 12.07.2020 11:21:17
Re: Massentagging MP3
Nachdem ich dann auch die Manpage von id3v2 überflogen und dort nur etwas von "genre num" gelesen hatte, hatte ich das Skript auch schon wieder ad acta gelegt. Zwei, dreimal hat mich so generierter Bashcode aber auf die richtige Spur gebracht.rodney hat geschrieben:01.12.2024 20:17:30id3v2 zeigt mit der Option -l kein ... mit der Option -g "Genrename" nichts anfangen ... warum man nicht mal in Betracht ziehen sollte Ki generierten Code ...
Alles in allem habe ich das Projekt jetzt mal auf Eis gelegt bzw. einen Workaround indem ich in Easytag den gesamten Musikordner rekursiv einlese, anschließend nach Genre aufsteigend sortiere und dann manuell umbenenne. Das funktioniert ganz gut. Was ich auf diese Weise leider nicht hinbekomme, ist die konsequente Kleinschreibung. Das verweigert Easytag.
Re: [erledigt] Massentagging MP3
Genau so was kann eyed3 Verwende es schon länger, es macht sich auch prima in einfachen Scripten.dasebastian hat geschrieben:01.12.2024 13:27:42.... Genretag X im Ordner ~/msk rekursiv eben jenes Genretag durch Y ersetzen.
-
- Beiträge: 2124
- Registriert: 12.07.2020 11:21:17
Re: [erledigt] Massentagging MP3
Nur grob getestet, kann also noch Fehler enthalten (hat mit script . "Pop/Rock" "Rambazamba" funktioniert:
Code: Alles auswählen
#!/usr/bin/env bash
# Aufruf mit ./scriptname <verzeichnis> <zu aendernder tag> <neuer tag>
workdir=${1:-.}
old_genre=${2:-altesgenre}
new_genre=${3:-neuesgenre}
getgenre () {
eyeD3 --no-color "$@" | \
grep -E "\sgenre:\s" | \
sed 's/^.*genre:\ \([^(]*\).*/\1/;s/\s\+//'
}
for file in $(find "${workdir}" -iname "*.mp3"); do
current_genre="$(getgenre ${file})"
if [ "${current_genre}" == "${old_genre}" ]; then
eyeD3 -G "${new_genre}" "${file}"
fi
done
-
- Beiträge: 2124
- Registriert: 12.07.2020 11:21:17
Re: [erledigt] Massentagging MP3
Das ist ja cool, danke für den Versuch.rodney hat geschrieben:02.12.2024 19:39:04... (hat mit script . "Pop/Rock" "Rambazamba" funktioniert
Bei mir scheitert das leider daran, dass meine Dateinamen Leerzeichen enthalten. Das umzustellen hatte ich mal überlegt, mich aber dagegen entschieden wegen anderer Geräte, auf denen diese MP3s auch abgespielt werden.
Mich selber skriptmäßig hier zu vertiefen, dafür fehlt mir leider die Zeit. Wenn du eine einfache Lösung für mich hast, probiere ich das gerne nochmal aus. Ansonsten sag ich einfach nochmal danke für den Tipp. Das Skript ist schon mal abgespeichert, für später mal.
Re: [erledigt] Massentagging MP3
In deinem Fall kann man die "-Paare ausnahmsweise schachteln. Setz mal um das $() das Quoting "$()":
PS: Übrigens hört sich das so an, als wären auf deinen anderen Geräten Leerzeichen Pflicht!?
Code: Alles auswählen
for file in "$(find "${workdir}" -iname "*.mp3")"; do
-
- Beiträge: 2124
- Registriert: 12.07.2020 11:21:17
Re: [erledigt] Massentagging MP3
Danke tobo, ich werd's probieren, heute nicht mehr.
Nein, Leerzeichen sind nicht "Pflicht", aber die Optik ist deutlich besser.
Nachtrag: Ansonsten sind bei mir sämtliche Dateinamen ohne Leerzeichen. Nur die Musik bildet die Ausnahme.
Nein, Leerzeichen sind nicht "Pflicht", aber die Optik ist deutlich besser.
Nachtrag: Ansonsten sind bei mir sämtliche Dateinamen ohne Leerzeichen. Nur die Musik bildet die Ausnahme.
Re: [erledigt] Massentagging MP3
Und auf die kommt's gerade bei Musik besonders an ...
Ich habe mich schon vor langer Zeit dafür entschieden, Leerzeichen in Dateinamen grundsätzlich zu vermeiden. Wenn ein Gerät ein Problem damit hat, stimmt mit dem Gerät was nicht – d.h. das Gerät wird ersetzt. Die Dinge haben sich nach mir zu richten, nicht umgekehrt.
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
-
- Beiträge: 2124
- Registriert: 12.07.2020 11:21:17
Re: [erledigt] Massentagging MP3
Abgesehen davon, daß ich nicht bereit bin, ein Gerät zu ersetzen, das prinzipiell seinen Dienst tut, stimme ich dir zu, was die Musik betrifft. Auch Coverart wird wird ja überbewertet. Ironie off.GregorS hat geschrieben:03.12.2024 19:02:56Und auf die kommt's gerade bei Musik besonders an ... Die Dinge haben sich nach mir zu richten, nicht umgekehrt.
Ich bin aber nicht der einzige hier im Haus/Auto, der meine Musiksammlung hört und durchstöbert und es bricht mir kein Zacken aus der Krone, anderen Stöbergewohnheiten entgegen zu kommen, solange sie mich in meinen nicht fundamental beeinträchtigen.
Peace.
-
- Beiträge: 2124
- Registriert: 12.07.2020 11:21:17
Re: [erledigt] Massentagging MP3
Ich habe gerade die Zeit gefunden, das auszuprobieren, das Problem bleibt im Wesentlichen dasselbe, allerdings wird jetzt gleich mal abgebrochen (file not found...) anstatt alles durchzuprobieren.
Ich habe per oben beschriebenem Easytag-Workaround das meiste jetzt aber geschafft. Deshalb meine Wiederholung: Danke für die Hinweise und Tipps von euch, ich weiß aber nicht, wann/ob ich in nächster Zeit hier weitermache.
Re: [erledigt] Massentagging MP3
Ok, verschlimmbessert. Dann ersetze die for-Schleife halt so, das funktioniert:
Code: Alles auswählen
shopt -s globstar
for file in "${workdir}"/**/*.mp3; do
Re: [erledigt] Massentagging MP3
Das ändert die Sache natürlich gewaltig.dasebastian hat geschrieben:04.12.2024 06:55:17... Ich bin aber nicht der einzige hier im Haus/Auto, der meine Musiksammlung hört und durchstöbert ...GregorS hat geschrieben:03.12.2024 19:02:56Und auf die [Optik] kommt's gerade bei Musik besonders an ... Die Dinge haben sich nach mir zu richten, nicht umgekehrt.
In meinem Haushalt bin ich die einzige Person. Wollte/müsste ich auf andere Leute Rücksicht nehmen, würde ich das wohl genauso tun wie Du. Da ich das aber nicht muss und ich der Einzige bin, der meine Musiksammlung nutzt, kann ich mir eine gewisse Hochnäsigkeit leisten.
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
-
- Beiträge: 2124
- Registriert: 12.07.2020 11:21:17
Re: [erledigt] Massentagging MP3
Code: Alles auswählen
$ cat dwn/changetags
#!/usr/bin/env bash
# Aufruf mit ./scriptname <verzeichnis> <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 's/^.*genre:\ \([^(]*\).*/\1/;s/\s\+//'
}
for file in "${workdir}"/**/*.mp3; do
# for file in "$(find "${workdir}" -iname "*.mp3")"; do
# for file in $(find "${workdir}" -iname "*.mp3"); do
current_genre="$(getgenre ${file})"
if [ "${current_genre}" == "${old_genre}" ]; then
eyeD3 -G "${new_genre}" "${file}"
fi
done
$ ll dwn/test
insgesamt 24K
drwxr-xr-x 6 sebastian sebastian 4,0K 2024-12-04 19:12 ./
drwxr-xr-x 3 sebastian sebastian 4,0K 2024-12-04 19:04 ../
drwxr-xr-x 3 sebastian sebastian 4,0K 2024-12-03 06:51 "5 8erl In Ehr'n"/
drwxr-xr-x 4 sebastian sebastian 4,0K 2024-12-03 06:51 '5K HD'/
drwxr-xr-x 3 sebastian sebastian 4,0K 2024-12-03 06:51 'Anda Morts'/
drwxr-xr-x 3 sebastian sebastian 4,0K 2024-12-03 06:51 Blumfeld/
$ . dwn/changetags /home/sebastian/dwn/test "Pop" "hulapalula"
file not found: /home/sebastian/dwn/test/5
file not found: /home/sebastian/dwn/test/5
file not found: /home/sebastian/dwn/test/5
file not found: /home/sebastian/dwn/test/5
file not found: /home/sebastian/dwn/test/5
file not found: /home/sebastian/dwn/test/5
file not found: /home/sebastian/dwn/test/5
file not found: /home/sebastian/dwn/test/5
file not found: /home/sebastian/dwn/test/5
file not found: /home/sebastian/dwn/test/5
file not found: /home/sebastian/dwn/test/5
file not found: /home/sebastian/dwn/test/5K
file not found: /home/sebastian/dwn/test/5K
file not found: /home/sebastian/dwn/test/5K
file not found: /home/sebastian/dwn/test/5K
file not found: /home/sebastian/dwn/test/5K
file not found: /home/sebastian/dwn/test/5K
file not found: /home/sebastian/dwn/test/5K
file not found: /home/sebastian/dwn/test/5K
file not found: /home/sebastian/dwn/test/5K
file not found: /home/sebastian/dwn/test/5K
file not found: /home/sebastian/dwn/test/5K
file not found: /home/sebastian/dwn/test/5K
file not found: /home/sebastian/dwn/test/5K
file not found: /home/sebastian/dwn/test/5K
file not found: /home/sebastian/dwn/test/5K
file not found: /home/sebastian/dwn/test/5K
file not found: /home/sebastian/dwn/test/5K
file not found: /home/sebastian/dwn/test/5K
file not found: /home/sebastian/dwn/test/5K
file not found: /home/sebastian/dwn/test/5K
file not found: /home/sebastian/dwn/test/Anda
file not found: /home/sebastian/dwn/test/Anda
file not found: /home/sebastian/dwn/test/Anda
file not found: /home/sebastian/dwn/test/Anda
file not found: /home/sebastian/dwn/test/Anda
file not found: /home/sebastian/dwn/test/Anda
file not found: /home/sebastian/dwn/test/Blumfeld/L'
file not found: /home/sebastian/dwn/test/Blumfeld/L'
file not found: /home/sebastian/dwn/test/Blumfeld/L'
file not found: /home/sebastian/dwn/test/Blumfeld/L'
file not found: /home/sebastian/dwn/test/Blumfeld/L'
file not found: /home/sebastian/dwn/test/Blumfeld/L'
file not found: /home/sebastian/dwn/test/Blumfeld/L'
file not found: /home/sebastian/dwn/test/Blumfeld/L'
file not found: /home/sebastian/dwn/test/Blumfeld/L'
file not found: /home/sebastian/dwn/test/Blumfeld/L'
file not found: /home/sebastian/dwn/test/Blumfeld/L'
file not found: /home/sebastian/dwn/test/Blumfeld/L'
$
-
- Beiträge: 2124
- Registriert: 12.07.2020 11:21:17
Re: [erledigt] Massentagging MP3
GregorS hat geschrieben:04.12.2024 11:51:11Das ändert die Sache natürlich gewaltig ... kann ich mir eine gewisse Hochnäsigkeit leisten.
Re: [erledigt] Massentagging MP3
Alles gut, das ist völlig ok!dasebastian hat geschrieben:04.12.2024 19:25:47Ich gebe hier nur Feedback tobo und will dich ausdrücklich nicht triggern.
Hier fehlt noch das Quoting um "$file":
Code: Alles auswählen
current_genre="$(getgenre "${file}")"
-
- Beiträge: 2124
- Registriert: 12.07.2020 11:21:17
Re: [erledigt] Massentagging MP3
tobo you did it!
Das hat jetzt wie am Schnürchen funktioniert, ohne jegliche Fehlerausgabe, also klassisch "linuxblind". Es wurden alle Songs mit Genre "Pop" auf das Genre "hulapalula" umgetagged. Alle anderen Songs mit anderen Genres im Ordner wurden in Ruhe gelassen, das ganze rekursiv.
Um das ganze "für kommende Generationen" zusammenzufassen hier das funktionierende Skript ~/dwn/changetags, ursprünglich von rodney, editiert von tobo:
Code: Alles auswählen
#!/usr/bin/env bash
# Aufruf mit ./scriptname <verzeichnis> <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 's/^.*genre:\ \([^(]*\).*/\1/;s/\s\+//'
}
for file in "${workdir}"/**/*.mp3; do
# for file in "$(find "${workdir}" -iname "*.mp3")"; do
# for file in $(find "${workdir}" -iname "*.mp3"); do
current_genre="$(getgenre "${file}")"
# current_genre="$(getgenre ${file})"
if [ "${current_genre}" == "${old_genre}" ]; then
eyeD3 -G "${new_genre}" "${file}"
fi
done
Code: Alles auswählen
$ . dwn/changetags /home/sebastian/dwn/test "Pop" "hulapalula"
Vielen Dank euch dreien (TuxPeter, rodney u tobo), ein schönes Werkstück ist das geworden!
Re: [gelöst] Massentagging MP3
Dann noch als Vervollständigung das Find-Ergebnis in einer Schleife (diesmal richtig geschrieben), falls mal genauere Anfragen an die Dateien gestellt werden müssen:
Code: Alles auswählen
find "${workdir}" -iname "*.mp3" | while read -r line; do
-
- Beiträge: 2124
- Registriert: 12.07.2020 11:21:17
Re: [gelöst] Massentagging MP3
Du meinst statt "for file in "${workdir}"/**/*.mp3; do"?
Das bereinigte Skript sieht gerade so aus:
Code: Alles auswählen
#!/usr/bin/env bash
# braucht eyed3 installiert, man eyeD3
# https://debianforum.de/forum/viewtopic.php?t=191062
# 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 's/^.*genre:\ \([^(]*\).*/\1/;s/\s\+//'
}
for file in "${workdir}"/**/*.mp3; do
current_genre="$(getgenre "${file}")"
if [ "${current_genre}" == "${old_genre}" ]; then
eyeD3 -G "${new_genre}" "${file}"
fi
done
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.