This forum has been archived. All content is frozen. Please use KDE Discuss instead.

Amarok stellt meine UTF-8 ID3v2 Tags nicht korrekt dar!

Tags: None
(comma "," separated)
Richard90
Registered Member
Posts
6
Karma
0
Hi!

Problem = Betreff
Lösung = Link

Habe das Skript als "skript" gespeichert und konnte von nun an mit ./skript dateiname mein Problem lösen. Hat auch wunderbar geklappt. Nur ergab sich ein weiteres Problem und hier brauche ich nun eure Hilfe.

Bei meinem Ursprünglichen Problem war es natürlich nicht nur eine einzige Datei die Probleme gemacht hat. Wie schaffe ich es nun mein Problem bei allen Dateien zu lösen. Ich habe keine Lust für jede Datei ./skript dateiname einzugeben. Das könnte eine ganze Weile dauern und muss doch auch irgendwie einfacher gehen.

Danke schonmal im Voraus.
User avatar
Alanceil
Registered Member
Posts
160
Karma
0
OS
Ich kann dir ein Shellskript anbieten, dass dir einen Befehl auf mehrere Dateien aufteilt (Einfacher waere es jedoch, in das Perlskript von der FAQ eine Schleife zu bauen) :

Code: Select all
#!/bin/bash
while [ $# -ge 1 ] ; do
        <dein befehl hier, z.B. ./skript.pl "$1">
        shift
done

Aufgerufen wird es dann z.B. mit ./skript.sh *.mp3, oder falls du das rekursiv machen willst:
Code: Select all
find -print0 -iname '*.mp3' | xargs -0 ./skript.sh
Richard90
Registered Member
Posts
6
Karma
0
Ich hab zwar keine Ahnung was ich da gemacht habe, aber wie du es beschrieben hast hat es wunderbar geklappt. Habe jetzt ein id3tag.sh mit dem Code von dir und
Code: Select all
<dein befehl hier, z.B. ./skript.pl "$1">
durch
Code: Select all
/home/user/id3tag.pl "$1"
ersetzt. Anschließend habe ich das Skript so gestartet:
Code: Select all
./id3tag.sh '/.../a.mp3' '/.../b.mp3' usw.
Hat auch wunderbar funktioniert. =)

Mit dem zweiten Code konnte ich allerdings nichts anfangen.
Code: Select all
find -print0 -iname '*.mp3' | xargs -0 ./skript.sh
xargs: ./skript.sh: No such file or directory


Das mit der Schleife habe ich natürlich auch nicht verstanden, da ich mich mit soetwas nicht auskenne.

Aber es hat ja seinen Dienst getan, also vielen Dank!

Ich hätte noch eine kleine Frage... Wie kann ich mit einem Befehl 2 Befehle nacheinander ausführen? Ich will mit einem Befehl erst in ein bestimtes Verzeichnis wechseln... cd /.../ und dann dort ein Skript ausführen sh xyz.sh. Habe es so versucht:
Code: Select all
cd /.../ | sh xyz.sh
Das scheint Quatsch zu sein. ^^ Und dann dachte ich man könne es sicher mit einer bin machen. Aber da fehlt wieder die Kenntnis.  :p

Ich habs gelöst. Hab einen Starter der das skript starter.sh öffnet. Und starter.sh führt den folgenden Befehl aus:
Code: Select all
#!/usr/bin
cd /verzeichnis/ && sh xyz.sh


Damit sind alle Probleme gelöst.

Last edited by Richard90 on Fri Oct 24, 2008 1:58 pm, edited 1 time in total.
User avatar
Alanceil
Registered Member
Posts
160
Karma
0
OS
Aaaaalso :)

Das Zeichen | bedeutet in der bash nicht, dass zwei Befehle hintereinander ausgefuehrt werden, sondern ist eine Pipe:
Du nimmst die Ausgabe des linken Befehls, und stopfst sie in die Eingabe des Befehls rechts.

Somit gibt das 'find' alle Pfadangaben mit allen mp3 Dateien aus, und die gibst du an den Befehl xargs. Der baut nun diese vielen Pfade so um, dass 'skript.sh' mit diesen Parametern aufgerufen wird.
Wenn find also /home/tux/1.mp3 und /home/tux/2.mp3 liefert, bekommt skript.sh die Parameter /home/tux/1.mp3 und /home/tux/2.mp3. Der Unterschied zum einfach * in der Befehlszeile, ist dass das ein bequemer Weg ist, durch alle Verzeichnisse gleich mit zu laufen, was mit dem * nicht passiert, da erwischst du nur nie mp3s im aktuellen Verzeichnis.
Funktioniert hat der zweite Befehl nicht weil du da xargs -0 ./id3tag.sh haettest schreiben muessen ;)

