7.4. Encodieren mit dem Xvid-Codec

7.4. Encodieren mit dem `Xvid`-Codec
Zurück | Kapitel 7. Encodieren mit MEncoder | Weiter

## 7.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.

### 7.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.

### 7.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. `Xvid`s GMC ist höher entwickelt als das von DivX, wird aber nur von ein paar Standalone-Playern unterstützt.

### 7.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.

| Einfach | Einfach erweitert | DivX
Profilname | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 4 | 5 | Handheld | Portable NTSC | Portable PAL | Home Theater NTSC | Home Theater PAL | HDTV
Breite [Pixel] | 176 | 176 | 352 | 352 | 176 | 176 | 352 | 352 | 352 | 720 | 176 | 352 | 352 | 720 | 720 | 1280
Höhe [Pixel] | 144 | 144 | 288 | 288 | 144 | 144 | 288 | 288 | 576 | 576 | 144 | 240 | 288 | 480 | 576 | 720
Framerate [fps] | 15 | 15 | 15 | 15 | 30 | 30 | 15 | 30 | 30 | 30 | 15 | 30 | 25 | 30 | 25 | 30
Max. mittlere Bitrate [kbps] | 64 | 64 | 128 | 384 | 128 | 128 | 384 | 768 | 3000 | 8000 | 537.6 | 4854 | 4854 | 4854 | 4854 | 9708.4
Höchstwert mittlere Bitrate über 3 Sek. [kbps] |  |  |  |  |  |  |  |  |  |  | 800 | 8000 | 8000 | 8000 | 8000 | 16000
Max. B-Frames | 0 | 0 | 0 | 0 |  |  |  |  |  |  | 0 | 1 | 1 | 1 | 1 | 2
MPEG-Quantisierung |  |  |  |  | X | X | X | X | X | X |  |  |  |  |  |
Adaptive Quantisierung |  |  |  |  | X | X | X | X | X | X | X | X | X | X | X | X
Interlaced Encodierung |  |  |  |  | X | X | X | X | X | X |  |  |  | X | X | X
Viertelpixel |  |  |  |  | X | X | X | X | X | X |  |  |  |  |  |
Globale Bewegungskompensierung |  |  |  |  | X | X | X | X | X | X |  |  |  |  |  |

### 7.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.

Beschreibung | Encodieroptionen | Geschwindigkeit (in fps) | Relativer PSNR-Verlust (in dB)
--- | --- | --- | ---
Sehr hohe Qualität | `chroma_opt:vhq=4:bvhq=1:quant_type=mpeg` | 16fps | 0dB
Hohe Qualität | `vhq=2:bvhq=1:chroma_opt:quant_type=mpeg` | 18fps | -0.1dB
Schnell | `turbo:vhq=0` | 28fps | -0.69dB
Echtzeit | `turbo:nochroma_me:notrellis:max_bframes=0:vhq=0` | 38fps | -1.48dB

Zurück | Nach oben | Weiter
7.3. Encodieren mit der `libavcodec` Codecfamilie | Zum Anfang | 7.5. Encodieren mit dem `x264`-Codec