Musik-CDs ins freie OGG-Format umwandeln

Aus LinuxUser 04/2007

Musik-CDs ins freie OGG-Format umwandeln

Der richtige Dreh

Wer seine Musiksammlung von CD auf den PC überspielen möchte braucht Zeit und einen guten Encoder. LinuxUser hat sich die Alternativen zu den Standardwerkzeugen angeschaut und verrät, an welchen Reglern Sie drehen müssen.

MP3-Dateien erstellt man unter Linux mit lame, OGG-Vorbis-Dateien mit oggenc – theoretisch. In der Praxis führt bei MP3-Encodern kein Weg an Lame vorbei, für OGG-Fans gibt es aber zwei interessante Alternativen zum Standardtool:

  • Der Aotuv-Fork (Aoyumi’s Tuned Vorbis) [1] optimiert OGG-Dateien mit kleinen Bitraten auf Klangqualität. Bei Bitraten unter 128 KBit/s klingen OGG-Vorbis-Dateien in der Regel schlechter als vergleichbare MP3s. Die Oggenc-Version von Aoyumi behebt dieses Manko. Seit Version 1.1.1 benutzt libvorbis einige Patches von Aoyumi, die Änderungen der Versionen 4.51 und Beta5 (auf der Heft-CD) sind aber noch nicht eingepflegt.
  • Der Lancer-Fork von Blacksword [2] ist auf Geschwindigkeit getrimmt. Dazu stellt Blacksword verschiedene Windows-Binaries bereit, die Optimierungen für einzelne Prozessorfamilien enthalten. Obwohl Blacksword auf seiner Homepage einen Patch mit den Sourcen zum Download bereitstellt, gibt es von Lancer noch keine Linux-Version. Das Windows-Programm lässt sich aber über Wine auch unter Linux nutzen.

Optimierungen

Generell gibt es zwei Möglichkeiten, ein Programm schneller zu machen: Der Entwickler stimmt entweder den Code auf einen bestimmten Prozessor oder eine Aufgabe optimal ab, oder er übergibt beim Übersetzen dem C-Compiler CPU-spezifische Optionen. In beiden Fällen arbeitet das fertige Programm dann nur noch auf dem passenden Prozessor. Für bestmögliche Ergebnisse müssten Linux-Distributoren folglich nicht nur separate Versionen für 32- und 64-Bit-Rechner zur Verfügung stellen, sondern auch für Athlon- und Duron-Rechner, für Pentium-M- und Pentium-4-Systeme und so weiter.

Den Code zu optimieren bringt jedoch deutlich mehr, als beim Kompilieren spezifische Parameter zu übergeben. Die Distributoren verzichten deshalb – aus verständlichen Gründen – auf Tuning dieser Art. Da die meiste Linux-Software im Quellcode vorliegt, steht es jedermann frei, selbst zu feilen und Parameter zu ändern (siehe Kasten “Compiler tunen”).

Compiler tunen

Moderne Prozessoren bringen spezielle Befehlssatzerweiterungen mit, um bestimmte Rechenaufgaben nahezu parallel ablaufen. Zu den bekanntesten Vertretern der Gattung zählen “3DNow!” von AMD und “SSE” (Streaming SIMD Extensions) von Intel. Da nicht jede CPU diese Befehlssätze unterstützt, muss man beim configure-Aufruf dem Compiler explizit mitteilen, welche Erweiterungen er beim Übersetzen des Programms nutzen soll. Inwieweit das Programm dann von dieser Optimierung tatsächlich Gebrauch macht, hängt allerdings sehr stark vom Quellcode ab.

Auf der Heft-CD finden Sie im Verzeichnis LinuxUser/oggmp3/ogg die Datei ogg-suite.tar.gz. Sie enthält die aktuell stabile Version von libogg, libvorbis und den vorbis-tools. Im Tarball findet sich zudem das Skript compile-vorbis.sh: Es übersetzt und installiert in einem Aufruf alle drei Programmteile. Um die Ogg-Suite auf Ihren Prozessor zu optimieren, müssen Sie in diesem Skript in Zeile 2 die Parameter für CFLAGS= anpassen.

Die passenden Optionen verrät Ihnen das Script gcccpuopt[3], das Sie ebenfalls im Tarball finden. Alternativ rufen Sie den Befehl cat /proc/cpuinfo auf. Zeigt er unter flags zum Beispiel sse2 an, unterstützt Ihr Prozessor die SSE2-Erweiterung. Details zur Einteilung von Intel-Prozessoren nach Familie und Modell finden Sie auch in der Wikipedia [4].

Das Skript benutzt für die Installation sudo und funktioniert somit unter Suse und Ubuntu ohne weitere Änderungen. Benutzer anderer Distributionen ändern über visudo die Sudoers-Datei: Über die beiden Zeilen

Defaults targetpw
ALL ALL=(ALL) ALL

kann jeder Benutzer über die Eingabe des Root-Passwortes administrative Aufgaben vornehmen.

