14.4. Encodieren mit dem Xvid-Codec

Xvid ist eine freie Programmbibliothek zum Encodieren von MPEG-4 ASP-Videostreams. Bevor du mit zu encodieren beginnst, musst du MEncoder so einstellen, dass er es unterstützt.

Dieses Handbuch beabsichtigt, sich vorwiegend durch dieselbe Art von Informationen auszuzeichnen wie x264's Encodier-Handbuch. Beginne deshalb damit, den ersten Teil dieses Handbuchs zu lesen.

14.4.1. Welche Optionen sollte ich verwenden, um die besten Resultate zu erzielen?

Bitte beginne mit der Durchsicht der Xvid-Sektion von MPlayers Manpage. Diese Sektion ist als Ergänzung zur Manpage zu verstehen.

Die Standardeinstellungen von Xvid sind bereits ein guter Kompromiss zwischen Geschwindigkeit und Qualität, deshalb kannst du ruhig bei ihnen bleiben, wenn nachfolgender Abschnitt dich allzusehr ins Grübeln bringt.

14.4.2. Encodieroptionen von Xvid

  • vhq Diese Einstellung betreffen den Entscheidungsalgorithmus für Macroblöcke, wobei gilt, je höher die Einstellung desto weiser die Entscheidung. Die Standardeinstellung kann für jede Encodierung sicher verwendet werden, während höhere Einstellungen immer für PSNR hilfreich, jedoch signifikant langsamer sind. Nimm bitte zur Kenntnis, dass ein besserer PSNR nicht notwedigerweise bedeutet, dass das Bild besser aussehen wird, aber er zeigt dir, dass du näher am Original bist. Wird er deaktiviert, beschleunigt dies die Encodierung spürbar; wenn Geschwindigkeit ein Kriterium für dich ist, kann dieser Kompromiss es wert sein.

  • bvhq Dies erledigt dieselbe Arbeit wie vhq, macht dies jedoch bei B-Frames. Es hat einen vernachlässigbar kleinen Einfluss auf die Geschwindigkeit, und verbessert geringfügig die Qualität (um etwa +0.1dB PSNR).

  • max_bframes Eine höhere Anzahl von erlaubten hintereinander folgenden B-frames verbessert gewöhnlich die Komprimierbarkeit, obwohl dies auch zu mehr Blockartefakten führt. Die Standardeinstellung ist ein guter Kompromiss zwischen Komprimierbarkeit und Qualität, aber wenn du Bitraten-hungrig bist kannst du sie bis auf 3 hochschrauben. Du kannst sie auch auf 1 oder 0 verringern, wenn du auf perfekte Qualität abzielst, wenngleich du in diesem Fall sicherstellen solltest, dass deine Zielbitrate hoch genug ist, um zu gewährleisten, dass der Encoder nicht die Quantisierer höher setzen muss, um den Wert zu erreichen.

  • bf_threshold Dies kontrolliert die B-Frame-Empfindlichkeit des Encoders, wobei ein höherer Wert dazu führt, dass mehr B-Frames angewendet werden (und umgekehrt). Diese Einstellung muss zusammen mit max_bframes verwendet werden; bist du Bitraten-hungrig, solltest du beides erhöhen, max_bframes und bf_threshold, während du max_bframes erhöhen und bf_threshold verringern kannst, sodass der Encoder B-Frames nur an Stellen anwendet, die diese auch wirklich brauchen. Eine niedrigere Zahl an max_bframes und ein höherer Wert bei bf_threshold ist möglicherweise keine kluge Wahl, da dies den Encoder zwingt, B-Frames in Stellen zu setzen, die nicht davon profitieren würden und dies daher die visuelle Qualität reduziert. Wie auch immer, wenn du mit Standalone-Playern kompatibel bleiben musst, die nur alte DivX-Profile unterstützen (der wiederum höchstens einen aufeinander folgenden B-Frame unterstützt), wäre dies dein einziger Weg, die Komprimierbarkeit mittels B-Frames zu verbessern.

  • trellis Optimiert den Quantisierungsprozess um einen optimalen Kompromiss zwischen PSNR und Bitrate zu erhalten, was signifikant Bit-sparend wirkt. Diese Bits können woanders im Video wieder verwendet werden und verbessern die visuelle Gesamtqualität. Du solltest es immer eingeschaltet lassen, da sein Einfluss auf die Qualität gewaltig ist. Gerade wenn du Geschwindigkeit haben willst, darfst du es nicht deaktivieren, solange du nicht vhq und alle anderen CPU-hungrigeren Optionen auf ein Minimum heruntergesetzt hast.

  • hq_ac Aktiviert die Vorhersagemethode für einen besseren Koeffizientenaufwand, was die Dateigröße leicht um etwa 0.15 bis 0.19% reduziert (was mit einer PSNR-Erhöhung um weniger als 0.01dB einhergeht), während es eine vernachlässigbar kleine Einwirkung auf die Geschwindigkeit hat. Es empfiehlt sich deshalb, dies immer eingeschaltet zu lassen.

  • cartoon Entworfen, um Kartoon-Inhalt besser zu encodieren, und hat keine Auswirkung auf die Geschwindigkeit, da es lediglich die Heuristiken zur Bestimmung des Modus für diese Art Inhalt abstimmt.

  • me_quality Diese Einstellung ist da, um die Präzision der Bewegungseinschätzung zu kontrollieren. Je höher me_quality, desto präziser wird die Schätzung der Originalbewegung sein, und desto besser wird der resultierende Ausschnitt die Originalbewegung einfangen.

    Die Standardeinstellung ist in jedem Fall die beste; folglich ist es nicht empfehlenswert, sie herunter zu drehen, es sei denn du hast es wirklich auf Geschwindigkeit abgesehen, da alle durch eine gute Bewegungseinschätzung gesparten Bits woanders verwendet würden, was die Gesamtqualität verbessern würde. Gehe deshalb nie unter 5, selbst wenn es der letzte Ausweg sein sollte.

  • chroma_me Verbessert die Bewegungsabschätzung dadurch, dass auch die chroma-(Farb)-Informationen einbezogen werden, wobei me_quality alleine nur luma (Graustufen) verwendet. Dies verlangsamt die Encodierung um 5-10%, verbessert aber die visuelle Qualität durch Reduzieren von Blockeffekten ein wenig und reduziert die Dateigröße um rund 1.3%. Wenn du Geschwindigkeit haben willst, solltest du diese Option deaktivieren, bevor du anfängst zu überlegen, me_quality zu reduzieren.

  • chroma_opt Ist dafür vorgesehen, die chroma-Bildqualität rund um reine weiße/schwarze Kanten zu verbessern, eher noch als die Kompression zu verbessern. Dies kann dabei helfen, den "Rote Stufen"-Effekt zu reduzieren.

  • lumi_mask Versucht, weniger Bitrate auf den Teil eines Bildes zu übergeben, der vom menschlichen Auge nicht gut zu sehen ist, was dem Encoder erlauben sollte, die eingesparten Bits auf wichtigere Teile des Bildes anzuwenden. Die durch diese Option gewonnene Encodierungsqualität hängt in hohem Maße von persönlichen Vorlieben und von Monitortyp und dessen Einstellungen ab (typischerweise wird es nicht gut aussehen, wenn er hell oder ein TFT-Monitor ist).

  • qpel Hebt die Anzahl Kandidaten der Bewegungsvektoren durch Erhöhung der Präzision der Bewegungsabschätzung von einem halben Pixel (halfpel) auf ein viertel Pixel (quarterpel) an. Die Idee dahinter ist, bessere Bewegungsvektoren zu finden, was wiederum die Bitrate reduziert (deshalb wird die Qualität verbessert). Bewegungsvektoren mit viertel Pixel Präzision brauchen ein paar Extrabits für die Codierung, die Bewegungsvektoren ergeben aber nicht immer ein (viel) besseres Resultat. Sehr oft verbraucht der Codec dennoch Bits für die Extrapräzision, jedoch wird im Gegenzug eine geringe oder keine Extraqualität gewonnen. Unglücklicherweise gibt es keinen Weg, den möglichen Gewinn von qpel vorzuaussagen, also musst du eigentlich mit und ohne encodieren, um sicher zu gehen.

    qpel kann fast die doppelte Encodierzeit in Anspruch nehmen und erfordert etwa 25% mehr Verarbeitungsleistung fürs Decodieren. Es wird nicht von allen Standalone-Playern unterstützt.

  • gmc Versucht, Bits beim Schwenken von Szenen einzusparen, indem es einen einzelnen Bewegungsvektor für den gesamten Frame verwendet. Dies erhöht fast immer den PSNR, verlangsamt aber signifikant die Encodierung (genauso wie die Decodierung). Deshalb solltest du es nur nutzen, wenn du vhq auf das Maximum gestellt hast. Xvids GMC ist höher entwickelt als das von DivX, wird aber nur von ein paar Standalone-Playern unterstützt.

