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
Rehab
Soul And R&B
2007
1
Back to Black [Canada]
Das kommt dann so raus.
gruß frank