In den Tests auf einem Pentium-M-System brachte die mit den Parametern CFLAGS=""-march=pentium-m -mfpmath=sse2 -O3" selbst kompilierte Version von libogg, libvorbis und der vorbis-tools allerdings keine nennenswerten Geschwindigkeitsvorteile. Auch ein Test, die gesamte Suite mit dem Intel-C-Compiler icc zu übersetzen sorgte eher für Ernüchterung: Für die Referenzdatei benötigte das mit dem Intel-Compiler übersetzte oggenc auf einem 1,4 GHz schnellen Pentium M rund 30 Sekunden. Die mit GCC 4.1 übersetzte Standardversion von Suse benötigte für dieselbe Aufgabe nur 20 Sekunden.

Schnell, schneller

Wer vor hat, eine größere Menge an CDs ins MP3- oder OGG-Format umzuwandeln, sollte sich nach einem Rechner mit 64-Bit-Prozessor umschauen. Egal welche Version von oggenc oder lame Sie benutzen: Mit einem 64-Bit-Betriebssystem dauert das Encoding rund halb so lange, wie auf einem 32-Bit-System (Abbildung 1). So braucht oggenc auf einem 1,6 GHz schnellen 32-Bit-Rechner mit Core-Duo-Prozessor 19 Sekunden, um “Goldeneye” aus einer WAV-Datei nach OGG-Vorbis umzuwandeln. Die gleiche Aufgabe erledigt der Encoder auf einem 2,2 GHz schnellen AMD-Athlon mit der 64-Bit-Version von Open Suse 10.2 in nur 10,5 Sekunden.

Details zu den Tests entnehmen Sie dem Kasten “So haben wir getestet”. Die Test zeigen zugleich, welches Potential durch den nicht optimierten Code verschenkt wird. So arbeitet oggenc auf einer Dualcore-CPU von Intel nicht schneller als auf einem gleich getakteten Pentium-M-Prozessor. Die zweite CPU schläft quasi während des Encodings. Allein die Lancer-Version nutzt beide Kerne. Sie arbeitet auf einem Core Duo doppelt so schnell, als auf einem Single-Core-Prozessor.

Abbildung 1: Drei OGG-Vorbis-Encoder im Vergleich: Der Lancer-Fork arbeitet deutlich schneller als die auf hohe Qualität getrimmte Aotuv-Version. Die Standard-Version von     <code srcset=

oggenc ist teilweise um den Faktor 4 langsamer.” width=”300″ height=”136″ /> Abbildung 1: Drei OGG-Vorbis-Encoder im Vergleich: Der Lancer-Fork arbeitet deutlich schneller als die auf hohe Qualität getrimmte Aotuv-Version. Die Standard-Version von oggenc ist teilweise um den Faktor 4 langsamer.

Sehr gut schneidet Linux im direkten Vergleich mit Windows ab (Abbildung 2). Sämtliche Encoder arbeiten unter Linux deutlich schneller als mit Windows XP.

Abbildung 2: 4:0 für Linux: Sowohl     <code srcset=

lame als auch alle drei oggenc-Varianten arbeitet unter Windows deutlich langsamer.” width=”300″ height=”203″ /> Abbildung 2: 4:0 für Linux: Sowohl lame als auch alle drei oggenc-Varianten arbeitet unter Windows deutlich langsamer.

So haben wir getestet

Als Testsong benutzten wir Track 9 (“Goldeneye”) aus dem Album “Wildest Dreams” von Tina Turner. Die Größe der mit cdparanoia gerippten WAV-Datei beträgt 34,8 MByte (36632444 Byte). Als Betriebssystem kam Open Suse 10.2 zum Einsatz (auf 64-Bit-Rechnern in der 64-Bit-Version).

Oggenc (Standard) entspricht jeweils der von Suse kompilierten oggenc-Version. Die Aotuv-Version kompilierten wir selbst, ohne spezielle GCC-Parameter. Von lame verwendeten wir Version 3.97. Da es von Lancer keine Linux-Version gibt, setzten wir den Encoder mit Wine zusammen ein.

Die Vergleichstest zwischen Windows und Linux fanden auf einem IBM-Thinkpad mit einem 1,6 GHz schnellen Intel-Core-Duo-Prozessor statt (T2300). Als Betriebssystem benutzten wir Windows XP mit Service Pack 2 und Open Suse 10.2. Für sämtliche Tests starteten wir oggenc und lame von der Kommandozeile aus ohne zusätzliche Parameter.

Klangwunder

OGG-Vorbis genießt unter Audiophilen schon immer den Ruf der besonders guten Qualität. Allerdings unterlag der Encoder in den meisten Tests dem direkten Konkurrenten lame bei Bitraten von 128 Kbit/s oder kleiner. Der Japaner Aoyumi modifizierte deshalb den Code von libvorbis, damit oggenc auch bei kleinen Bitraten eine bessere Klangqualität bietet. Die Aotuv-Version ersetzt nicht oggenc selbst, sondern nur die darunterliegende Bibliothek.

