Linux & Co.

Anleitung: CD automatisch rippen und taggen – als MP3 und FLAC gleichzeitig

Ich höre schon die Lästerer – CDs rippen, das ist sowas von 90er … Aber sei’s drum, viele dürften noch beachtliche Bestände in den Regalen stehen haben – und allen, die in den 90ern Lichtdatenträger angesammelt haben sei gesagt: Es geht zu Ende mit Euren CDs – selbst Kauf-CDs werden langsam aber sicher immer schlechter lesbar. Stellt sich die Frage: Wie lassen sich Hunderte CDs mit minimalem Aufwand rippen und somit retten? Mit Linux geht das komplett automatisch: CD einlegen, warten bis sie ausgeworfen wird, fertig. Und als Ergebnis habt Ihr sauber getaggte FLAC- und MP3-Dateien. Das ganze bekommt Ihr mit drei einfachen Schritten.

Die wichtigsten Musik-Dateiformate in einem Rutsch

Natürlich könnt Ihr auch nur FLACs oder MP3s oder sonst ein Format wählen. Der grundsätzliche Workflow ist recht simpel: Per UDEV lasst Ihr bei CD-Einwurf ein Skript starten, welches wiederum den CD-Ripper abcde startet. Eigentlich sollte das auch ohne Umweg über das Skript gehen, aber zumindest hier gab es immer wieder Rechteprobleme und mit Skript sollte es überall funktionieren.

Das ganze ist übrigens für den eigenen Bedarf entstanden: Gut 800 CDs warten im Regal darauf, verlustfrei (FLAC) und portabel (MP3) gerippt zu werden. Nun steht ein altes Laptop im Regal und ich kann einfach eine CD nach der anderen einschieben, ohne weiter tätig zu werden – fertig ist mein RipTop. Hier läuft der Workflow unter Ubuntu mit XFCE völlig reibungslos.

Den Workflow zäumen wir hier von hinten auf, da es unschön ist, ein Skript in UDEV anzusprechen, dass es noch gar nicht gibt – also: abcde konfigurieren, Skript anlegen, UDEV konfigurieren.

1. abcde konfigurieren

Die Linux-Welt ist wundervoll: abcde steht für „a better cd encoder“. Das Coole daran: abcde läuft komplett im Terminal, die Konfiguration läuft über eine Textdatei und somit lässt sich wunderbar automatisieren. Installiert also abcde und öffnet dann die Textdatei .abcde.conf in /etc/. Folgende Einstellungen solltet Ihr setzen bzw. auskommentieren:

Keine Nutzerinteraktionen:

INTERACTIVE=n

Einstellungen für MP3/FLAC (können natürlich auch manuell gewählt werden):

LAMEOPTS="--preset extreme"
FLACOPTS="--verify --best"

Ausgabeverzeichnisse für die temporären WAV-Dateien und das finale Ergebnis:

OUTPUTDIR=/home/NUTZERNAME/abcde-ripped/
WAVOUTPUTDIR=/home/NUTZERNAME/abcde-ripped/temp

Welche Typen sollen aus den WAVs konvertiert werden:

OUTPUTTYPE="flac,mp3"

Auswerfen nach Abschluss:

EJECTCD=y

2. Skript anlegen

Das Skript, hier test.sh, dient lediglich dazu, abcde mit den passenden Rechten zu starten.

#!/bin/sh
export DISPLAY=:0.0;
sudo -u NUTZERNAME xterm -e /usr/bin/abcde;
exit $?

Inhaltlich wichtig ist nur die sudo-Zeile, die den Terminal mit Eurem Nutzernamen startet, der wiederum abcde startet, der Rest muss der Form halber rein (export sorgt dafür, dass das Fenster auch tatsächlich auf Eurem Display erscheint).

3. UDEV einrichten

Über UDEV könnt Ihr Regeln anlegen, was passieren soll, wenn ein bestimmter Datenträger oder in unserem Fall Datenträgertyp (CD) eingelegt wird. Nun könntet Ihr einfach eigene Regel-Dateien anlegen, wie eigentlich angedacht, aber auch das führte hier immer wieder zu Problemen, daher: Ihr könnt Eure Regel auch einfach in eine vorhandene Regel-Datei schreiben; auf dem hiesigen System ist das die 80-persistent-cd.rules im Verzeichnis /etc/udev/rules.d. Die Datei sieht inhaltlich ungefähr wie folgt aus:

# This file maintains persistent names for CD/DVD reader and writer devices.
# See udev(7) for syntax.
#
# Entries are automatically added by the 75-cd-aliases-generator.rules
# file; however you are also free to add your own entries provided you
# add the ENV{GENERATED}=1 flag to your own rules as well.
# ODD-DVD_SD-R6372 (pci-0000:00:1f.1-scsi-1:0:0:0)

SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:1f.1-scsi-1:0:0:0", SYMLINK+="cdrom", ENV{GENERATED}="1", RUN="/usr/bin/sudo /home/NUTZERNAME/test.sh"

# SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:1f.1-scsi-1:0:0:0", SYMLINK+="cdrw", ENV{GENERATED}="1"
# SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:1f.1-scsi-1:0:0:0", SYMLINK+="dvd", ENV{GENERATED}="1"
# SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:1f.1-scsi-1:0:0:0", SYMLINK+="dvdrw", ENV{GENERATED}="1"
# U3_Contour (pci-0000:00:1d.7-usb-0:3:1.0-scsi-0:0:0:1)
SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_SERIAL}=="SanDisk_U3_Contour_00001619C174122D-0:1", SYMLINK+="cdrom1", ENV{GENERATED}="1"
SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_SERIAL}=="SanDisk_U3_Contour_00001619C174122D-0:1", SYMLINK+="cdrw1", ENV{GENERATED}="1"

Relevant ist hier die erste SUBSYSTEM-Zeile: Bis zum RUN-Kommando ist alles UDEV-Standard, achtet lediglich auf den SYMLINK „cdrom“. Anschließend wird einfach das Skript über sudo (-> Root-Rechte) gestartet. Wie gesagt: Hier über sudo/Root-Rechte zu gehen, ist nicht wirklich schön, aber es trägt dazu bei, dass das Konzept überall funktioniert – Feintuning könnt Ihr selbst übernehmen. (Im übrigen: Das Risiko ist in diesem Szenario doch überschaubar.)

Und das war es auch schon: Legt Ihr ab sofort eine CD ins Laufwerk, startet UDEV das Skript und das Skript startet abcde – abcde rippt, taggt, konvertiert und wirft die CD dann wieder aus. Kleines Manko: FLACs und MP3s landen im selben Verzeichnis. Wollt Ihr diese automatisch trennen, könnt Ihr das über ein Skript lösen – beispielsweise so:

#!/bin/sh
a=$(pwd | rev | awk -F \/ '{print $1}' | rev) && mkdir $a && mv *.flac $a/
exit $?
[UPDATE] Wir mir hilfreicherweise mitgeteilt wurde, geht das auch besser:

a=$( basename "$PWD") && mkdir "$a" && mv *.flac "$a"

Dann dürfen die Ordner auch Leerzeichen enthalten. (Andererseits: Ordner DÜRFEN NIEMALS Leerzeichen enthalten – das tut man einfach nicht!)

Führt Ihr das im Verzeichnis eines Albums aus, liest das Skript den Ordnernamen aus, erstellt darin einen Ordner, der genauso heißt und verschiebt dann alle FLACs in diesen Ordner. Liegen also die Alben in der Form „Musik/Album1/“ vor und das Skript liegt in „Musik“, dann könnt Ihr im Terminal in den Album1-Ordner wechseln und das Skript per

nutzer@ubuntu:~/Musik/Album1$ sh ../mp3-flac-trenn-skript.sh

aufrufen. Für noch mehr Komfort müsstet Ihr dann am Skript rumschrauben, um es auf alle Alben/Ordner auf einmal loszulassen, die FLAC-Ordner gegebenenfalls umzubenennen und so weiter. Aber das ist wieder ein anderes Thema.

Update 2, 05/2021: abcde kann auch direkt in verschiedene Ausgabeverzeichnisse schreiben. Für jedes in OUTPUTTYPE definierte Format wird ein separater Prozess gestartet und das Format landet in der Variablen OUTPUT – und darüber lassen sich dann individuelle Ausgabeverzeichnisse setzen. Lange her, daher hier nur kurz.

Mirco Lang

Freier Journalist, Exil-Sauerländer, (ziemlich alter) Skateboarder, Dipl.-Inf.-Wirt, Einzelhandelskaufmann, Open-Source-Nerd, Checkmk-Handbuchschreiber. Ex-Saturn'ler, Ex-Data-Becker'ler, Ex-BSI'ler. Computer-Erstkontakt: ca. 1982 - der C64 des großen Bruders eines Freunds. Wenn Ihr hier mehr über Open Source, Linux und Bastelkram lesen und Tutonaut unterstützen möchtet: Über Kaffeesponsoring via Paypal.freue ich mich immer. Schon mal im Voraus: Danke! Nicht verpassen: cli.help und VoltAmpereWatt.de. Neu: Mastodon

