recursemp3 has been developed under Python 3.4. It will require the following python libraries to work:
- mutagen (edition of audio file metainformation)
- urllib3 (used in fetching the cover art)
- certifi (also used in fetching the cover art)
- argparse (for argument handling)
- colorama (for pretty output)
- colorlog (for pretty logging output)
- tqdm (for the progress bar)
usage: recursemp3.py [-h] [-v | -q | -d] [-r] [-n | -c]
[directories [directories ...]]
Process all MP3 files contained in the argument, and tag them
<genre>/<artist>/[<albumindex>.]<album>/[<trackindex>.]<trackname>
positional arguments:
directories The list of directories to process. If none is chosen,
the current directory will be used instead.
optional arguments:
-h, --help show this help message and exit
-v, --verbose Increase output verbosity
-q, --quiet Decrease output verbosity
-d, --debug Insanely huge amount of output. Do not use on large trees
-r, --remove-tags Remove existing tags before applying new tags
-n, --no-cover Do not try to fetch the album art (way much faster)
-c, --only-cover Only fetch the album art (needs an Internet connection)
recurseMP3 will tag the MP3 files according to their tree. Basically, it can be one of those combinations :
<genre>/<artist>/<album>/<track name><genre>/<artist>/<album index>.<album>/<track number>.<track name><genre>/<artist>/<album index>.<album>/<disk number>.<track number>.<track name>
The <track number> field will be computed as follows : <current track number>/<number of tracks in medium>.
The <disk number> field will be computed as follows : <current disk number>/<number of disks>.
If the artist is "various artists", the "album artist" frame will be set to "various lowercase(<genre>) artists".
If the album is "various albums", the "album" frame will be set to "various lowercase(<album>) albums".
Unless the parameter --no-cover has been set, for each mp3 directory found, recursemp3 will try to fetch the cover art from last.fm, in format "extralarge". To do so, it will send both artist name and album name to the last.fm API, and save the file in the mp3 file directory as cover.<ext>.
This process is multithreaded, and done after the path parsing (os.walk) has been done. It's using an HTTP pool of 5 simultaneous connections, and thus 5 threads are used.