ID3v2.3 u. ID3v2.4 auslesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
kaytec
User
Beiträge: 513
Registriert: Dienstag 13. Februar 2007, 21:57

ID3v2.3 u. ID3v2.4 auslesen

Beitragvon kaytec » Freitag 11. April 2008, 23:02

Hallo !!

Habe mal versucht ID3v2.3 u. ID3v2.4 auszulesen. Funktioniert bei mir gut, doch ist wohl nicht ganz so allgemeingültig ?

Code: Alles auswählen

#! /usr/bin/env python
# -*- coding: utf-8


file_name = "01 Rehab.mp3"
positions = list()
infos = list()
info = ""
such_kriterien = ("TPE1", "TPE2", "TCOM", "TIT2", "TCON", "TYER", "TRCK",
                  "TALB",)

stop_kriterien = ("AENC", "ASPI", "COMR", "EQU2", "GEOB", "LINK", "MLLT",
                  "PRIV", "POPM", "RBUF", "RVRB", "SIGN", "SYTC", "TBPM",
                  "TCON", "TDEN", "TDOR", "TDRL", "TENC", "TEXT", "TFLT",
                  "TIT1", "TIT2", "TLAN", "TMCL", "TMOO", "TOFN", "TOPE",
        "TPE1", "TPE3", "TPOS", "TPRO", "TPUB", "TSOA", "TSOT",
        "TXXX", "USER", "WCOM", "WCOP", "WOAF", "WOAS", "WPAY",
        "APIC", "COMM", "ENCR", "ETCO", "GRID", "TLEN", "MCDI",
        "OWNE", "PCNT", "POSS", "RVA2", "SEEK", "SYLT", "TALB",
        "TCOM", "TCOP", "TDLY", "TDRC", "TDTG", "TEXT", "TIPL",
        "TIT3", "TKEY", "TMED", "TOAL", "TOLY", "TOWN", "WXXX",
        "TPE2", "TPE4", "TPRO", "TRCK", "TRSO", "TSOP", "TSRC",
        "TSST", "UFID", "USLT", "WCOP", "WOAR", "WORS", "WPUB",
        "TALB", "TYER", "IPLS", "TDAT")


datei = open(file_name, 'r')
data = datei.read()


for string_start in such_kriterien:
    if data.find(string_start) > 0:
        position = data.find(string_start) + 11
        positions.append(position)


for start_position in positions:
    datei.seek(start_position)
    while True:
        info += datei.read(1)
        if len(info) > 4:
            test = info[-4] + info[-3] + info[-2] + info[-1]
            if test in stop_kriterien:
                mp3_info = info.replace(test, "")
                break
    infos.append(mp3_info)
    info = ""
   
datei.close()

for info in infos:
    print info



Amy Winehouse
Amy Winehouse
Amy Winehouse
Rehab
Soul And R&B
2007
1
Back to Black [Canada]

Das kommt dann so raus.

gruß frank
BlackJack

Beitragvon BlackJack » Samstag 12. April 2008, 09:28

Nein das ist wohl nicht wirklich robust. Und Einlesen einer Datei Byteweise ist verhältnismässig sehr langsam und vor allem total überflüssig, weil Du die *gesamte* Datei zu dem Zeitpunkt ja schon längst in den Speicher gelesen hast.
Benutzeravatar
kaytec
User
Beiträge: 513
Registriert: Dienstag 13. Februar 2007, 21:57

Beitragvon kaytec » Samstag 12. April 2008, 10:28

Hallo BlackJack !

Das ich die Daten eigentlich schon habe ist mir klar, doch es gibt da keine wirkliche Ordnung und die Anordnung ist eher "zufällig". Es gibt es auch als Beispiel in einem Python-Tutorial. Da wird der hinterer Teil ausgelesen, denn dort scheint es eine einheitliche Ordnung zu geben. Es stecken aber viel mehr Informationen in einer mp3 und die wollte ich auch haben. Den ganzen String (data) in seine Einzelteile aufzulösen, machte mir echt Probleme !

gruß frank
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Beitragvon HWK » Samstag 12. April 2008, 11:09

Vielleicht hilft Dir das: http://www.omniscia.org/~vivake/python/MP3Info.py
MfG
HWK
BlackJack

Beitragvon BlackJack » Samstag 12. April 2008, 15:59

Wenn man so etwas selber implementieren möchte, sollte man sich auf jeden Fall die Spezifikation auf http://www.id3.org/ zur Hand nehmen und nicht so auf gut Glück in den Daten herum stochern.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Samstag 12. April 2008, 16:23

Dumme Idee: Mit RE nur ASCII Buchstaben rausfischen lassen ;)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Beitragvon BlackJack » Samstag 12. April 2008, 17:17

Was das ganze so furchtbar unsicher macht, wenn man nur nach den Zeichenketten sucht, ist dass die ja auch in Text vorkommen können. Nicht jedes SEEK, SIGN, oder TOWN muss ein Tag sein.
Benutzeravatar
kaytec
User
Beiträge: 513
Registriert: Dienstag 13. Februar 2007, 21:57

Beitragvon kaytec » Samstag 12. April 2008, 21:50

Danke an Alle !

Werde noch weiter probieren.

gruß frank

Wer ist online?

Mitglieder in diesem Forum: Google [Bot]