]> git.phdru.name Git - audio-cdr-video.git/blob - audio/mp3/tag.py
Initail import
[audio-cdr-video.git] / audio / mp3 / tag.py
1 #! /usr/bin/env python
2
3 import sys
4
5 def usage(msg):
6    pname = sys.argv[0]
7    sys.stderr.write("%s: %s\n" % (pname, msg))
8    sys.stderr.write("Usage: %s [-[12][-+]] [-a artist] [-l album] [-g genre] [-n track] [-N total_tracks] [-t title] [-y year] filename\n" % pname)
9    sys.exit(1)
10
11 from getopt import getopt, GetoptError
12 try:
13    optlist, args = getopt(sys.argv[1:], "1:2:a:g:l:n:N:t:y:",
14       ["id3v1=", "id3v2=", "artist=", "album=", "genre=", "track=", "tracks=",
15          "title=", "year="]
16    )
17 except GetoptError:
18    usage("invalid option")
19
20 write_id3v1 = True
21 write_id3v2 = True
22
23 artist = None
24 album = None
25 genre = None
26 track = None
27 tracks = None
28 title = None
29 year = None
30
31 for _opt, _arg in optlist:
32    if _opt == "-1":
33       if _arg == '-':
34          write_id3v1 = False
35    elif _opt == "--id3v1":
36       if _arg.lower() in ("no", "off"):
37          write_id3v1 = False
38    elif _opt == "-2":
39       if _arg == "-":
40          write_id3v2 = False
41    elif _opt == "--id3v2":
42       if _arg.lower() in ("no", "off"):
43          write_id3v2 = False
44    elif _opt in ("-a", "--artist"):
45       artist = _arg
46    elif _opt in ("-l", "--album"):
47       album = _arg
48    elif _opt in ("-g", "--genre"):
49       genre = _arg
50    elif _opt in ("-n", "--track"):
51       try:
52          track = int(_arg)
53       except ValueError:
54          track = None
55    elif _opt in ("-N", "--tracks"):
56       try:
57          tracks = int(_arg)
58       except ValueError:
59          tracks = None
60    elif _opt in ("-t", "--title"):
61       title = _arg
62    elif _opt in ("-y", "--year"):
63       year = _arg
64 try:
65    del _opt, _arg
66 except NameError:
67    pass
68
69 if args:
70    if len(args) > 1:
71       usage("too many arguments")
72
73    filename = args[0]
74
75 else:
76    usage("too few arguments")
77
78
79 from os import utime
80 from os.path import getmtime
81 mtime = getmtime(filename)
82
83 import eyeD3
84
85 versions = []
86 if write_id3v2:
87    versions.append(eyeD3.ID3_V2)
88 if write_id3v1:
89    versions.append(eyeD3.ID3_V1)
90
91 for version in versions:
92    id3tag = eyeD3.Tag()
93    id3tag.link(filename, version)
94    id3tag.setVersion(version)
95
96    if album: id3tag.setAlbum(unicode(album, "latin1"))
97    if artist: id3tag.setArtist(unicode(artist, "latin1"))
98    if track or tracks: id3tag.setTrackNum((track, tracks))
99    if title: id3tag.setTitle(unicode(title, "latin1"))
100    if genre: id3tag.setGenre(genre)
101    if year: id3tag.setDate(year)
102
103    id3tag.update()
104 utime(filename, (mtime, mtime))