14 Kommentare

    1. Ich habe es mit DVDs noch nie durchgespielt, aber der grundsätzliche Workflow funktioniert natürlich auch mit Kommandozeilen-DVD-Rippern. Ich würde mein Glück mit Handbrake versuchen. Eine CLI-Doku dazu gibt es unter https://handbrake.fr/docs/en/1.0.0/cli/cli-options.html. Natürlich müsste der DVD-Titel als späterer Datei-Titel herhalten – vermutlich (!) würde das über die Variable $1 funktionieren. Das Scrapern, also das Anreichern mit Metadaten, könnte dann wie gewohnt ein Mediacenter wie Kodi übernehmen.

      Sollte Handbrake mehrere Videodateien aus einer DVD erzeugen, müssten diese als Zwischenschritt noch verschmolzen werden – was vermutlich mit mkvmerge funktioniert. Genau genommen gibt es sogar ein Skript auf Github, das Rippen und Verschmelzen mit Handbrake und mkvmerge realisiert – leider ohne Dokumentation oder irgendwelche Hinweise: https://gist.github.com/postmodern/482fa8a9d810c40353e2

      Mööööglicherweise verlangen Handbrake oder mkvmerge während der Arbeit Interaktion mit dem User – sollte dem so sein, könnte man sein Glück mit dem Linux-Tool yes versuchen. Mit einer Pipe wie

      yes | apt-get install foobar-package
      

      werden alle Fragen, die das Programm, hier apt-get, eventuell stellt, mit yes beantwortet.

      Anders ausgedrückt: Ich bin überzeugt, dass es funktioniert – und dass es allerlei Kleinigkeiten zu beseitigen geben wird. Aber bei ein paar Hundert DVDs würde sich das allemal lohnen.

  1. Hi, erst mal danke für die Idee überhaupt, ich bin zufällig drauf gestossen und hab nur deshalb in den letzten zwei Tagen ein nutzlos rumliegendes Atom D420 Board reaktiviert, xubuntu + abcde installiert und das rippen läuft prima!
    Bis auf den letzten entscheidenden Teil, die Automatisierung mit udev. Mein Verzeichnis /etc/udev/rules.d war leer, also hab ich die hier gezeigte „80-persistent-cd.rules“ kopiert und die CDROM Laufwerksdaten gemäß meinem /sys/block/sr0 angepasst, aber es tut sich nichts beim Einlegen einer CD. Vlt. könnte man den Artikel um das genaue Vorgehen zur udev Konfiguration ergänzen? Grüße – Frank

    1. Udev hat mich hier auch lange genervt … Sofern Du auch den Pfad zum Skript angepasst hast, fällt mir da spontan leider auch nichts ein, zumal ich mich seitdem von Udev ferngehalten (und den Rechner nicht mehr geupdated) habe. Meinem Browser-Verlauf nach zu urteilen, habe ich mich damals unter folgender Adresse schlau gemacht:
      https://www.reactivated.net/writing_udev_rules.html#syntax

      Immer wieder gut – die Ubuntu-Users:
      https://wiki.ubuntuusers.de/udev/

      Vielleicht hilft davon etwas weiter?!

      1. Danke! Überraschenderweise ist die Lösung viel einfacher: ich hab einfach mal das Script unter „Removable Driver and Media“ -> „Multimedia“ -> „Play Audio CDs when inserted“ eingetragen und es funktioniert bis jetzt einwandfrei – ein Sieg der Faulheit! ;)

  2. Mist , jetz habe ich kein Linux, sondern nur Windows. Kann ich dir alle meine CD`s zusenden zum rippen, hihi.
    Nein nur Spass, ich lese gerne deinen Block, ist so erfrischend ehrlich

    Gruss

    Claus

      1. Nein Windows 7, und ich habe keine Ahnung von Scripten. Ich mache die alte Methode CD rein und Exact Audio Copy an, geht auch.

      2. Ich mache die alte Methode unter Win 7. CD rein und Exact Audio Copy an.
        Mit Scripten hatte ich noch keine Berührung..

      3. Ich wüsste keinen udev-Ersatz und auch für die Ripperei nach FLAC und MP3 gleichzeitig fiele mir spontan nichts ein; letzteres ließe sich zwar mit Skripten lösen, aber umständlich und immer noch nicht vollautomatisch. Wirklich lohnenswert ist das eh nur für große CD-Bestände oder Leute, die jeden Tag CDs kaufen – da bietet sich eh ein separates Gerät an, auf das dann eben auch genausogut LInux drauf kann. Auf dem Win-Produktiv-Rechner müsste man sich ansonsten zusätzlich noch um die Regulierung der Prozessor-Auslastung kümmern, da der Konverter das System sonst ständig ausbremsen würde.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Schaltfläche "Zurück zum Anfang"
Schließen

Ooopsi!

Bitte deaktiviere Deinen Adblocker.