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
libvorbiseinige 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.
Sehr gut schneidet Linux im direkten Vergleich mit Windows ab (Abbildung 2). Sämtliche Encoder arbeiten unter Linux deutlich schneller als mit Windows XP.
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.