14.4.3. Encodierung Profile

Xvid unterstützt Encodierungsprofile über die Option profile, die dazu verwendet werden, den Eigenschaften des Xvid-Videostreams Restriktionen so aufzuerlegen, dass es überall dort abgespielt werden kann, wo das gewählte Profil unterstützt wird. Die Restriktionen beziehen sich auf Auflösungen, Bitraten und bestimmte MPEG-4-Features. Die folgende Tabelle zeigt, was jedes Profil unterstützt.

 EinfachEinfach erweitertDivX
Profilname0123012345HandheldPortable NTSCPortable PALHome Theater NTSCHome Theater PALHDTV
Breite [Pixel]1761763523521761763523523527201763523527207201280
Höhe [Pixel]144144288288144144288288576576144240288480576720
Framerate [fps]15151515303015303030153025302530
Max. mittlere Bitrate [kbps]646412838412812838476830008000537.648544854485448549708.4
Höchstwert mittlere Bitrate über 3 Sek. [kbps]          800800080008000800016000
Max. B-Frames0000      011112
MPEG-Quantisierung    XXXXXX      
Adaptive Quantisierung    XXXXXXXXXXXX
Interlaced Encodierung    XXXXXX   XXX
Viertelpixel    XXXXXX      
Globale Bewegungskompensierung    XXXXXX      

