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