4 from getopt import getopt, GetoptError
7 from eyeD3.tag import Mp3AudioFile
12 sys.stderr.write("%s: %s\n" % (pname, msg))
13 sys.stderr.write("Usage: %s file.mp3...\n" % pname)
14 sys.stderr.write("Usage: %s [-t encoding|--to-encoding=encoding] file.mp3...\n" % pname)
18 optlist, args = getopt(sys.argv[1:], "t:", ["to-encoding="])
20 usage("invalid option")
25 for _opt, _arg in optlist:
26 if _opt in ('-t', '--to-encoding'):
34 usage("too few arguments")
37 from m_lib.defenc import default_encoding
38 dst_encoding = default_encoding
41 def id3tag_recode(value):
43 return value.encode(dst_encoding)
44 except UnicodeEncodeError:
45 return value.encode('latin1')
47 def printFrame(title, frame):
49 print '%s: %s' % (title, frame)
51 def printFramesList(title, frames):
52 frames = [frame for frame in frames if frame]
54 print '%s: %s' % (title, ', '.join(frames))
56 def printTrack(title, frame):
60 print '%s: %d (of %d)' % (title, track, total)
62 print '%s: %d' % (title, track)
64 print '%s: UNKNOWN of %d' % (title, total)
67 print "File:", filename
68 mp3_file = Mp3AudioFile(filename)
69 print "Bitrate:", mp3_file.getBitRateString()
70 print "Duration:", mp3_file.getPlayTimeString(), 's'
72 id3tag = mp3_file.getTag()
76 for version in eyeD3.ID3_V2, eyeD3.ID3_V1:
78 if not id3tag.link(filename, version):
82 printFrame("id3tag version", id3tag.getVersionStr())
83 printFrame("Artist", id3tag_recode(id3tag.getArtist()))
84 printFrame("Album", id3tag_recode(id3tag.getAlbum()))
85 printFrame("Title", id3tag_recode(id3tag.getTitle()))
86 dates = id3tag.getDate()
88 printFramesList("Date", [date.getDate() for date in dates])
90 printFrame("Genre", id3tag.getGenre().getName())
91 except: # Unknown id3tag or no id3tag at all
93 printTrack("Track num", id3tag.getTrackNum())
94 printFramesList("Disc num", [str(n) for n in id3tag.getDiscNum() if n])
95 printFramesList("Comments", [id3tag_recode(frame.comment) for frame in id3tag.getComments() if frame])
96 printFramesList("Lyrics", [frame.description for frame in id3tag.getLyrics()])
97 if id3tag.getImages():
99 printFramesList("URLs", [frame.url for frame in id3tag.getURLs()])