14.4.4. Encodierungseinstellungen Beispiele

Die folgenden Einstellungen sind Beispiele unterschiedlicher Kombinationen von Encodierungsoptionen, die den Kompromiss zwischen Geschwindigkeit gegenüber Qualität bei gleicher Zielbitrate betreffen.

Alle Encodierungseinstellungen wurden auf einem Beispielvideo mit 720x448 @30000/1001 fps getestet, die Zielbitrate war 900kbps, und der Rechner war ein AMD-64 3400+ mit 2400 MHz im 64bit-Modus. Jede Encodierungseinstellung zeichnet sich aus durch die gemessene Encodiergeschwindigkeit (in Frames pro Sekunde) und den PSNR-Verlust (in dB) im Vergleich zu Einstellungen für "sehr hohe Qualität". Bitte hab Verständnis, dass du abhängig von deiner Quelldatei, deinem Rechnertyp und Entwicklungsfortschritten sehr unterschiedliche Resultate erzielen wirst.

BeschreibungEncodieroptionenGeschwindigkeit (in fps)Relativer PSNR-Verlust (in dB)
Sehr hohe Qualitätchroma_opt:vhq=4:bvhq=1:quant_type=mpeg16fps0dB
Hohe Qualitätvhq=2:bvhq=1:chroma_opt:quant_type=mpeg18fps-0.1dB
Schnellturbo:vhq=028fps-0.69dB
Echtzeitturbo:nochroma_me:notrellis:max_bframes=0:vhq=038fps-1.48dB