]> git.phdru.name Git - audio-cdr-video.git/blob - audio/mp3/id3info.py
Initail import
[audio-cdr-video.git] / audio / mp3 / id3info.py
1 #! /usr/bin/env python
2
3 import sys
4 from getopt import getopt, GetoptError
5
6 import eyeD3
7 from eyeD3.tag import Mp3AudioFile
8
9
10 def usage(msg):
11     pname = sys.argv[0]
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)
15     sys.exit(1)
16
17 try:
18     optlist, args = getopt(sys.argv[1:], "t:", ["to-encoding="])
19 except GetoptError:
20    usage("invalid option")
21
22
23 dst_encoding = None
24
25 for _opt, _arg in optlist:
26     if _opt in ('-t', '--to-encoding'):
27         dst_encoding = _arg
28 try:
29    del _opt, _arg
30 except NameError:
31    pass
32
33 if not args:
34    usage("too few arguments")
35
36 if not dst_encoding:
37     from m_lib.defenc import default_encoding
38     dst_encoding = default_encoding
39
40
41 def id3tag_recode(value):
42     try:
43         return value.encode(dst_encoding)
44     except UnicodeEncodeError:
45         return value.encode('latin1')
46
47 def printFrame(title, frame):
48     if frame:
49         print '%s: %s' % (title, frame)
50
51 def printFramesList(title, frames):
52     frames = [frame for frame in frames if frame]
53     if frames:
54         print '%s: %s' % (title, ', '.join(frames))
55
56 def printTrack(title, frame):
57     if frame:
58         track, total = frame
59         if total and track:
60             print '%s: %d (of %d)' % (title, track, total)
61         elif track:
62             print '%s: %d' % (title, track)
63         elif total:
64             print '%s: UNKNOWN of %d' % (title, total)
65
66 for filename in args:
67     print "File:", filename
68     mp3_file = Mp3AudioFile(filename)
69     print "Bitrate:", mp3_file.getBitRateString()
70     print "Duration:", mp3_file.getPlayTimeString(), 's'
71
72     id3tag = mp3_file.getTag()
73     if not id3tag:
74         sys.exit()
75
76     for version in eyeD3.ID3_V2, eyeD3.ID3_V1:
77         id3tag = eyeD3.Tag()
78         if not id3tag.link(filename, version):
79             continue
80
81         print '-----'
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()
87         if dates:
88             printFramesList("Date", [date.getDate() for date in dates])
89         try:
90             printFrame("Genre", id3tag.getGenre().getName())
91         except: # Unknown id3tag or no id3tag at all
92             pass
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():
98             print "Has images"
99         printFramesList("URLs", [frame.url for frame in id3tag.getURLs()])