]> git.phdru.name Git - audio-cdr-video.git/blob - audio/ogg/tag.py
Initail import
[audio-cdr-video.git] / audio / ogg / tag.py
1 #! /usr/bin/env python
2
3 import sys
4
5 def usage(msg):
6    sys.stderr.write("tag.py: %s\n" % msg)
7    sys.stderr.write("Usage: tag.py [-a artist] [-l album] [-g genre] [-n track] [-t title] [-y year] [-c charset] filename\n")
8    sys.exit(1)
9
10 from getopt import getopt, GetoptError
11 try:
12    optlist, args = getopt(sys.argv[1:], "a:g:l:n:t:y:c:",
13       ["artist=", "album=", "genre=", "track=", "title=", "year=", "charset="]
14    )
15 except GetoptError:
16    usage("iinvalid option")
17
18 artist = None
19 album = None
20 genre = None
21 track = None
22 title = None
23 year = None
24 charset = "ascii"
25
26 for _opt, _arg in optlist:
27    if _opt in ("-a", "--artist"):
28       artist = _arg
29    elif _opt in ("-l", "--album"):
30       album = _arg
31    elif _opt in ("-g", "--genre"):
32       from ID3 import ID3
33       if _arg in ID3.genres:
34          genre = _arg
35       else:
36          raise ValueError, "unknown genre `%s'" % _arg
37    elif _opt in ("-n", "--track"):
38       try:
39          track = int(_arg)
40       except ValueError:
41          track = None
42    elif _opt in ("-t", "--title"):
43       title = _arg
44    elif _opt in ("-y", "--year"):
45       year = _arg
46    elif _opt in ("-c", "--charset"):
47       charset = _arg
48 try:
49    del _opt, _arg
50 except NameError:
51    pass
52
53 if args:
54    if len(args) > 1:
55       usage("too many arguments")
56
57    filename = args[0]
58
59 else:
60    usage("too few arguments")
61
62
63 from os import utime
64 from os.path import getmtime
65 mtime = getmtime(filename)
66
67 import ogg.vorbis
68 vf = ogg.vorbis.VorbisFile(filename)
69
70 tag = vf.comment()
71 tag.clear()
72
73 if album: tag.add_tag('ALBUM', album.decode(charset).encode('utf-8'))
74 if artist: tag.add_tag('ARTIST', artist.decode(charset).encode('utf-8'))
75 if track: tag.add_tag('TRACKNUMBER', str(track))
76 if title: tag.add_tag('TITLE', title.decode(charset).encode('utf-8'))
77 if genre: tag.add_tag('GENRE', genre)
78 if year: tag.add_tag('DATE', year)
79
80 tag.write_to(filename)
81 utime(filename, (mtime, mtime))