Zwei Befehle hintereinander geht so:

Code: Select all
befehl1 ; befehl2

Fuehrt nach befehl1 befehl2 aus, egal ob befehl1 erfolgreich durchgelaufen ist oder nicht.

Code: Select all
befehl1 && befehl2

Fuehrt nur dann befehl2 aus, wenn befehl1 erfolgreich durchgelaufen ist.

Code: Select all
befehl1 || befehl2

Fuehrt befehl2 aus, wenn befehl1 nicht erfolgreich durchgelaufen ist, sinnvoll um Fehler abzufangen.

Also:
Code: Select all
cd .. && sh xyz.sh


Und zum Shellskript:
Code: Select all
#!/bin/bash
while [ $# -ge 1 ] ; do    <---- Solange die Anzahl der Parameter ($#) groesser oder gleich (-ge - fuer 'greater or equal') 1 ist, tue:
        <dein befehl hier, z.B. ./skript.pl "$1"> <---- deinen Befehl mit dem ersten Parameter ($1) aufrufen
        shift <--- Parameter Nummer 1 loeschen und Parameter 2 zu Nummer 1 machen. Parameter Nr. 3 wird Nr. 2 , usw.
done <--- Schleifenende


Freut mich, dass ich helfen konnte :)

Last edited by Alanceil on Fri Oct 24, 2008 3:02 pm, edited 1 time in total.
Richard90
Registered Member
Posts
6
Karma
0
Besten Dank für die Erklärung. =)

Mal was anderes, aber zum gleichen Thema.

Mein aktueller Zustand ist wie folgt:
Meine Audiodateien tagge ich mit Jaikoz. Da das Amarok wenig interressiert bearbeite ich sie alle mit dem Skript um das es oben ging. Anschließend nimmt Amarok die tags (zumindest meistens).

Gibt es irgendeine Möglichkeit, vllt mit einem Plugin oder so es hinzubekommen, dass Jaikoz die tags so schreibt, das Amarok sie standartmäßig lesen kann oder, dass Amarok tags lesen kann wie Jaikoz sie standartmäßig schreibt?

Ich frage, weil ich meinen aktuellen Zustand nicht für optimal halte.
User avatar
Alanceil
Registered Member
Posts
160
Karma
0
OS
Ich nehme mal an dass Jaikoz eine andre ID3 Tag Version schreibt. Leider kenne ich das Tool nicht und kann daher dazu wenig sagen. Von easytag hab ich allerdings bisher nichts auffaelliges gehoert, evtl. ist das mal nen Blick wert. (Mein Tagging erledige ich jedoch meistens im Amarok direkt.)

Aber stell die Frage ruhig nochmal im Forum von Jaikoz, laut Homepage http://www.jthink.net/jaikozforum/ . Da duefte man dir besser helfen koennen.
Richard90
Registered Member
Posts
6
Karma
0
Es ist denke ich nicht nötig. Mir ist gerade aufgefallen, dass Jaikoz so gut wie alle ID3 Versionen beherscht.

Momentane Einstellungen:

ID3v2.3
ISO-8859-1

Was brauche ich für Amarok?
User avatar
Alanceil
Registered Member
Posts
160
Karma
0
OS
Eigentlich™ sollte das klappen. Amarok verwendet zum lesen von Tags die taglib, und alles was da geht, geht auch im Player. Beim Zeichensatz wuerde ich UTF-8 hernehmen, und die Versionen musst du wohl oder uebel durchprobieren, falls die Tags nicht lesbar sind. Schau auch mal ob Befehle wie id3info auch etwas lesen koennen, nicht dass Jaikoz irgendwo murks macht.
Richard90
Registered Member
Posts
6
Karma
0
Ein Beispiel

Eingabe:
Code: Select all
# id3v2 -l '/home/user/Music/AC-DC/1980 - Back In Black/01 - Hells Bells.mp3'


Ausgabe:
Code: Select all
id3v2 tag info for /home/user/Music/AC-DC/1980 - Back In Black/01 - Hells Bells.mp3:
UFID (Unique file identifier): http://musicbrainz.org, 36 bytes
TIT2 (Title/songname/content description): Hells Bells
TPE1 (Lead performer(s)/Soloist(s)): AC/DC
TALB (Album/Movie/Show title): Back in Black
TCON (Content type): Hard Rock (79)
TRCK (Track number/Position in set): 01
TYER (Year): 1980
TDAT (Date): 2107
USLT (Unsynchronized lyric/text transcription): ()[eng]: I'm a rolling thunder, a pouring rain
I'm comin' on like a hurricane
My lightning's flashing across the sky
You're only young but you're gonna die

I won't take no prisoners, won't spare no lives
Nobody's putting up a fight
I got my bell, I'm gonna take you to hell
I'm gonna get you, Satan get you

CHORUS:
Hell's Bells
Yeah, Hell's Bells
You got me ringing Hell's Bells
My temperature's high, Hell's Bells

I'll give you black sensations up and down your spine
If you're into evil you're a friend of mine
See my white light flashing as I split the night
'Cause if good's on the left, then I'm stickin' to the right

I won't take no prisoners, won't spare no lives
Nobody's puttin' up a fight
I got my bell, I'm gonna take you to hell
I'm gonna get you, Satan get you

CHORUS
 
 Lyrics delivered by lyricsfly.com

TXXX (User defined text information): (MusicIP PUID): 0494d7c8-4c11-5e6a-b5af-9f35d07fbee9
TXXX (User defined text information): (MusicBrainz Artist Id): 66c662b6-6e2f-4930-8610-912e24c63ed1
TXXX (User defined text information): (MusicBrainz Album Id): 430defa9-3ae6-4662-a664-443f246a0c35
TXXX (User defined text information): (MusicBrainz Album Artist Id): 66c662b6-6e2f-4930-8610-912e24c63ed1
TXXX (User defined text information): (ASIN): B0000501MC
TXXX (User defined text information): (MusicBrainz Album Status): Official
TXXX (User defined text information): (MusicBrainz Album Type): Compilation
TXXX (User defined text information): (MusicBrainz Album Release Country): United States
TSO2 ():  frame
TCMP ():  frame
TSOP ():  frame
TPE2 (Band/orchestra/accompaniment): AC/DC
APIC (Attached picture): (Back In Black)[, 4]: image/jpeg, 6166 bytes


Das entspricht den ermittelten und gespeicherten tags von Jaikoz.

Amarok übernimmt folgende Informationen. (Alle anderen Informationen, wie Titelnummer oder Text fehlen)
Titel, Interpret, Album, Genre, Jahr

Diese Informartionen werden in den Stück-Informationen angezeigt, eingeordnet wird der Titel allerdings wie folgt:
Verschiedene Interpreten > Back in Black (mit Cover) > AC/DC - Hells Bells

Lädt man das Lied in die Wiedergabeliste werden dort wieder die Informationen aus den Stückinformationen angezeigt.

Also ergeben sich folgende Feststellungen:
- Amarok übernimmt nicht alle tags, die Jaikoz geschrieben hat, wohl aber einige!
- Amarok richtet sich bei der Einordnung nicht an den tags in den Stück-Informationen.

Die Jaikoz-Einstellungen waren wie folgt beim Speichern der tags:
- id3v2.4
- UTF-8
- Screenshot
User avatar
Alanceil
Registered Member
Posts
160
Karma
0
OS
Tut mir leid, da kann ich dir nicht wirklich mehr weiterhelfen, ausser dir vorzuschlagen, ein anderes Tagging-Programm wie easytag auszuprobieren oder bei den Jaikoz Leuten nachzufragen.
hurra
Registered Member
Posts
75
Karma
0
Lies mal die Tags mit eyeD3 aus.
id3v2 kann glaub ich nur v2.3 lesen.
Richard90
Registered Member
Posts
6
Karma
0
eyeD3 gibt folgendes Ergebnis.
Traceback (most recent call last):
  File "/usr/bin/eyeD3", line 32, in
    from eyeD3 import *;
ImportError: No module named eyeD3


Aber id3vs funzt einwandfei, sind ja auch id3v2 Tags. Das Probleme habe ich ja oben beschrieben. Kann man das Bug nenen. Die Tags werden auch in Amarok richtig angezeigt, aber nur in dem Playlist-Feld. Das Problem ist, dass sie trotzdem in der Bibliothek links falsch einegordnet werden, um meinen letzten Post mal zusammenzufassen.

PS: thx für die vielen Antowrten bisher. =) (Vor allem ein riesen Dankeschön an Alanceil )

Last edited by Richard90 on Fri Oct 31, 2008 1:40 pm, edited 1 time in total.


Bookmarks



Who is online

Registered users: bancha, Bing [Bot], daret, Evergrowing, Google [Bot], lockheed, mesutakcan, sandyvee, Sogou [Bot]