Digitale Musiksammlungen die über die Jahre gewachsen sind haben meist die ärgerliche Eigenschaft, dass ID3-Tags, Datei- und Ordnernamen nicht konsistent sind. Alte CD-Grabber, diverse MP3-Konverter usw. führen im Lauf der Zeit dazu, dass man bestimmte Lieder weder auf dem Rechner noch auf den diversen Playern wiederfindet.
In der Zwischenzeit habe ich diverse mp3-Tagger ausprobiert. Wenn man eine große mp3-Sammlung konsistent ablegen will, wird das mit den GUI-Tools eine gewaltige Klick-Orgie. Vor allem, wenn die ID3-Tags, Datei- und Ordnernamen und Cover-Bilder konsistent sein sollen.

Das Linux-Kommandozeilenprogramm beets importiert ganze Verzeichnisbäume mit Audiodateien in seine Datenbank und sortiert sie in eine einheitliche Ordnerstruktur. Zusätzlich korrigiert es Dateinamen und ID3-Tags, ergänzt Cover-Bilder und andere Informationen mit Hilfe von CDDB und anderen Online-Quellen (MusicBrainz, Discogs, Beatport usw.).

beets ist in Python geschrieben und funktioniert daher auf allen Plattformen, auf denen Python läuft (Windows, Mac, Linux). Die Paketquellen ab Ubuntu 14.04 enthalten beets bereits, es muss lediglich installiert werden. Andere Linux-Distributionen bringen beets inzwischen mit. Für Windows und Mac gibt es fertige Download-Pakete und Installer.
Alle Funktionen von beets sind in folgenden Anleitungen zu finden: http://beets.readthedocs.org/en/latest/guides/main.html
 http://www.webupd8.org/2012/01/beets-command-line-tool-to-fix-music.html
Eine kurze Übersicht: http://beets.radbox.org/
Die Projektseite:
GitHub: https://github.com/sampsyo/beets
Plugins: http://beets.readthedocs.org/en/v1.3.6/plugins/

Beispiele:

Ein Album importieren:
beet import /Pfad/Albumname

Alle Alben in einem Verzeichnisbaum importieren:
beet import /Pfad/*

Ein Beispiel für eine Konfigurationsdatei

library: /var/music.blb
directory: /var/mp3
import:
copy: yes
write: yes
resume: ask
quiet_fallback: skip
timid: no
log: beetslog.txt
ignore: .AppleDouble ._* *~ .DS_Store
art_filename: albumart
plugins: bpd
pluginpath: ~/beets/myplugins
threaded: yes
color: yes

paths:
default: $genre/$albumartist/$album/$track $title
singleton: Singletons/$artist – $title
comp: $genre/$album/$track $title
albumtype:soundtrack: Soundtracks/$album/$track $title

Wenn man zB einen iTunes Server auf einem QNAP-NAS nutzten will bringt einem weder ein cover.jpg noch ein folder.jpg etwas. Normalerweise lesen Mediaplayer diese Dateien und zeigen sie als Album CoverArt an. Nicht so iTunes, da muss das Bild in die mp3-Metadaten eingefügt werden.

Beispiele:

CoverArt automatisch einbinden wenn es im Order ein cover.jpg gibt:
1: Plugins aktivieren:

vi ~/.config/beets/config.yaml
# http://beets.readthedocs.org/en/v1.3.7/reference/config.html
#directory: ~/music
directory: /mp3/Alben
library: ~/beets/data/musiclibrary.blb
plugins: fetchart lyrics embedart
fetchart:
cautious: true
cover_names: front back
sources: itunes *
embedart:
auto: yes
import:
move: yes

2: Dann das Script ausführen:

#! /bin/bash
COVER="cover.jpg"
for dir in /mp3/Alben/*/*/
do
    cd "$dir"
    if [ -f $COVER ]; then
        echo "beet embedart -f '$dir$COVER' '$dir'"
        beet embedart -f "$dir$COVER" "$dir"
    else
        echo "No cover $COVER in >$dir< "
    fi
done