Ein statisches Oggenc-Binary für die Versionen beta4.51 und beta5 finden Sie auf der Heft-CD im Verzeichnis LinuxUser/oggmp3/ogg/aotuv. Auch für Debian und Ubuntu gibt es fertige Pakete [5].

Einige Änderungen von Aoyumi flossen bereits in Version 1.1.2 von libvorbis ein. In den Hörtests gelang es uns denn auch nicht, deutliche Unterschiede zwischen der Aotuv-Version und der Originalversion von Suse festzustellen. Selbst mit der Option -q1, die OGG-Dateien mit einer durchschnittlichen Bitrate von 78 Kbit/s erstellt, lassen sich nur an einzelnen Stellen Unterschiede zur originalen WAV-Datei erkennen. Oggenc gehört damit bei kleinen Dateien zu den klar besten Encodern, wie unabhängige Hörtests [6] ebenfalls zeigen.

Auch im direkten Vergleich zu lame kommt die Aotuv-Version von oggenc gut weg: Während Lame für eine MP3-Datei mit einer variablen Bitrate von rund 180 KBit/s auf unserem Testsystem rund 42 Sekunden brauchte, erledigt oggenc dieselbe Arbeit in knapp 20 Sekunden (siehe Tabelle “Größenvergleich”). Beachten Sie dabei die unterschiedliche Verwendung des Parameter -q.

Oggenc kennt im Gegensatz zu Lame keinen schnellen Modus, um bei einer konstanten Bitrate qualitativ bessere oder schlechtere Dateien anzulegen, wie dies Lame in der Grundeinstellung tut. Da die Bitrate aber letztendlich auf die Qualität den größeren Einfluss hat als spezielle Optimierungsfunktionen, scheint dieser Ansatz sowieso fragwürdig.

Größenvergleich

Encoder Parameter Bitrate Dateigröße Encoding-Zeit
oggenc -q1 78,1 2 MByte 18 Sekunden
lame -V10 81.4 2,1 MByte 42 Sekunden
oggenc -q3 109,0 2,8 MByte 18 Sekunden
lame -V5 110,7 2,8 MByte 42 Sekunden
oggenc -q6 179,9 4,5 MByte 18 Sekunden
lame -V2 181,8 4,5 MByte 42 Sekunden
lame -q1 128 (fix) 3,2 MByte 63 Sekunden
lame -q3 128 (fix) 3,2 MByte 32 Sekunden
lame -q10 128 (fix) 3,2 MByte 8 Sekunden

Speedstar

Der mit Abstand schnellste Encoder für OGG-Vorbis-Dateien heißt Lancer. Ein Programmierer mit dem Pseudonym Blacksword nahm dazu die Sourcen der Aotuv-Version von libvorbis und fügte dieser sowie libogg und den vorbis-tools eigene Änderungen hinzu. Die Änderungen von Lancer nutzen die Befehlssätze der einzelnen Prozessoren optimal aus, es gibt deshalb mehrere Binaries für verschiedene CPU-Typen – allerdings nur für Windows. Der Lancer-Code lässt sich theoretisch auch unter Linux kompilieren, was aber diverse Änderungen am Code erfordert – und die hat bis jetzt niemand (erfolgreich) vorgenommen.

Generell müssen Sie zunächst die libogg und die libvorbis-Version von Aotuv patchen, danach die Vorbis-Tools. Die nötigen Codeflicken liegen auf der Homepage von Blacksword [2] und auf der Heft-CD im Verzeichnis LinuxUser/oggmp3/ogg/lancer bereit. Das Einspielen der Patches zur Libvorbis-Version von Aotuv bereitet keine Probleme; die neue Version lässt sich ohne Fehler übersetzen, sobald Sie in der Datei lib/psy.c in Zeile 9667 den #endif-Eintrag auskommentieren. Auch libogg kompiliert unter Linux mit den Patches, sofern Sie an der Datei bitwise.c einige Änderungen vornehmen. Mit der neuen Version von libvorbis lassen sich jedoch die vorbis-tools nicht mehr übersetzen, und ohne neues oggenc-Binary bringt die ganze Aktion nichts. Auch scheint Lancer eine spezielle Oggenc2-Version benutzt zu haben.

Bis sich ein Linux-Programmierer ein Herz fasst und auch für Linux Lancer-Builds baut – oder die Xiph-Entwickler Teile von Lancer in den offiziellen OGG-Vorbis-Code übernehmen – können Sie die EXE-Dateien auf der Heft-CD mit dem Windows-Emulator wine benutzen. Der Geschwindigkeitsvorteil ist enorm (siehe Abbildung 1), Qualitätsverluste konnten wir nicht feststellen.

Glossar

Fork

Von einem Fork (englisch: Gabel) spricht man, wenn sich ein neues Projekt aus einem bestehenden Softwareprojekt abzweigt und seinen eigenen Code entwickelt, anstatt am ursprünglichen Code mitzuarbeiten.

LinuxUser 04/2007 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben