13 KiB
Bedienungsanleitung – Musiksammlung
ACHTUNG! Das Programm ist nicht fertig!
Inhaltsverzeichnis
- Voraussetzungen
- Installation
- Workflow-Überblick
- Schritt 1: CDs rippen
- Schritt 2: Album-Metadaten ermitteln
- Schritt 3: Dateien organisieren und taggen
- Tags und Cover prüfen
- Komplett-Pipeline
- Tipps und Hinweise
1. Voraussetzungen
| Programm | Zweck | Pflicht |
|---|---|---|
| Python 3.11+ | Laufzeitumgebung | ja |
abcde |
CD-Ripping | ja |
cdparanoia |
CD-Lesefehler korrigieren (von abcde genutzt) | ja |
flac / lame / opusenc / ffmpeg |
Encoder je nach Format | je nach Format |
tesseract |
OCR für Coverbilder | nein (optional) |
| Ollama / OpenAI-API | LLM für Tracklisten-Extraktion | nein (optional) |
Installation der externen Tools (Debian/Ubuntu):
sudo apt install abcde cdparanoia flac lame opus-tools ffmpeg tesseract-ocr
2. Installation
git clone <repo-url>
cd Musiksammlung
pip install -e ".[dev]"
Danach steht der Befehl musiksammlung zur Verfügung:
musiksammlung --help
3. Workflow-Überblick
CD einlegen
│
▼
musiksammlung rip ← CDs rippen, CDDB-Lookup, Dateien benennen
│ (optional: EAN-Abfrage → MusicBrainz)
▼
temp/Album/
CD1/
track01.flac ← kein CDDB-Treffer
track02.flac
album.json ← automatisch erzeugt (CDDB oder MusicBrainz)
│
├─ album.json bereits vorhanden (CDDB/MusicBrainz)?
│ ja → direkt weiter mit musiksammlung apply
│
└─ nein → album.json manuell erzeugen (eine Variante wählen):
A: musiksammlung scan --from-text trackliste.txt
B: musiksammlung scan back.jpg
C: musiksammlung scan back.jpg --vision
D: musiksammlung scan --barcode 0602557360561
→ album.json prüfen/korrigieren
→ musiksammlung apply
│
▼
musiksammlung apply ← Umbenennen, Tags, Cover, Playlist
│
├─ --in-place (Standard): Dateien bleiben im Quellverzeichnis
│ temp/Album/CD1/01_-_Titel_-_Kuenstler.flac
│
└─ mit output_dir: Dateien in Jellyfin-Struktur verschieben
~/Musik/Kuenstler/Album/CD1/01_-_Titel_-_Kuenstler.flac
4. Schritt 1: CDs rippen
Grundbefehl
musiksammlung rip
Das Programm fragt interaktiv nach Album-Name und CD-Nummer, startet abcde und benennt die Tracks automatisch (wenn CDDB Daten liefert).
Wichtige Optionen
| Option | Beschreibung | Empfehlung |
|---|---|---|
-f flac |
Audio-Format | flac für Archiv, mp3 für Kompatibilität |
-q high |
Qualität (low/medium/high), Standard: high |
high für Archiv |
-j 0 |
Alle CPU-Kerne für paralleles Encoding | empfohlen |
-P |
Pipes-Modus (kein WAV-Zwischenspeicher) | empfohlen bei wenig Speicher |
-o /pfad |
Ausgabe-Verzeichnis | Standard: ./temp |
-d /dev/sr0 |
CD-Laufwerk | falls nicht /dev/cdrom |
--no-cddb |
CDDB-Lookup deaktivieren | bei Offline-Betrieb |
Beispiel: Schnelles FLAC-Ripping mit allen Kernen
musiksammlung rip -f flac -q high -j 0 -P -o ~/rip
Interaktiver Ablauf
--- Album 1 ---
Album name (Enter = CDDB name / default 'Album1'): Beethoven Sinfonien
EAN/Barcode für MusicBrainz (Enter = überspringen): 028943753227
MusicBrainz-Suche nach Barcode 028943753227 ...
✓ Herbert von Karajan – Beethoven: 9 Symphonies (1963, 50 Tracks)
Album: Beethoven Sinfonien
CD Drive: /dev/cdrom
CD number [1]: 1
Ripping to: temp/Beethoven_Sinfonien/CD1
--------------------------------------------------
Track 1/4 Allegro con brio
[████████████████░░░░░░░░░░░░░░] 54.3% 18.2 MB
...
✓ Done — 4 tracks
1. Allegro con brio [Karajan]
2. Andante con moto [Karajan]
Next CD for this album? (y/n): y
CD number [1]: 2
...
Next album? (y/n): n
Ergebnis-Verzeichnis
Wenn CDDB Daten liefert:
~/rip/
Beethoven_Sinfonien/
CD1/
01_-_Allegro_con_brio_-_Karajan.flac
02_-_Andante_con_moto_-_Karajan.flac
...
album.json ← automatisch gespeichert
→ Direkt weiter mit musiksammlung apply ~/rip/Beethoven_Sinfonien album.json
Wenn kein CDDB-Treffer:
~/rip/
Beethoven_Sinfonien/
CD1/
track01.flac
track02.flac
...
→ In diesem Fall weiter mit Schritt 2 (Metadaten ermitteln).
5. Schritt 2: Album-Metadaten ermitteln
Dieser Schritt ist nur nötig, wenn CDDB keine vollständigen Daten geliefert hat (Dateien heißen noch track01.flac etc.).
Variante A: Textdatei (z.B. von Wikipedia/Perplexity kopiert)
musiksammlung scan --from-text trackliste.txt -o album.json
Variante B: Coverbild per OCR + LLM
musiksammlung scan back.jpg -o album.json --lang deu+eng
Standard-Modell: gemma3:12b (via Ollama). Anderes Modell:
musiksammlung scan back.jpg -o album.json --model llama3.3:latest
Variante C: Vision-LLM (Bild direkt an LLM, empfohlen)
Besser als OCR bei komplexen Layouts (mehrere Spalten, schwierige Schriften):
musiksammlung scan back.jpg --vision -o album.json
Standard-Modell: qwen3-vl:235b-cloud (via Ollama). Anderes Modell:
musiksammlung scan back.jpg --vision --vision-model qwen3-vl:7b -o album.json
Variante D: EAN/Barcode → MusicBrainz (schnellste Methode)
Wenn die EAN-13- oder UPC-12-Nummer der CD bekannt ist (aufgedruckt auf der Hülle), kann das Programm die Metadaten direkt aus der MusicBrainz-Datenbank laden — ohne Bild, ohne OCR, ohne lokales LLM:
musiksammlung scan --barcode 0602557360561 -o album.json
Die EAN lässt sich auch mit einem Barcode-Scanner oder einer Smartphone-App ablesen.
MusicBrainz liefert bei einem Treffer: Interpret, Albumtitel, Erscheinungsjahr und vollständige Trackliste. Kein API-Schlüssel erforderlich.
Alternativ kann die EAN auch während des interaktiven Rippens eingegeben werden (Abfrage „EAN/Barcode für MusicBrainz"). Das Ergebnis wird dann direkt als album.json gespeichert.
album.json prüfen und bearbeiten
Das Programm prüft automatisch, ob die Anzahl der erkannten Tracks mit den gerippten Dateien übereinstimmt. Bei Abweichungen erscheint eine Fehlermeldung:
FEHLER: Track-Diskrepanz zwischen gerippten Dateien und album.json:
[OK] Disc 1: 25 Datei(en), 25 JSON-Track(s)
[!!] Disc 2: 23 Datei(en), 20 JSON-Track(s)
→ 3 Track(s) fehlen im JSON (Tracks 21–23 eintragen)
Bitte album.json korrigieren und erneut aufrufen.
In diesem Fall album.json manuell ergänzen, dann apply erneut aufrufen.
{
"artist": "Karajan",
"album": "Beethoven Sinfonien",
"year": 1963,
"discs": [
{
"disc_number": 1,
"tracks": [
{"track_number": 1, "title": "Allegro con brio"},
{"track_number": 2, "title": "Andante con moto"}
]
}
]
}
Das Feld "artist" auf Track-Ebene ist optional. Wird es gesetzt, überschreibt es den Album-Künstler für diesen Track — sinnvoll bei Samplern oder Klassik mit verschiedenen Solisten:
{"track_number": 3, "title": "Klavierkonzert Nr. 5", "artist": "Brendel"}`
6. Schritt 3: Dateien organisieren und taggen
In-place (Dateien bleiben im Quellverzeichnis)
musiksammlung apply ~/rip/Beethoven_Sinfonien album.json
Oder explizit:
musiksammlung apply ~/rip/Beethoven_Sinfonien album.json --in-place
Das Programm:
- Benennt Audiodateien um (
track01.flac→01_-_Allegro_con_brio_-_Karajan.flac) - Setzt ID3/FLAC-Tags (Titel, Künstler, Album, Jahr, Track-Nummer, Disc-Nummer)
- Kopiert Cover-Bilder (
back.jpg) - Erzeugt eine M3U-Playlist
- Benennt das Album-Verzeichnis automatisch um (wenn
input_direin CD-Unterverzeichnis ist, z.B.CD1)
Ergebnis:
~/rip/Beethoven_Sinfonien (2024)/ ← automatisch umbenannt
CD1/
01_-_Allegro_con_brio_-_Karajan.flac
02_-_Andante_con_moto_-_Karajan.flac
...
CD2/
...
back.jpg
Beethoven_Sinfonien.m3u
Hinweis zur Auto-Umbenennung: Das Album-Verzeichnis wird automatisch umbenannt, wenn
input_direin CD-Unterverzeichnis (CD1,CD2...) ist. Wird stattdessen das Album-Wurzelverzeichnis übergeben, gibt das Programm einenmv-Hinweis aus, aber benennt nicht selbst um.
In Jellyfin-Verzeichnis verschieben
musiksammlung apply ~/rip/Beethoven_Sinfonien album.json ~/Musik \
--front front.jpg --back back.jpg
Ergebnis:
~/Musik/
Karajan/
Beethoven_Sinfonien_1963/
CD1/
01_-_Allegro_con_brio_-_Karajan.flac
...
back.jpg
Beethoven_Sinfonien.m3u
Optionen
| Option | Beschreibung |
|---|---|
--in-place |
Dateien im Quellverzeichnis umbenennen (kein output_dir nötig) |
--front cover.jpg |
Front-Cover-Bild |
--back back.jpg |
Rückseiten-Bild |
--dry-run |
Nur anzeigen, nichts ändern |
Cover-Konvention
Im Album-Verzeichnis werden folgende Dateinamen erwartet:
| Datei | Zweck |
|---|---|
frontcover.jpg oder frontcover.png |
Front-Cover |
backcover.jpg oder backcover.png |
Rückseiten-Cover |
Symbolische Links auf diese Namen sind erlaubt. apply kopiert die mit --front/--back angegebenen Bilder automatisch als frontcover.jpg bzw. backcover.jpg ins Album-Verzeichnis und bettet das Frontcover anschließend in alle Audio-Dateien ein (skaliert auf max. 500 px).
Ist bereits ein frontcover.* vorhanden (z.B. bei erneutem apply), wird es ohne --front-Option verwendet.
Dateinamen-Schema
<Track-Nr>_-_<Titel>_-_<Künstler>.<Endung>
Beispiel: 01_-_Allegro_con_brio_-_Karajan.flac
- Leerzeichen und Satzzeichen →
_ - Mehrere
_hintereinander → ein_ - Umlaute (ä, ö, ü, ß) bleiben erhalten
- Künstler pro Track: falls im
album.jsonein Track-artistgesetzt ist, wird dieser verwendet; sonst der Album-Künstler
7. Tags und Cover prüfen
Nach apply lässt sich der Zustand aller Dateien mit einem Befehl prüfen:
musiksammlung check ~/rip/Beethoven_Sinfonien
Ausgabe:
Verzeichnis: ~/rip/Beethoven_Sinfonien
frontcover: frontcover.jpg
backcover: backcover.jpg
CD1/
[♪] 01_-_Allegro_con_brio_-_Karajan.flac
Titel: Allegro con brio
Künstler: Karajan | AlbumArtist: Karajan
Album: Beethoven Sinfonien | Jahr: 1963
Track: 1/4 | Disc: 1
...
[♪] zeigt an, dass ein Cover eingebettet ist. [ ] bedeutet kein eingebettetes Cover.
8. Komplett-Pipeline
Für einfache Fälle (alles in einem Schritt):
musiksammlung process temp/Album/CD1 ~/Musik --back back.jpg
9. Tipps und Hinweise
EAN/Barcode verfügbar? → Schnellster Weg
- EAN-13 oder UPC-12 von der CD-Hülle ablesen (ggf. Barcode-Scanner-App nutzen)
musiksammlung scan --barcode 0602557360561 -o album.json- Oder beim
rip-Befehl die EAN-Abfrage verwenden — dann wirdalbum.jsondirekt gespeichert - Kein Bild, kein OCR, kein lokales LLM notwendig
CDDB-Lookup schlägt fehl?
- Internetverbindung prüfen
--no-cddbverwenden und Metadaten perscan --barcodeoderscan(Bild) ermitteln
Falsches oder kein CDDB-Ergebnis?
- Tracks sind trotzdem korrekt gerippt (als
track01.flacetc.) musiksammlung scan --barcode EANverwenden (wenn EAN bekannt)- Oder
musiksammlung scanmit Coverbild oder Textdatei aufrufen album.jsonmanuell korrigieren, dannmusiksammlung applyausführen
Mehrspaltige Trackliste auf dem Backcover?
- OCR erkennt mehrspaltige Layouts oft unvollständig
- Vision-LLM verwenden:
--vision --vision-model qwen3-vl:235b-cloud
Mehrere CDs eines Albums (Multi-Disc)?
- Bei der Abfrage "Next CD for this album?" mit
yantworten - Jede CD erhält ein eigenes Unterverzeichnis
CD1,CD2, ... applyeinmal mit dem Album-Verzeichnis aufrufen (nicht pro CD)
Unterstützte Audio-Formate:
| Format | Qualität high | Verwendung |
|---|---|---|
flac |
Verlustfrei | Archiv |
mp3 |
VBR -V0 | maximale Kompatibilität |
opus |
192 kbit/s | modern, effizient |
aac |
Qualität 4 | Apple-Geräte |
wav |
Verlustfrei | maximale Kompatibilität, groß |