eyeD3 is a Python module and program for processing ID3 tags. Information about mp3 files (i.e bit rate, sample frequency, play time, etc.) is also provided. The formats supported are ID3 v1.0/v1.1 and v2.3/v2.4.
The current stable version is 0.6.3. It and earlier versions are available here.
See the NEWS and/or ChangeLog for changes.
gzip -dc eyeD3-0.6.3.tar.gz | tar xvf - cd eyeD3-0.6.3 ./configure make make install (as root)
rpm -Uvh ./eyeD3-0.6.3-1.noarch.rpm
emerge eyeD3See here for more info.
Usage ===== eyeD3 [OPTS] file [file...] options ======= --version show program's version number and exit -h, --help show this help message and exit Tag Versions ------------ -1, --v1 Only read/write ID3 v1.x tags. By default, v1.x tags are only read if there is not a v2.x tag. -2, --v2 Only read/write ID3 v2.x tags. --to-v1.1 Convert the file's tag to ID3 v1.1. (Or 1.0 if there is no track number.) --to-v2.3 Convert the file's tag to ID3 v2.3 --to-v2.4 Convert the file's tag to ID3 v2.4 Tag Data -------- -a STRING, --artist=STRING Set artist -A STRING, --album=STRING Set album -t STRING, --title=STRING Set title -n NUM, --track=NUM Set track number -N NUM, --track-total=NUM Set total number of tracks -G GENRE, --genre=GENRE Set genre. The argument is a valid genre string or number. See --list-genres -Y STRING, --year=STRING Set a four digit year. --comment=[LANGUAGE]:[DESCRIPTION]:COMMENT Set comment --remove-comments Remove all comment frames. --add-image=IMG_PATH:TYPE[:DESCRIPTION] Add an image to the tag. The description and type optional, but when used, both ':' delimiters must be present. The type MUST be an string that corresponds to one given with --list-image-types. -i, --write-images Causes all attached images (APIC frames) to be written to the current directory. --set-text-frame=FID:TEXT Set the value of a text frame. To remove the frame, specify an empty value. e.g., --set-text-frame="TDRC:" --set-user-text-frame=DESC:TEXT Set the value of a user text frame (i.e., TXXX). To remove the frame, specify an empty value. e.g., --set- user-text-frame="SomeDesc:" --set-encoding=latin1|utf8|utf16-BE|utf16-LE Set the encoding that is used for _all_ text frames. This only takes affect when the tag is updated as the result of a frame value being set with another option (e.g., --artist=) or --force-update is present. --remove-v1 Remove ID3 v1.x tag. --remove-v2 Remove ID3 v2.x tag. --remove-all Remove both ID3 v1.x and v2.x tags. Misc. Options ------------- --rename=NAME Rename file (the extension is not affected) based on data in the tag using substitution variables: %A (artist), %a (album), %t (title), %n (track number), and %N (total number of tracks) -l, --list-genres Display the table of ID3 genres and exit --list-image-types List all possible image types --strict Fail for tags that violate the ID3 specification. --jep-118 Output the tag per the format described in JEP-0118. See http://www.jabber.org/jeps/jep-0118.html --force-update Update the tag regardless of whether any frames are set with new values. --no-color Disable color output -v, --verbose Show all available information --debug Trace program execution.
Some simple programming examples follow here, excluding any error handling, of course :)
Reading the contents of an mp3 file containing either v1 or v2 tag info:
import eyeD3; tag = eyeD3.Tag(); tag.link("/some/file.mp3"); print tag.getArtist(); print tag.getAlbum(); print tag.getTitle();
Read an mp3 file (track length, bitrate, etc.) and access it's tag:
if eyeD3.isMp3File(f): audioFile = eyeD3.Mp3AudioFile(f, self.opts.tagVersion); tag = audioFile.getTag();
Specific tag versions can be selected:
tag.link("/some/file.mp3", eyeD3.ID3_V2); tag.link("/some/file.mp3", eyeD3.ID3_V1); tag.link("/some/file.mp3", eyeD3.ID3_ANY); # The default.
Or you can iterate over the raw frames:
tag = eyeD3.Tag(); tag.link("/some/file.mp3"); for frame in tag.frames: print frame;
Once a tag is linked to a file it can be modified and saved:
tag.setArtist(u"Cro-Mags"); tag.setAlbulm(u"Age of Quarrel"); tag.update();
If the tag linked in was v2 and you'd like to save it as v1:
tag.update(eyeD3.ID3_V1_1);
Read in a tag and remove it from the file:
tag.link("/some/file.mp3"); tag.remove();
See the TODO file for possible enhancements.
See the THANKS file for a list people who have contributed to eyeD3.