10.1. Erzeugen eines hochwertigen MPEG-4-Rips ("DivX") eines DVD-Films
Zurück | Kapitel 10. Encodieren mit MEncoder | Weiter

## 10.1. Erzeugen eines hochwertigen MPEG-4-Rips ("DivX") eines DVD-Films

Eine häufig gestellte Frage ist "Wie mache ich den hochwertigsten Rip für eine gegebene Größe?". Eine weitere Frage ist "Wie mache ich den qualitativ bestmöglichen DVD-Rip? Die Dateigröße ist mir egal, ich will einfach nur die beste Qualität."

Die letzte Frage ist zumindest etwas falsch gestellt. Wenn du dir schließlich keine Gedanken um die Dateigröße machst, warum kopierst Du dann nicht einfach den kompletten MPEG-2-Videostream der DVD? Sicherlich, deine AVI wird am Ende 5GB groß sein, so oder so, jedoch ist dies mit Sicherheit deine beste Option, wenn du die beste Qualität erhalten willst und dich nicht um die Größe kümmerst.

Tatsache ist, der Grund eine DVD in MPEG-4 umzuencodieren ist gerade weil dir die Größe wichtig ist.

Es ist sehr schwierig, ein Rezept zum Erzeugen eines sehr hochwertigen DVD-Rips anzubieten. Es gilt mehrere Faktoren zu berücksichtigen, und du solltest dich mit diesen Details auskennen oder du wirst voraussichtlich am Ende von den Resultaten enttäuscht. Nachfolgend werden wir einige dieser Themen etwas näher untersuchen und uns danach ein Beispiel ansehen. Wir gehen davon aus, dass Du `libavcodec` zum Encodieren des Videos verwendest, obwohl diese Theorie genauso gut auf andere Codecs zutrifft.

Ist dies alles zu viel für dich, solltest du womöglich auf eins der vielen guten Frontends zurückgreifen, die in der MEncoder-Sektion unserer diesbezüglichen Projektseite zu finden sind. Auf diese Weise solltest du in der Lage sein, hochwertige Rips zu erhalten ohne viel nachdenken zu müssen, da die meisten dieser Tools dazu entworfen wurden, clevere Entscheidungen für dich zu treffen.

### 10.1.1. Vorbereitung aufs Encodieren: Identifiziere Quellmaterial und Framerate

Bevor du über das Encodieren eines Films nachdenkst, solltest du einige einleitende Schritte vornehmen.

Der erste und allerwichtigste Schritt vor dem Encodieren sollte sein, festzustellen, mit welchem Inhaltstyp du umgehst. Kommt dein Quellmaterial von einer DVD oder einem Rundfunk-/Kabel-/Satelliten-TV, wird es in einem von zwei Formaten abgespeichert: NTSC für Nord-Amerika und Japan, PAL für Europa usw. Es ist wichtig, sich klar zu machen, dass dies ganz einfach die Formatierung für die Präsentation auf einem Fernsehgerät ist und häufig nicht mit dem originalen Format des Films korrespondiert. Die Erfahrung zeigt, dass NTSC-Material schwieriger zu encodieren ist, da mehr Elemente in der Quelle zu identifizieren sind. Um eine geeignete Encodierung zu produzieren, solltest du das originale Format kennen. Fehler, dies sollte man berücksichtigen, führen zu diversen Fehlerstellen in deiner Encodierung, einschließlich hässlicher Kammartefakte (combing/interlacing) und doppelten oder gar verlorenen Frames. Abgesehen davon, dass sie unschön sind, beeinflussen diese Artefakte die Codierungseffizienz negativ: Du erhältst eine schlechtere Qualität pro Bitrateneinheit.

#### 10.1.1.1. Identifizieren der Quellframerate

Hier ist eine Liste der verbreiteten Typen des Quellmaterials, in der Du diese und ihre Eigenschaften voraussichtlich finden wirst:

- Standardfilm: Produziert für theatralische Anzeige bei 24fps.

- PAL-Video: Aufgenommen mit einer PAL-Videokamera bei 50 Feldern pro Sekunde. Ein Feld besteht ganz einfach aus den ungerade oder gerade nummerierten Zeilen eines Frames. Das Fernsehen wurde entworfen, diese Felder als billige Form einer analogen Komprimierung im Wechsel zu aktualisieren. Das menschliche Auge kompensiert dies angeblich, aber wenn du Interlacing einmal verstanden hast, wirst du lernen, es auch auf dem TV-Bildschirm zu erkennen und nie wieder Spass am Fernsehen haben. Zwei Felder machen keinen kompletten Frame, da sie in einer 50-stel Sekunde zeitlich getrennt aufgenommen werden und so nicht Schlange stehen solange keine Bewegung da ist.

- NTSC-Video: Aufgenommen mit einer NTSC-Videokamera bei 60000/1001 Feldern pro Sekunde oder 60 Feldern pro Sekunde zu Zeiten vor dem Farbfernsehen. Ansonsten ähnlich wie PAL.

- Animation: Üblicherweise bei 24fps gezeichnet, kommt jedoch auch in Varianten mit gemischter Framerate vor.

- Computer Graphics (CG): Kann irgendeine Framerate sein, jedoch sind einige üblicher als andere; 24 und 30 Frames pro Sekunde sind typisch für NTSC und 25fps ist typisch für PAL.

- Alter Film: Diverse niedrigere Frameraten.

#### 10.1.1.2. Identifizieren des Quellmaterials

Filme, die sich aus Frames zusammensetzen, werden den progressiven zugeordnet, während die aus unabhängigen Feldern bestehenden entweder interlaced (engl. für verschachteln) oder Video genannt werden - somit ist letzterer Terminus zweideutig.

Um das ganze noch komplizierter zu machen, sind manche Filme ein Gemisch aus einigen den oben beschriebenen Formen.

Das wichtigste Unterscheidungsmerkmal zwischen all diesen Formaten ist, dass einige Frame-basiert, andere wiederum Feld-basiert sind. Immer wenn ein Film für die Anzeige auf dem Fernseher vorbereitet wird (einschließlich DVD), wird er in ein Feld-basiertes Format konvertiert. Die verschiedenen Methoden, mit denen dies bewerkstelligt werden kann, werden zusammengenommen als "telecine" bezeichnet, von welchen das verrufene NTSC "3:2 pulldown" eine Abart darstellt. Sofern das Originalmaterial nicht Feld-basiert war (bei gleicher Feldrate), erhältst du einen Film in einem anderen Format als das Original.

Es gibt einige verbreitete Typen des pulldown:

- PAL 2:2 pulldown: Das schönste von allen. Jeder Frame wird durch das wechselweise Extrahieren und Anzeigen der geradzahligen und ungeradzahligen Zeilen für die Dauer von zwei Feldern dargestellt. Hat das Originalmaterial 24fps, beschleunigt dieser Prozess den Film um 4%.

- PAL 2:2:2:2:2:2:2:2:2:2:2:3 pulldown: Jeder 12-te Frame, anstatt nur jeder 2-te, wird für die Dauer von zwei Feldern dargestellt. Dies vermeidet die 4% Geschwindigkeitssteigerung, macht jedoch das Umkehren des Prozesses viel schwieriger. Es ist üblicherweise in Musical-Produktionen zu sehen, wo das Anpassen der Geschwindigkeit um 4% sicherlich das musikalische Ergebnis kaputt machen würde.

- NTSC 3:2 telecine: Frames werden abwechselnd für die Dauer von 3 oder 2 Feldern angezeigt. Dies verleiht der Feldrate das 2.5-fache der originalen Framerate. Das Resultat wird dadurch auch leicht von 60 Feldern pro Sekunde auf 60000/1001 Felder pro Sekunde verlangsamt, um die NTSC-Felddrate beizubehalten.

- NTSC 2:2 pulldown: Verwendet zur Darstellung von 30fps Material auf NTSC. Schön, genau wie das 2:2 PAL pulldown.

Es gibt auch Methoden zur Konvertierung zwischen NTSC- und PAL-Video, jedoch liegen diese Themen jenseits des Rahmens dieser Anleitung. Wenn du auf solch einen Film stößt und ihn encodieren willst, solltest du besser eine Kopie im originalen Format suchen. Die Konvertierung zwischen diesen beiden Formaten ist hochdestruktiv und kann nicht spurlos rückgängig gemacht werden, somit wird deine Encodierung außerordentlich darunter leiden, wenn sie aus einer konvertierten Quelle erzeugt wurde.

Wenn ein Video auf DVD gespeichert wird, werden fortlaufend Feldpaare als Frames gruppiert, auch wenn nicht beabsichtigt ist, diese gleichzeitig zu zeigen. Der bei DVD und digitalem TV verwendete MPEG-2-Standard bietet einen Weg für beides, die originalen progressiven Frames zu encodieren und die Anzahl der Felder, für die ein Frame gezeigt werden soll, im Header dieses Frames zu speichern. Wurde diese Methode angewandt, wird dieser Film oft als "soft telecined" beschrieben, da der Prozess eher nur den DVD-Player anweist, pulldown auf den Film anzuwenden, als den Film selbst abzuändern. Dieser Fall sollte möglichst bevorzugt werden, da er (eigentlich ignoriert) leicht vom Encoder rückgängig gemacht werden kann und da er die maximale Qualität beibehält. Wie auch immer, viele DVD- und Rundfunkproduktionsstudios verwenden keine passenden Encodierungstechniken, sie produzieren stattdessen Filme mit "hard telecine", bei denen Felder sogar in encodiertes MPEG-2 dupliziert werden.

Die Vorgehensweisen für den Umgang mit solchen Fällen werden später in diesem Handbuch behandelt. Wir lassen dich jetzt mit einigen Anleitungen zur Identifizierung der Materialtypen zurück, mit denen du es zu tun hast:

NTSC-Bereiche:

- Wenn MPlayer angibt, dass die Framerate während des Betrachtens des Films zu 24000/1001 gewechselt hat und diese nie wieder zurückwechselt, handelt es sich meist mit Sicherheit um progressiven Inhalt, der "soft telecined" wurde.

- Wenn MPlayer anzeigt, dass die Framerate zwischen 24000/1001 und 30000/1001 vor und zurück wechselt, und Du siehst hin und wieder Kammartefakte, dann gibt es mehrere Möglichkeiten. Die Segmente mit 24000/1001 fps sind meist mit Sicherheit progressiver Inhalt, "soft telecined", jedoch könnten die Teile mit 30000/1001 fps entweder "hard telecined" 24000/1001 fps Inhalt oder 60000/1001 Felder pro Sekunde NTSC-Video sein. Verwende die selben Richtwerte wie in den folgenden zwei Fällen, um zu bestimmen, um was es sich handelt.

- Wenn MPlayer nie einen Frameratenwechsel anzeigt und jeder einzelne Frame mit Bewegung gekämmt (combed) erscheint, ist dein Film ein NTSC-Video bei 60000/1001 Feldern pro Sekunde.

- Wenn MPlayer nie einen Frameratenwechsel anzeigt und zwei von fünf Frames gekämmt (combed) erscheinen, ist der Inhalt deines Films "hard telecined" 24000/1001 fps.

PAL-Bereiche:

- Wenn du niemals irgend ein Combing siehst, ist dein Film 2:2 pulldown.

- Siehst du alle halbe Sekunde abwechselnd ein- und ausgehendes Combing, dann ist dein Film 2:2:2:2:2:2:2:2:2:2:2:3 pulldown.

- Hast du immer während Bewegungen Combing gesehen, dann ist dein Film PAL-Video bei 50 Feldern pro Sekunde.

### Tipp:

MPlayer kann das Filmplayback mittels der Option -speed verlangsamen oder Frame für Frame abspielen. Versuche `-speed` 0.2 zu verwenden, um den Film sehr lamgsam anzusehen oder drücke wiederholt die Taste ".", um jeweils einen Frame abzuspielen und identifiziere dann das Muster, falls du bei voller Geschwindigkeit nichts erkennen kannst.

### 10.1.2. Konstanter Quantisierungsparameter vs. Multipass

Es ist möglich, deinen Film in einer großen Auswahl von Qualitäten zu encodieren. Mit modernen Videoencodern und ein wenig Pre-Codec-Kompression (Herunterskalierung und Rauschunterdrückung), kann eine sehr gute Qualität bei 700 MB für einen 90-110-minütigen Breitwandfilm erreicht werden. Des Weiteren können alle Filme - sogar die längsten - mit nahezu perfekter Qualität bei 1400 MB encodiert werden.

Es gibt drei Annäherungen für das Encodieren eines Videos: konstante Bitrate (CBR), konstanter Quantisierungsparameter und Multipass (ABR, oder mittlere Bitrate).

Die Komplexität der Frames eines Filmes und somit die Anzahl der für deren Komprimierung erforderlichen Bits kann von einer Szene zur anderen außerordentlich variieren. Moderne Videoencoder können sich durch Variieren der Bitrate an diese Anforderungen anpassen. In einfachen Modi wie CBR kennen die Encoder jedoch nicht den Bitratenbedarf zukünftiger Szenen und sind somit nicht in der Lage, die angeforderte mittlere Bitrate über längere Zeitspannen zu überschreiten. Erweiterte Modi wie etwa Multipass-Encodierung können die Statistik früherer Durchgänge berücksichtigen; dies behebt das oben erwähnte Problem.

### Anmerkung:

Die meisten Codecs, die ABR-Encodierung unterstützen, unterstützen nur die Encodierung in zwei Durchgängen (two pass) während einige andere wie etwa `x264`, `Xvid` und `libavcodec` Multipass unterstützen, was die Qualität bei jedem Durchgang leicht verbessert. Jedoch ist diese Verbesserung weder messbar noch ist sie nach dem 4-ten Durchgang oder so spürbar. Aus diesem Grund werden in diesem Abschnitt die Encoderierung mit 2 Durchläufen (two pass) und Multipass abwechselnd angewandt.

In jedem dieser Modi bricht der Videocodec (wie etwa `libavcodec`) den Videoframe in 16x16 Pixel Macroblöcke und wendet danach einen Quantisierer auf jeden Macroblock an. Je niedriger der Quantisierer desto besser die Qualität und desto höher die Bitrate. Die Methode, die der Filmencoder zur Bestimmung des auf einen gegebenen Macroblock anzuwendenden Quantisierer verwendet, variiert und ist in hohem Maße einstellbar. (Dies ist eine extrem übertriebene Vereinfachung des aktuellen Prozesses aber nützlich, um das Grundkonzept zu verstehen.)

Wenn du eine konstante Bitrate festlegst, wird der Videocodec das Video so encodieren, dass so viele Details wie notwendig und so wenig wie möglich ausgesondert werden, um unterhalb der vorgegebenen Bitrate zu bleiben. Wenn du dich wirklich nicht um die Dateigröße kümmerst, könntest du auch CBR verwenden und eine nahezu endlose Bitrate festlegen. (In der Praxis bedeutet dies einen Wert, der hoch genug ist, kein Limit aufzuwerfen wie 10000Kbit.) Ohne echte Einschränkung der Bitrate wird der Codec als Ergebnis den niedrigsten möglichen Quantisierer für jeden Macroblock anwenden (wie durch `vqmin` für `libavcodec` spezifiziert, Standardwert ist 2). Sobald du eine Bitrate festlegst, die niedrig genug ist, den Codec zur Anwendung eines höheren Quantisierers zu zwingen, bist Du nahezu sicher dabei, die Qualität deines Videos zu ruinieren. Um dies zu vermeiden, solltst du möglicherweise dein Video wie in der später in diesem Handbuch beschriebenen Methode reduzieren. Im Allgemeinen solltst du CBR vollkommen meiden, wenn dir Qualität wichtig ist.

Mit konstantem Quantisierer wendet der Codec denselben Quantisierer, wie durch die Option `vqscale` (für `libavcodec`) spezifiziert, auf jeden Macroblock an. Willst du einen Rip mit höchstmöglicher Qualität und ignorierst dabei wiederum die Bitrate, kannst du `vqscale=2` verwenden. Dies wird dieselbe Bitrate und PSNR (peak signal-to-noise ratio) liefern wie CBR mit `vbitrate`=infinity und der Standardeinstellung `vqmin`=2.

Das Problem mit konstantem Quantisierer ist, dass der vorgegebene Quantisierer zum Einsatz kommt, egal ob der Macroblock ihn benötigt oder nicht. Dies heißt, es wäre möglich, einen höheren Quantisierer auf einen Macroblock anzuwenden, ohne sichtbare Qualität zu opfern. Warum die Bits für einen unnötig kleinen Quantisierer verschwenden? Deine CPU hat soundso viele Arbeitsgänge Zeit zur Verfügung, die Festplatte jedoch nur soundso viele Bits.

Bei einer Encodierung mit zwei Durchläufen (two pass), wird der erste Durchgang den Film so rippen, als würde CBR vorliegen, jedoch wird ein Log die Eigenschaften jedes Frames beibehalten. Diese Daten werden danach während des zweiten Durchgangs dazu verwendet, intelligente Entscheidungen zur Wahl des Quantisierers zu treffen. Während schneller Action oder hochdetaillierter Szenen werden womöglich höhere Quantisierer, während langsamen Bewegungen und Szenen mit weniger Details niedrigere Quantisierer verwendet. Normalerweise ist die Anzahl der Bewegungen wichtiger als die der Details.

Wenn du `vqscale=2` verwendest, verschwendest du Bits. Wenn du `vqscale=3` anwendest, wirst du keinen Rip mit bestmöglicher Qualität erhalten. Angenommen du rippst eine DVD mit `vqscale=3` und das Resultat ist 1800Kbit. Wenn du in zwei Durchgängen mit `vbitrate=1800` encodierst, wird das daraus resultierende Video eine bessere Qualität bei gleicher Bitrate haben.

Da du nun davon überzeugt bist, dass zwei Durchgänge (two pass) den besten Weg darstellen, stellt sich jetzt tatsächlich die Frage, welche Bitrate verwendet werden soll? Die Antwort ist, dass es nicht nur eine Antwort gibt. Idealerweise willst du eine Bitrate wählen, die die beste Balance zwischen Qualität und Dateigröße ergibt. Die kann abhängig vom Quellvideo variieren.

Interessiert die Größe nicht, stellen etwa 2000Kbit plus oder minus 200Kbit einen guten Ausgangspunkt für einen sehr hochqualitativen Rip dar. Bei einem Video mit schneller Action oder hohen Details, oder wenn du schlicht und ergreifend ein sehr kritisches Auge besitzst, könntest du dich für 2400 oder 2600 entscheiden. Bei einigen DVDs kannst du eventuell keinen Unterschied bei 1400Kbit feststellen. Um ein besseres Gefühl zu bekommen, ist es eine gute Idee, mit Szenen bei unterschiedlichen Bitraten herumzuexperimentieren.

Wenn du eine bestimmte Größe anvisierst, musst du die Bitrate irgendwie kalkulieren. Aber zuvor solltest du wissen, wieviel Platz du für den/die Audiotrack(s) reservieren musst, daher solltest Du diese(n) zuerst rippen. Du kannst die Bitrate mit folgender Gleichung berechnen: `Bitrate = (zielgroesse_in_MByte - soundgroesse_in_MByte) * 1024 * 1024 / laenge_in_sek * 8 / 1000` Um zum Beispiel einen zweistündigen Film auf eine 702MB CD mit einem 60MB Audiotrack zu bekommen, sollte die Videobitrate folgendermaßen sein: `(702 - 60) * 1024 * 1024 / (120*60) * 8 / 1000 = 740kbps`

### 10.1.3. Randbedingungen für effizientes Encodieren

Aufgrund der Natur der MPEG-Komprimierung gibt es zahlreiche Randbedingungen, denen du zum Erreichen maximaler Qualität folgen solltest. MPEG splittet das Video in Macroblöcke genannte 16x16 Quadrate auf, jeder davon zusammengesetzt aus 4 8x8 Blöcken mit Luma-(Intensitäts)-Informationen und zwei halb-auflösenden 8x8 Chroma-(Farb)-Blöcken (einer für die Rot-Cyan-Achse und der andere für die Blau-Gelb-Achse). Selbst wenn Breite und Höhe deines Films kein Vielfaches von 16 sind, wird der Encoder ausreichend 16x16 Macroblöcke zur Abdeckung des gesamten Bildbereichs verwenden und der Extraplatz wird verschwendet. Folglich ist es keine gute Idee, im Interesse der Maximierung der Qualität bei fester Dateigröße, Abmessungen zu verwenden, die kein Vielfaches von 16 sind.

Die meisten DVDs besitzen ein bestimmtes Maß schwarzer Balken an ihren Rändern. Diese dort zu belassen wird für die Qualität in mehrfacher Hinsicht sehr schädlich sein.

1. MPEG-Kompression hängt in höchstem Maße von den Frequenzbereichs-Transformationen ab, insbesondere von der Discrete Cosine Transform (DCT), die der Fourier Transform ähnelt. Diese Art Encodierung ist für darstellende Muster und weiche Übergänge effizient, hat jedoch große Probleme mit scharfen Kanten. Um diese zu encodieren muss sie viel mehr Bits verwenden, oder es wird andernfalls ein als Ringing bekannter Artefakt auftreten.

   Die Discrete Frequency Transform (DCT) erfolgt separat auf jeden Macroblock (eigentlich auf jeden Block), somit trifft dieses Problem nur zu, wenn sich in einem Block eine scharfe Kante befindet. Beginnt dein schwarzer Rand exakt an den Grenzen zum Vielfachen von 16 Pixeln, stellt dies kein Problem dar. Seis drum, die schwarzen Ränder bei DVDs werden in den seltensten Fällen schön angeordnet, daher wirst du sie in der Praxis immer abschneiden müssen, um diesen Nachteil zu vermeiden.

Zusätzlich zu den Frequenzbereichs-Transformationen verwendet die MPEG-Kompression Bewegungsvektoren, um den Wechsel von einem Frame zum anderen darzustellen. Bewegungsvektoren arbeiten bei Inhalt, der von den Kanten eines Bildes her einfließt, normalerweise weniger effizient, da dieser im vorherigen Frame nicht vorhanden ist. Solange sich das Bild bis voll zur Kante des encodierten Bereichs hin vergrößert, haben Bewegungsvektoren kein Problem mit Inhalt, der sich aus den Kanten des Bildes hinausbewegt. Die Präsenz schwarzer Ränder kann jedoch Ärger machen:

2. Die MPEG-Kompression speichert für jeden Macroblock einen Vektor, um ausfindig zu machen, welcher Teil des vorherigen Frames in diesen Macroblock als Basis zur Vorhersage des nächsten Frames kopiert werden soll. Nur die verbleibenden Unterschiede müssen encodiert werden. Überspannt der Macroblock die Kante des Bildes und enthält einen Teil des schwarzen Randes, werden Bewegungsvektoren aus anderen Teilen des Bildes den schwarzen Rand überschreiben. Dies bedeutet, dass jede Menge Bits entweder zur wiederholten Schwärzung des überschriebenen Randes aufgewendet werden müssen, oder es wird (eher) erst gar kein Bewegungsvektor genutzt und alle Änderungen innerhalb dieses Macroblocks müssen explizit encodiert werden. So oder so wird die Encodiereffizienz außerordentlich reduziert.

   Nochmal, dieses Problem trifft nur dann zu, wenn schwarze Ränder nicht an den Grenzen eines Vielfachen von 16 anstehen.

3. Zuletzt noch was, angenommen wir haben einen Macroblock im Inneren des Bildes und ein Objekt bewegt sich aus Richtung Nähe der Kante des Bildes her in diesen Block hinein. Die MPEG-Encodierung kann nicht sagen "kopiere den Teil, der innerhalb des Bildes liegt, den schwarzen Rand aber nicht". Somit wird der schwarze Rand ebenfalls mit hinein kopiert und jede Menge Bits müssen zur Encodierung des Teils des Bildes, der dort angenommen wird, aufgewendet werden.

   Läuft das Bild ständig zur Kante des encodierten Bereichs hin, besitzt MPEG spezielle Optimierungen, um immer wieder dann die Pixel am Rand des Bildes zu kopieren, wenn ein Bewegungsvektor von außerhalb des encodierten Bereichs ankommt. Dieses Feature wird nutzlos, wenn der Film schwarze Ränder hat. Im Gegensatz zu den Problemen 1 und 2 hilft hier kein Anordnen der Ränder am Vielfachen von 16.

4. Obwohl die Ränder komplett schwarz sind und sich nie ändern, ist zumindest ein minimaler Overhead damit verbunden, mehr Macroblöcke zu besitzen.

Aus all diesen Gründen wird empfohlen, schwarze Ränder komplett abzuschneiden. Mehr noch, liegt ein Bereich mit Rauschen/Verzerrung an der Kante des Bildes, steigert dessen Abschneiden ebenso die Encodiereffizienz. Videophile Puristen, die den Originalzustand so nah wie möglich sichern wollen, mögen dieses Abschneiden (cropping) beanstanden, wenn du jedoch nicht planst, bei konstantem Quantisierer zu encodieren, wird der Qualitätsgewinn, den Du durch dieses Abschneiden erreichst, beträchtlich über dem Verlust an Informationen an den Kanten liegen.

### 10.1.4. Abschneiden und Skalieren

Wiederaufruf der vorherigen Sektion, dass die letzte von Dir encodierte Bildgröße ein Vielfaches von 16 sein sollte (bei beidem, Breite und Höhe). Diese kann durch Abschneiden, Skalieren erreicht werden oder durch eine Kombination von beidem.

Beim Abschneiden gibt es ein paar Richtwerte, die befolgt werden müssen, um eine Zerstörung des Films zu vermeiden. Das normale YUV-Format, 4:2:0, speichert Chroma-(Farb)-Informationen in einer Unterstichprobe (subsampled), z.B. wird Chroma nur halb so oft in jede Richtung gesampelt wie Luma-(Intensitäts)-Informationen. Beobachte dieses Diagramm, in dem L Luma-Samplingpunkte bedeuten und C für Chroma steht.

L | L | L | L | L | L | L | L
C | C | C | C
L | L | L | L | L | L | L | L
L | L | L | L | L | L | L | L
C | C | C | C
L | L | L | L | L | L | L | L

Wie du sehen kannst, kommen Zeilen und Spalten des Bildes natürlich paarweise. Folglich müssen deine Abschneide-Offsets und Abmessungen geradzahlig sein. Sind sie dies nicht, wird Chroma nicht mehr korrekt mit Luma abgeglichen. In der Theorie ist es möglich, mit ungeraden Offsets abzuschneiden, jedoch erfordert dies ein Resampling von Chroma, was potentiell eine mit Verlust verbundene Operation bedeutet und vom Crop-Filter nicht unterstützt wird.

Weiterhin wird interlaced Video folgendermaßen gesampelt:

Oberes Feld | Unteres Feld
L | L | L | L | L | L | L | L |  |  |  |  |  |  |  |
C | C | C | C |  |  |  |  |  |  |  |
|  |  |  |  |  |  |  | L | L | L | L | L | L | L | L
L | L | L | L | L | L | L | L |  |  |  |  |  |  |  |
|  |  |  |  |  |  |  | C | C | C | C
|  |  |  |  |  |  |  | L | L | L | L | L | L | L | L
L | L | L | L | L | L | L | L |  |  |  |  |  |  |  |
C | C | C | C |  |  |  |  |  |  |  |
|  |  |  |  |  |  |  | L | L | L | L | L | L | L | L
L | L | L | L | L | L | L | L |  |  |  |  |  |  |  |
|  |  |  |  |  |  |  | C | C | C | C
|  |  |  |  |  |  |  | L | L | L | L | L | L | L | L

Wie du erkennen kannst, wiederholt sich das Muster bis nach 4 Zeilen nicht. Somit müssen bei interlaced Video dein y-Offset und die Höhe für das Ausschneiden ein Vielfaches von 4 sein.

Die ursprüngliche DVD-Auflösung ist 720x480 für NTSC und 720x576 für PAL, es gibt jedoch ein Aspektkennzeichen, das spezifiziert, ob Vollbild (4:3) oder Breitwandfilm (16:9) vorliegt. Viele (wenn nicht die meisten) Breitwandfilm-DVDs sind nicht grundsätzlich 16:9, sondern entweder 1.85:1 oder 2.35:1 (Cinescope). Dies bedeutet, dass es schwarze Bänder im Video geben wird, die herausgeschnitten werden müssen.

MPlayer stellt einen Crop-Erkennungsfilter zur Verfügung, der das Ausschnittsrechteck (`-vf cropdetect`) bestimmt. Starte MPlayer mit `-vf cropdetect`, und er wird die Crop-Einstellungen zum Entfernen der Ränder ausgeben. du solltest den Film lange genug laufen lassen, damit die gesamte Bildfläche verwendet wird, um akkurate Crop-Werte zu erhalten.

Teste danach die Werte, die von MPlayer über die Befehlszeile mittels `cropdetect` ausgegeben wurden und passe das Rechteck nach deinen Bedürfnissen an. Der Filter `rectangle` kann dabei helfen, indem er dir erlaubt, das Rechteck interaktiv über dem Film zu positionieren. Vergiss nicht, den oben genannten Teilbarkeitsrichtwerten zu folgen, sodass du die Chroma-Ebenen nicht verkehrt anordnest.

In bestimmten Fällen könnte Skalieren nicht wünschenswert sein. Skalierung in vertikaler Richtung ist mit interlaced Video schwierig, und wenn du das Interlacing beibehalten willst, solltest du für gewöhnlich das Skalieren bleiben lassen. Hast du nicht vor zu skalieren, willst aber nach wie vor Abmessungen in einem Vielfachen von 16 verwenden, musst du über den Rand hinausschneiden. Schneide aber lieber nicht über den Rand hinaus, da schwarze Ränder sehr schlecht zu encodieren sind!

Weil MPEG-4 16x16 Macroblöcke nutzt, solltest du dich vergewissern, dass jede Abmessung des zu encodierenden Videos ein Vielfaches von 16 ist oder du verschlechterst andernfalls die Qualität, speziell bei niedrigeren Bitraten. Du kannst dies durch Abrunden der Breite und Höhe des Ausschnittsrechtecks hinunter auf den nächsten Wert eines Vielfachen von 16 erreichen. Wie früher bereits erklärt, wirst du beim Abschneiden das y-Offset um die Hälfte der Differenz der alten und neuen Höhe erhöhen wollen, sodass das daraus resultierende Video aus der Mitte des Frames genommen wird. Und stelle wegen der Art, wie ein DVD-Video gesampelt wird, sicher, dass das Offset eine gerade Zahl ist. (Verwende in der Tat - als eine Regel - nie ungerade Werte für irgendwelche Parameter beim Abschneiden oder Skalieren eines Videos) Wenn du dich beim Wegwerfen einiger extra Pixel nicht wohl fühlst, ziehst du es stattdessen vor, das Video zu skalieren. Wir werden uns dies im unten stehenden Beispiel mal ansehen. Du kannst den `cropdetect`-Filter sogar alles oben erwähnte für dich erledigen lassen, da dieser einen optionalen Parameter `round` besitzt, der standardmäßig gleich 16 ist.

Pass auch auf "halbschwarze" Pixel an den Kanten auf. Stelle sicher, dass du diese ebenfalls mit abschneidest oder du vergeudest dort Bits, wo sie doch besser anderswo verwendet werden sollten.

Nachdem nun alles gesagt ist, wirst du möglicherweise bei einem Video landen, dessen Pixel nicht ganz 1.85:1 oder 2.35:1, aber ziemlich nahe dran sind. Du könntest ein neues Seitenverhältnis manuell berechnen, aber MEncoder bietet eine Option für `libavcodec` genannt `autoaspect`, die das für dich erledigt. Skaliere dieses Video auf keinen Fall hoch, um die Pixel abzugleichen solange du keinen Festplattenplatz verschwenden willst. Das Skalieren sollte beim Playback gemacht werden und der Player wird das in der AVI gespeicherte Seitenverhältnis zur Bestimmung der besten Auflösung verwenden. Unglücklicherweise erzwingen nicht alle Player diese Auto-Skalierinformation, und deshalb willst du vielleicht trotzdem neu skalieren.

### 10.1.5. Auswahl von Auflösung und Bitrate

Wenn du nicht vor hast, im Modus mit konstantem Quantisier zu encodieren, musst du eine Bitrate auswählen. Das Konzept der Bitrate ist denkbar einfach. Sie ist die (mittlere) Anzahl Bits, die pro Sekunde zum Speichern des Films verbraucht werden. Normalerweise wird die Bitrate in Kilobit (1000 Bit) pro Sekunde gemessen. Die Größe deines Films auf der Platte ist die Bitrate multipliziert mit der Dauer des Films, plus einem kleinen "Overhead" (siehe zum Beispiel in der Sektion über den AVI-Container). Weitere Parameter wie Skalierung, Cropping, usw. werden die Dateigröße nicht ändern, solange du nicht auch die Bitrate veränderst!

Die Bitrate skaliert nicht proportional zur Auflösung. Dies bedeutet, eine Datei 320x240 mit 200 KBit/Sek wird nicht dieselbe Qualität aufweisen wie der gleiche Film bei 640x480 und 800 KBit/Sek! Dafür gibt es zwei Gründe:

1. Wahrnehmbar: du bemerkst MPEG-Artefakte eher, wenn sie größer hochskaliert sind! Artefakte erscheinen bei einer Skalierung von Blöcken (8x8). Dein Auge wird in 4800 kleinen Blöcken nicht so leicht Fehler sehen wie es welche in 1200 großen Blöcken sieht (vorausgesetzt du skalierst beide auf Vollbild).

2. Theoretisch: Wenn du ein Bild runterskalierst, aber nach wie vor die selbe Größe der (8x8) Blöcke zur Frequenzraumtransformation verwendest, bewegst Du mehr Daten in die Hochfrequenzbänder. Grob gesagt, jedes Pixel enthält mehr des Details als es dies zuvor tat. Somit enthält dein herunterskaliertes Bild 1/4 der Information in räumlichen Richtungen, es könnte immer noch einen hohen Anteil Information im Frequenzbereich enthalten (vorausgesetzt dass die hohen Frequenzen im originalen 640x480 Bild nicht ausgenutzt wurden).

Vergangene Leitfäden legten nahe, eine Bitrate und Auflösung zu wählen, die auf eine "Bits pro Pixel"-Näherung basieren, dies ist jedoch im allgemeinen aus oben genannten Gründen nicht gültig. Eine bessere Schätzung scheint zu sein, dass Bitraten proportional zur Quadratwurzel der Auflösung skalieren, sodass 320x240 und 400 KBit/Sek vergleichbar mit 640x480 bei 800 KBit/Sek wären. Dies wurde aber nicht mit theoretischer oder empirischer Strenge verifiziert. Desweiteren ist es in Anbetracht der Tatsache, dass Filme in Bezug auf Rauschen, Details, Bewegungsgrad usw. außerordentlich variieren, zwecklos, allgemeine Empfehlungen für die Bits pro Diagonallänge (dem Analog zu Bits pro Pixel unter Verwendung der Quadratwurzel) abzugeben.

So weit haben wir nun die Schwierigkeit der Wahl von Bitrate und Auflösung diskutiert.

#### 10.1.5.1. Berechnen der Auflösung

Die folgenden Schritte werden dich in der Berechnung der Auflösung deiner Encodierung anleiten, ohne das Video allzusehr zu verzerren, indem verschiedene Typen von Informationen über das Quellvideo in Betracht gezogen werden. Zuerst solltest du die encodierte Auflösung berechnen: `ARc = (Wc x (ARa / PRdvd )) / Hc`

wobwei:

- Wc und Hc die Breite und Höhe des zugeschnittenen Videos darstellen

- ARa das angezeigte Seitenverhältnis ist, das üblicherweise 4/3 oder 16/9 beträgt

- PRdvd das Pixelverhältnis der DVD ist, welches gleich 1.25=(720/576) für PAL-DVDs und 1.5=(720/480) für NTSC-DVDs beträgt

Dann kannst du die X- und Y-Auflösung berechnen, gemäß eines gewisse Faktors der Kompressionsqualität (CQ): `ResY = INT(SQRT( 1000*Bitrate/25/ARc/CQ )/16) * 16` und `ResX = INT( ResY * ARc / 16) * 16`

Okay, aber was ist der CQ? Der CQ repräsentiert die Anzahl Bits pro Pixel und pro Frame der Encodierung. Grob ausgedrückt, je größer der CQ, desto geringer die Wahrscheinlichkeit, Encodierungsartefakte zu sehen. Trotz allem, wenn du eine Zielgröße für deinen Film hast (1 oder 2 CDs zum Beispiel), gibt es eine begrenzte Gesamtzahl an Bits, die du aufwenden kannst; deswegen ist es notwendig, einen guten Kompromiss zwischen Komprimierbarkeit und Qualität zu suchen.

Der CQ hängt von der Bitrate, der Effektivität des Videocodecs und der Filmauflösung ab. Um den CQ anzuheben, könntest du typischerweise den Film unter der Annahme herunterskalieren, dass die Bitrate mit der Funktion der Zielgröße und der Länge des Films berechnest, die ja konstant sind. Mit MPEG-4 ASP-Codecs wie `Xvid` und `libavcodec`, resultiert ein CQ unter 0.18 für gewöhnlich in einem ziemlich blockhaften Bild, weil nicht genug Bits zum Codieren der Information jedes Macroblocks vorhanden sind. (MPEG4, wie auch viele andere Codecs, gruppiert Pixel nach Blöcken verschiedener Pixel, um das Bild zu komprimieren; sind nicht genügend Bits vorhanden, werden die Kanten dieser Blöcke sichtbar.) Es ist daher weise, einen CQ im Bereich von 0.20 bis 0.22 für einen 1 CD-Rip und 0.26-0.28 für einen 2 CD-Rip mit Standard-Encodieroptionen zu nehmen. Höherentwickelte Encodieroptionen wie die hier für `libavcodec` und `Xvid` aufgelisteten sollten es möglich machen, dieselbe Qualität mit einem CQ im Bereich von 0.18 bis 0.20 für einen 1 CD-Rip und 0.24 bis 0.26 für einen 2 CD-Rip zu erreichen. Mit den MPEG-4 AVC-Codecs wie `x264`, kannst du einen CQ im Bereich von 0.14 bis 0.16 mit Standard-Encodieroptionen verwenden, und solltest bis auf 0.10 bis 0.12 mit den erweiterten Encodieroptionen von `x264` runter gehen können.

Bitte nimm zur Kenntnis, dass der CQ lediglich eine richtungsweisendes Maß ist, da sie vom encodierten Inhalt abhängt. Ein CQ von 0.18 kann für einen Bergman-Film recht hübsch aussehen, im Gegensatz zu einem Film wie The Matrix, der jede Menge High-Motion-Szenen enthält. Auf der anderen Seite ist es nutzlos, den CQ höher als 0.30 zu schrauben, da du ohne spürbaren Qualitätsgewinn Bits vergeuden würdest. Beachte ebenso, dass wie früher in diesem Handbuch bereits angemerkt, niedrig auflösende Videos einen größeren CQ benötigen, um gut auszusehen (im Vergleich z.B. zur DVD-Auflösung).

### 10.1.6. Filtern

Zu lernen, wie man MEncoders Videofilter verwendet, ist essentiell, um gute Encodierungen zu produzieren. Jede Videoverarbeitung wird über Filter ausgeführt -- Ausschneiden, Skalieren, Farbanpassung, Rauschentfernung, Scharfzeichnen, Deinterlacing, telecine, inverses telecine und Deblocking, um nur ein paar davon aufzuzählen. Zusammen mit der gewaltigen Zahl unterstützter Inputformate, ist die Vielfalt der in MEncoder verfügbaren Filter eine seiner Hauptvorteile im Vergleich zu ähnlichen Programmen.

Filter werden in einer Kette über die Option -vf geladen:

    -vf filter1=Optionen,filter2=Optionen,...

Die meisten Filter nehmen mehrere numerische, kommagetrennte Optionen entgegen, jedoch variiert die Syntax der Optionen von Filter zu Filter, also lies bitte die Manpage für Details zu den Filtern, die du verwenden willst.

Filter wirken auf das Video in der Reihenfolge ein, in der sie geladen werden. Zum Beispiel wird folgende Kette:

    -vf crop=688:464:12:4,scale=640:464

zuerst den Bereich 688x464 aus dem Bild schneiden mit der oberen, linken Ecke bei (12,4) und danach das Ergebnis auf 640x464 herunter skalieren.

Bestimmte Filter müssen zu oder nahe dem Anfang der Filterkette geladen werden, um Vorteile aus den Informationen des Videodecoders zu ziehen, die ansonsten durch andere Filter verloren gehen oder ungültig gemacht würden. Die wichtigsten Beispiele sind `pp` (Nachbearbeitung (postprocessing), nur wenn es Deblock- oder Dering-Operationen durchführt), `spp` (ein weiterer Postprozessor zum Entfernen von MPEG-Artefakten), `pullup` (umgekehrtes telecine) und `softpulldown` (zur Konvertierung von soft telecine nach hard telecine).

Im Allgemeinen solltest du den Film so wenig wie möglich Filtern, um nahe an der originalen DVD-Quelle zu bleiben. Ausschneiden ist oft notwendig (wie oben beschrieben), vermeide aber das Skalieren von Videos. Obwohl das Herunterskalieren manchmal vorgezogen wird, um höhere Quantisierer zu verwenden, wollen wir beide diese Dinge vermeiden: Erinnere dich daran, dass wir von Anfang an beschlossen hatten, einen Kompromiss zwischen Bits und Qualität zu schließen.

Passe ebenso kein Gamma, Kontrast, Helligkeit, usw. an. Was auf deinem Display gut aussieht, sieht auf anderen eventuell nicht gut aus. Diese Anpassungen sollten nur im Playback vorgenommen werden.

Eine Sache, die du vielleicht machen willst, ist, das Video durch einen sehr feinen Entrauschfilter (Denoise) zu schicken, wie etwa `-vf hqdn3d=2:1:2`. Nochmals, es geht darum, die Bits einer besseren Verwendung zuzuführen: Warum Bits zum Encodieren des Rauschens verschwenden, wenn du dieses Rauschen auch während des Playback entfernen kannst? Die Parameter für `hqdn3d` zu erhöhen, wird überdies die Komprimierbarkeit erhöhen, erhöhst du jedoch die Werte zu sehr, riskierst Du eine Verringerung der Bildsichtbarkeit. Die oben vorgeschlagenen Werte (`2:1:2`) sind ziemlich konservativ; du solltest dich frei fühlen, mit höheren Werten herumzuexperimentieren und die Ergebnisse selbst zu beobachten.

### 10.1.7. Interlacing und Telecine

Nahezu alle Filme sind bei 24 fps aufgenommen. Weil NTSC 30000/1001 fps entspricht, müssen mit diesen 24 fps Videos einige Verarbeitungen durchgeführt werden, um sie mit der korrekten NTSC-Framerate laufen zu lassen. Der Prozess wird 3:2 pulldown genannt, allgemein telecine zugeordnet (weil pulldown des öfteren während des telecine-Prozesses angewandt wird), und naiv so beschrieben, dass er durch Verlangsamung des Films auf 24000/1001 fps und dem Wiederholen jeden vierten Frames arbeitet.

Keine spezielle Verarbeitung ist jedoch bei einem Video für PAL-DVDs durchzuführen, das bei 25 fps läuft. (Technisch gesehen kann PAL telecined werden, 2:2 pulldown genannt, dies ist jedoch in der Praxis nicht von Bedeutung.) Der 24 fps Film wird einfach mit 25 fps abgespielt. Das Resultat ist, dass der Film ein wenig schneller abläuft, doch solange du kein Alien bist, wirst du möglicherweise keinen Unterschied wahrnehmen. Die meisten PAL-DVDs haben pitch-korrigiertes Audio, dadurch hören sie sich bei 25 fps abgespielt korrekt an, obwohl der Audiotrack (und infolgedessen der gesamte Film) eine 4% kürzere Abspielzeit hat wie NTSC-DVDs.

Weil das Video in einer PAL-DVD nicht verändert wurde, musst du dich nicht viel um die Framerate sorgen. Die Quelle ist 25 fps und dein Rip wird 25 fps haben. Wenn du jedoch einen NTSC-DVD-Film rippst, musst du eventuell umgekehrtes telecine anwenden.

Für mit 24 fps aufgenommene Filme ist das Video auf der NTSC-DVD entweder telecined 30000/1001 oder hat andernfalls progressive 24000/1001 fps und es ist vorgesehen, on-the-fly vom DVD-Player telecined zu werden. Auf der anderen Seite sind TV-Serien üblicherweise nur interlaced, nicht telecined. Dies ist keine feste Regel: Einige TV-Serien sind interlaced (wie etwa Buffy die Vampirjägerin), wogegen andere eine Mixtur aus progressive und interlaced sind (so wie Angel oder 24) - wers kennt :).

Es wird strengstens empfohlen, die Sektion über Wie mit telecine und interlacing in NTSC-DVDs umgehen durchzulesen, um den Umgang mit den verschiedenen Möglichkeiten zu lernen.

Wenn du aber hauptsächlich nur Filme rippst, gehst du wahrscheinlich entweder mit 24 fps progressivem oder telecined Video um, in welchem Falle du den Filter `pullup` mittels `-vf pullup,softskip` verwenden kannst.

### 10.1.8. Interlaced Video encodieren

Ist der Film, den du encodieren willst, interlaced (NTSC-Video oder PAL-Video), wirst du wählen müssen, ob du ihn deinterlacen willst oder nicht. Während das Deinterlacing deinen Film zwar auf progressiven Scan-Displays wie Computermonitoren und Projektoren verwendbar macht, wird dich dies doch etwas kosten: Die Feldrate von 50 oder 60000/1001 Feldern pro Sekunde wird auf 25 oder 30000/1001 Frames pro Sekunde halbiert und annähernd die Hälfte der Informationen in deinem Film geht während Szenen mit signifikanter Bewegung verloren.

Deswegen wird empfohlen, wenn du aus Gründen hochqualitativer Archivierung encodierst, kein Deinterlacing durchzuführen. Du kannst den Film immer noch beim Playback deinterlacen, wenn du ihn auf progressiven Scan-Geräten anzeigst. Und zukünftige Player werden in der Lage sein, auf volle Feldrate zu deinterlacen, mit Interpolation auf 50 oder 60000/1001 komplette Frames pro Sekunde aus interlaced Video heraus.

Spezielle Sorgfalt solltest du bei der Arbeit mit interlaced Video walten lassen:

1. Ausschneidehöhe und y-Offset müssen Vielfache von 4 sein.

2. Jedes vertikale Skalieren muss im interlaced Modus durchgeführt werden.

3. Nachbearbeitungs- (postprocessing) und Rauschunterdrückungsfilter (denoising) funktionieren eventuell nicht wie erwartet, wenn du nicht speziell darauf achtest, dass sie zu einem Zeitpunkt nur ein Feld verarbeiten, und sie können das Video kaputt machen, wenn sie inkorrekt angewendet werden.

Mit diesen Dingen im Kopf, hier das erste Beispiel:

    mencoder capture.avi -mc 0 -oac lavc -ovc lavc -lavcopts \
    vcodec=mpeg2video:vbitrate=6000:ilme:ildct:acodec=mp2:abitrate=224

Beachte die Optionen `ilme` und `ildct`.

### 10.1.9. Anmerkungen zur Audio-/Videosynchronisation

MEncoders Algorithmen der Audio-/Videosynchronisation wurden mit der Intention entwickelt, Dateien mit kaputter Sychronisation wieder herzustellen. In einigen Fällen können unnötiges Überspringen und Duplizieren von Frames und möglicherweise leichte A/V-Desynchronisation verursachen, auch wenn sie mit dem richtigen Input verwendet werden (gewiss, Probleme mit A/V-Synchronisation treffen nur zu, wenn du den Audiotrack während der Transcodierung des Videos verarbeitest oder kopierst, wozu auch nachhaltig ermutigt wird). Hierfür müsstest du mit der Option `-mc 0` in die Grundeinstellung der A/V-Synchronisation wechseln oder diese in deine `~/.mplayer/mencoder` Konfigurationsdatei eintragen, solange du ausschließlich mit guten Quellen arbeitest (DVD, TV-Capture, hochqualitativen MPEG-4-Rips usw.) und mit nicht-kaputten ASF/RM/MOV-Dateien.

Wenn du dich überdies gegen merkwürdige Frameübersprünge und -duplikationen absichern willst, kannst du beides verwenden, `-mc 0` und `-noskip`. Dies verhindert jede A/V-Synchronisation und kopiert die Frames eins-zu-eins, somit kannst du sie nicht verwenden, falls du irgendwelche Filter verwendest, die unvorhersagbar Frames hinzufügen oder streichen oder falls deine Input-Datei eine variable Framerate besitzt! Deshalb wird eine allgemeine Anwendung von `-noskip` nicht empfohlen.

Die von MEncoder unterstützte sogenannte "3-pass" Audioencodierung soll laut Berichten A/V-Desynchronisation verursachen. Dies geschieht definitiv dann, wenn sie in Verbindung mit bestimmten Filtern verwendet wird, daher wird nicht empfohlen, den 3-pass-Audio-Modus anzuwenden. Dieses Feature ist nur aus Kompatibilitätsgründen übrig geblieben und für erfahrene Benutzer, die wissen, wann es sicher anzuwenden ist und wann nicht. Wenn du zuvor noch nie etwas vom 3-pass-Modus gehört hast, vergiss, dass wir es je erwähnt haben!

Es gab auch Berichte über A/V-Desynchronisation, wenn mit MEncoder von stdin encodiert wurde. Lass das bleiben! Verwende immer eine Datei oder ein CD/DVD/usw-Laufwerk als Input.

### 10.1.10. Auswahl des Videocodecs

Welcher Videocodec die beste Wahl ist, hängt von mehreren Faktoren wie Größe, Qualität, Streambarkeit, Brauchbarkeit und Popularität, manche davon weitgehend vom persönlichen Geschmack und technischen Randbedingungen ab.

- Kompressionseffizienz: Es ist leicht zu verstehen, dass die meisten Codecs der neueren Generation dafür gemacht wurden, Qualität und Komprimierung zu verbessern. Deshalb behauptet der Autor dieses Handbuches und viele andere Leute, dass du nichts verkehrt machen kannst, [1] wenn du MPEG-4 AVC-Codecs wie `x264` anstatt MPEG-4 ASP-Codecs wie `libavcodec` MPEG-4 oder `Xvid` wählst. (Zukunftsorientierte Codec-Entwickler interessiert eventuell Michael Niedermayers Meinung "why MPEG4-ASP sucks" zu lesen.) Ebenso solltest du mit MPEG-4 ASP eine bessere Qualität erhalten als mit MPEG-2-Codecs.

  Allerdings können neuere Codecs, die noch stark in der Entwicklung stecken, unter unentdeckten Bugs leiden, die die Encodierung ruinieren können. Dies nimmt man schlicht in Kauf, wenn man "bleeding edge"-Technologie verwendet.

  Außerdem erfordert der Umgang mit einem neuen Codec und sich mit dessen Optionen vertraut zu machen eine Zeit, bis du weißt, was alles anzupassen ist, um die erhoffte Bildqualität zu erreichen.

- Hardware-Kompatibilität: Gewöhnlich dauert es bei neuen standalone Video-Playern lange, bis der Support für die neuesten Videocodecs eingebunden ist. Als ein Ergebnis unterstützen die meisten nur MPEG-1 (wie VCD, XVCD und KVCD), MPEG-2 (wie DVD, SVCD und KVCD) und MPEG-4 ASP (wie DivX, LMP4 von `libavcodec` und `Xvid`) (Vorsicht: Im Allgemeinen werden nicht alle MPEG-4 ASP-Features unterstützt). Sieh bitte in den technischen Spezifikationen deines Players nach (falls welche vorhanden sind) oder google nach mehr Informationen.

- Beste Qualität pro Encodierzeit: Codecs, die es schon einige Zeit gibt (wie `libavcodec` MPEG-4 und `Xvid`), sind gewöhnlich heftig mit allen möglichen intelligenten Algorithmen und SIMD Assembly-Code optimiert. Das sind sie deshalb, weil sie darauf abzielen, das beste Verhältnis von Qualität pro Encodierzeit zu liefern. Jedoch haben sie oft einige sehr fortschrittliche Optionen, die, wenn aktiviert, das Encodieren bei marginalem Gewinn wirklich langsam machen.

  Wenn du es auf die Wahnsinnsgeschwindigkeit abzielst, solltest du in der Nähe der Standardeinstellungen des Videocodecs bleiben (obwohl du ruhig weitere Optionen ausprobieren solltest, die in anderen Sektionen dieses Handbuchs angesprochen werden).

  Vielleicht überlegst du auch, einen Codec auszuwählen, der mit Multi-Threading klarkommt, was nur für Benutzer von Rechnern mit mehreren CPUs von Nutzen ist. `libavcodec` MPEG-4 erlaubt dies zwar, aber die Geschwindigkeitsgewinne sind begrenzt und es gibt einen leicht negativen Effekt in Bezug auf die Bildqualität. Die Multi-Thread-Encodierung von `Xvid`, durch die Option `threads` aktiviert, kann zum Ankurbeln der Encodiergeschwindigkeit - um in typischen Fällen etwa 40-60% - bei wenn überhaupt geringer Bildverschlechterung verwendet werden. `x264` erlaubt ebenfalls Multi-Thread-Encodierung, was das Encodieren momentan um 94% beschleunigt bei gleichzeitiger Verringerung des PSNR um einen Wert zwischen 0.005dB und 0.01dB.

- Persönlicher Geschmack: Hier beginnt die Angelegenheit oft irrational zu werden: Aus den selben Gründen, aus denen manche über Jahre an DivX 3 hängen, während neuere Codecs bereits Wunder wirken, ziehen einige Leute `Xvid` oder `libavcodec` MPEG-4 dem `x264` vor.

  Du solltest dir dein eigenes Urteil bilden; lass dich nicht von Leuten vollquasseln, die auf den einen Codec schwören. Nimm ein paar Beispiel-Clips von Originalquellen und vergleiche die verschiedenen Encodier-Optionen und Codecs, um den einen zu finden, mit dem du am besten klarkommst. Der beste Codec ist der, den du beherrschst und der in deinen Augen auf deinem Display am besten aussieht. [2]!

Sieh dazu bitte in der Sektion Auswahl der Codecs und Containerformate nach der Liste der unterstützten Codecs.

### 10.1.11. Audio

Audio ist ein leichter zu lösendes Problem: Wenn du Wert auf Qualität legst, lass es einfach so wie es ist. Gerade AC3 5.1 Streams sind meist 448Kbit/s und jedes Bit wert. Möglicherweise gerätst du in Versuchung, Audio in hochwertiges Vorbis umzuwandeln, aber nur weil du heute keinen A/V-Receiver für AC3-pass-through besitzt, bedeutet dies nicht, dass du nicht morgen doch einen hast. Halte deine DVD-Rips zukunftssicher, indem du den AC3-Stream beibehältst. Du behältst den AC3-Stream entweder, indem du ihn während der Encodierung direkt in den Video-Stream kopierst. Du kannst den AC3-Stream aber auch extrahieren, um ihn in Container wie NUT oder Matroska zu muxen.

    mplayer source_file.vob -aid 129 -dumpaudio -dumpfile sound.ac3

dumpt Audiotrack Nummer 129 aus der Datei `source_file.vob` (NB: DVD-VOB-Dateien verwenden gewöhnlich andere Audionummerierungen, was bedeutet, dass der VOB-Audiotrack 129 der 2-te Audiotrack der Datei ist) in die Datei `sound.ac3`.

Aber manchmal hast du wirklich keine andere Wahl als den Sound weiter zu komprimieren, sodass mehr Bits fürs Video aufgewendet werden können. Die meisten Leute entscheiden sich für eine Audiokomprimierung mit MP3- oder Vorbis-Audiocodecs. Wobei letzterer ein sehr platzsparender Codec ist, MP3 wird von Hardware-Playern besser unterstützt, wobei sich dieser Trend auch ändert.

Verwende nicht `-nosound` beim Encodieren einer Datei, die Audio enhält, sogar wenn du Audio später separat encodierst und muxt. Zwar kann es im Idealfall manchmal funktionieren, wenn du `-nosound` verwendest, wahrscheinlich um einige Probleme in deinen Encodier-Befehlszeileneinstellungen zu verbergen. In anderen Worten, einen Soundtrack während dem Encodieren zu haben, stellt sicher, vorausgesetzt du siehst keine Meldungen wie „Too many audio packets in the buffer“, dass du in der Lage sein wirst, eine korrekte Synchronisation zu erhalten.

Du brauchst MEncoder zur Verarbeitung des Sounds. Du kannst zum Beispiel den originalen Soundtrack während dem Encodieren mit `-oac copy` kopieren oder ihn mittels `-oac pcm -channels 1 -srate 4000` in eine "leichte" 4 kHz Mono WAV-PCM konvertieren. Anderenfalls wird er - in einigen Fällen - eine Videodatei erzeugen, die nicht mit Audio synchron läuft. So was kommt vor, wenn die Anzahl der Videoframes in der Quelldatei nicht mit der Gesamtlänge der Audioframes zusammenpasst oder immer dann, wenn Unstetigkeiten/Splices vorhanden sind, wo Audioframes oder extra Audioframes fehlen. Der korrekte Weg, mit dieser Art Problem umzugehen, ist Stille (silence) einzufügen oder Audio an diesen Punkten wegzuschneiden. Seis drum, MPlayer kann das nicht, also wenn du AC3-Audio demuxt und es in einer separaten Anwendung encodierst (oder es mit MPlayer in eine PCM dumpst), die Splices bleiben inkorrekt und der einzige Weg sie zu korrigieren ist, Videoframes an diesem Splice zu streichen bzw. zu duplizieren. Solange MEncoder Audio beim Encodieren des Videos sieht, kann er dieses Streichen/Duplizieren erledigen (was gewöhnlich OK ist, da es bei voller Schwärze/Szenenwechsel stattfindet), aber wenn MEncoder Audio nicht erkennen kann, wird er einfach alle Frames so wie sie ankommen verarbeiten und sie werden einfach nicht zum endgültigen Audiostream passen, wenn du beispielsweise deinen Audio- und Videotrack in eine Matroska-Datei mergst.

Zuallererst wirst du den DVD-Sound in eine WAV-Datei konvertieren müssen, die der Audiocodec als Input nutzen kann. Zum Beispiel:

    mplayer source_file.vob -ao pcm:file=destination_sound.wav -vc dummy -aid 1 -vo null

wird den zweiten Audiotrack aus der Datei `source_file.vob` in die Datei `destination_sound.wav` dumpen. Vielleicht willst du den Sound vor dem Encodieren normalisieren, da DVD-Audiotracks gemeinhin bei niedriger Lautstärke aufgenommen sind. Du kannst beispielsweise das Tool normalize verwenden, das in den meisten Distributionen zur Verfügung steht. Wenn du Windows nutzt, kann ein Tool wie BeSweet denselben Job erledigen. Du wirst entweder nach Vorbis oder MP3 komprimieren. Zum Beispiel:

    oggenc -q1 destination_sound.wav

wird `destination_sound.wav` mit der Encodierqualität 1 encodieren, was annähernd 80Kb/s ergibt und die Minimalqualität darstellt, mit der du encodieren solltest, wenn du Wert auf Qualität legst. Nimm bitte zur Kenntnis, dass MEncoder aktuell keine Vorbis-Audiotracks in die Output-Datei muxen kann, da er nur AVI- und MPEG-Container als Output unterstützt, wobei es beim Audio-/Videoplayback zu Synchronisationproblemen mit einigen Playern führen wird, wenn die AVI-Datei VBR-Audiostreams wie z.B. Vorbis enthält. Keine Bange, dieses Dokument wird dir zeigen, wie du das mit Third-Party-Programmen hinbekommst.

### 10.1.12. Muxen

Nun da du dein Video encodiert hast, wirst du es höchstwahrscheinlich mit einem oder mehr Audiotracks in einen Movie-Container wie etwa AVI, MPEG, Matroska oder NUT muxen. MEncoder ist aktuell nur in der Lage, Audio und Video nativ in MPEG- und AVI-Containerformate auszugeben. Zum Beispiel:

    mencoder -oac copy -ovc copy -o output_movie.avi -audiofile input_audio.mp2 input_video.avi

würde die Video-Datei `input_video.avi` und die Audio-Datei `input_audio.mp2` in die AVI-Datei `output_movie.avi` mergen. Dieser Befehl funktioniert mit MPEG-1 Layer I, II und III Audio (eher bekannt als MP3), WAV und auch mit ein paar weiteren Audioformaten.

MEncoder zeichnet sich aus durch experimentellen Support für `libavformat`, das eine Programmbibliothek des FFmpeg-Projekts ist, welches das Muxen und Demuxen einer Vielzahl von Containern unterstützt. Zum Beispiel:

    mencoder -oac copy -ovc copy  -o output_movie.asf -audiofile input_audio.mp2 input_video.avi -of lavf -lavfopts format=asf

wird das selbe machen, wie das obere Beispiel, außer dass der Output-Container ASF sein wird. Bitte nimm zur Kenntnis, dass dieser Support hochexperimentell ist (aber von Tag zu Tag besser wird) und nur funktionieren wird, wenn du MPlayer mit aktiviertem Support für `libavformat` kompiliert hast (was meint, dass eine Pre-Packaged Binary Version in den meisten Fällen nicht funktionieren wird).

#### 10.1.12.1. Verbessern der Mux- und A/V-Synchronisationszuverlässigkeit

Es kann vorkommen, dass du ernsthafte A/V-Synchronisationsprobleme hast während du versuchst, deine Video- und einige Audiotracks zu muxen, wobei es nichts ändert, wenn du das Audiodelay anpasst, du bekommst nie eine korrekte Synchronisation zu Stande. Dies kann vorkommen, wenn du manche Videofilter verwendest, die einige Frames weglassen oder duplizieren, wie etwa die inverse telecine-Filter. ich kann dich nur dazu ermutigen, den `harddup`-Videofilter ans Ende der Filterkette anzuhängen, um solcherlei Problemen aus dem Weg zu gehen.

Ohne `harddup` verlässt sich MEncoder, wenn er einen Frame duplizieren will, darauf, dass der Muxer eine Marke auf den Container setzt, sodass der letzte Frame nochmals angezeigt wird, um während des Schreibens des aktuellen Frames synchron zu bleiben. Mit `harddup` wird MEncoder statt dessen einfach den zuletzt angezeigten Frame nochmal in die Filterkette einschieben. Dies bedeutet, dass der Encoder exakt denselben Frame zweimal entgegen nimmt und komprimiert. Dies ergibt eine etwas größere Datei, verursacht jedoch keine Probleme beim Demuxen oder Remuxen in ein anderes Containerformat.

Du kommst auch nicht um den Einsatz von `harddup` im Zusammenhang mit Containerformaten herum, die nicht allzu fest mit MEncoder verlinkt sind, wie etwa diejenigen, welche von `libavformat` unterstützt werden, der keine Frameduplikation auf Container-Level unterstützt.

#### 10.1.12.2. Limitierungen des AVI-Containers

Obwohl es das am breitesten unterstützte Containerformat nach MPEG-1 ist, besitzt AVI auch einige gravierende Nachteile. Der vielleicht offensichtlichste ist der Overhead. Für jeden Block der AVI-Datei werden 24 Byte auf Header und Indizes verschwendet. Dies heißt übersetzt etwas mehr als 5 MB pro Stunde oder 1-2.5% Overhead für einen 700 MB Film. Das sieht nicht nach viel aus, könnte aber die Differenz zwischen einem Video mit 700 KBit/Sek oder 714 KBit/Sek bedeuten, und jedes bisschen mehr an Qualität zählt.

Zu dieser schockierenden Ineffizienz kommen bei AVI noch folgende wesentlichen Einschränkungen:

1. Nur Inhalt mit festen fps kann gespeichert werden. Dies ist insbesondere dann einschränkend, wenn das Originalmaterial, das du encodieren willst, gemischter Inhalt ist, zum Beispiel ein Mix aus NTSC-Video und Filmmaterial. Eigentlich gibt es Hacks, die es ermöglichen, Inhalt mit gemischter Framerate in einer AVI unterzubringen, diese vergrößern jedoch den (ohnehin großen) Overhead fünffach oder mehr und sind somit ungeeignet.

2. Audio in AVI-Dateien muss entweder konstante Bitrate (CBR) oder konstante Framegröße haben (also alle Frames decodieren zur selben Anzahl Samples). Unglücklicherweise erfüllt Vorbis, der effektivste Codec, keine dieser Anforderungen. Deshalb wirst du einen weniger effizienten Codec wie MP3 oder AC3 verwenden müssen, wenn du planst, einen Film in AVI zu speichern.

Nachdem ich nun all dies erzählt habe, muss ich anmerken, momentan unterstützt MEncoder keinen Output mit variablen fps oder Vorbis-Encodierung. Deswegen magst du dies nicht als Einschränkung ansehen, falls MEncoder das einzige Tool ist, das du nutzt, um deine Ecodierungen zu produzieren. Es ist dennoch möglich, MEncoder nur zur Videoencodierung zu verwenden und danach externe Tools, um Audio zu encodieren und in ein anderes Containerformat zu muxen.

#### 10.1.12.3. Muxen in den Matroska-Container

Matroska ist ein freies, offenes Containerformat, das darauf abzielt, eine Menge erweiterter Features bereitzustellen, mit denen ältere Container wie AVI nicht umgehen können. Zum Beispiel unterstützt Matroska Audioinhalt mit variabler Bitrate (VBR), variable Frameraten (VFR), Kapitel, Dateianhänge, Fehlererkennung Error Detection Code (EDC) und modern A/V-Codecs wie "Advanced Audio Coding" (AAC), "Vorbis" oder "MPEG-4 AVC" (H.264), so gut wie nichts womit AVI etwas anfangen kann.

Die zum Erzeugen von Matroska-Dateien erforderlichen Tools werden zusammen mkvtoolnix genannt und stehen für die meisten Unix-Plattformen wie auch Windows zur Verfügung. Weil Matroska ein offener Standard ist, findest du vielleicht andere Tools, die sich besser für dich eignen, aber da mkvtoolnix das am meisten Verbreitete ist und von Matroska selbst unterstützt wird, werden wir nur dessen Anwendung einbeziehen.

Möglicherweise der einfachste Weg, mit Matroska anzufangen, ist MMG zu verwenden, das grafische Frontend, das mit mkvtoolnix daherkommt, und dem guide to mkvmerge GUI (mmg) zu folgen.

Du kannst Audio und Video-Dateien auch per Befehlszeile muxen:

    mkvmerge -o output.mkv input_video.avi input_audio1.mp3 input_audio2.ac3

würde die Video-Datei `input_video.avi` und die zwei Audio-Dateien `input_audio1.mp3` und `input_audio2.ac3` in die Matroska-Datei `output.mkv` mergen. Matroska, wie zuvor beschrieben, ist in der Lage, noch viel mehr als das zu tun, wie etwa multiple Audiotracks (inklusive Feintuning der Audio-/Videosynchronisation), Kapitel, Untertitel, Splitting, usw... Sieh bitte in den Dokumentationen dieser Anwendungen nach mehr Details.

[1] Sei trotzdem vorsichtig: MPEG-4 AVC-Videos in DVD-Auflösung zu decodieren erfordert einen schnellen Rechner (z.B. einen Pentium 4 über 1.5GHz oder einen Pentium M über 1GHz).

[2] Dieselbe Encodierung kann auf dem Monitor eines anderen vollkommen anders aussehen oder wenn sie von einem anderen Decoder abgespielt wird, also mach deine Encodierungen zukunftssicher indem du sie unter verschiedenen Setups ablaufen lässt.

Zurück | Nach oben | Weiter
Kapitel 10. Encodieren mit MEncoder | Zum Anfang | 10.2. Wie mit telecine und interlacing in NTSC-DVDs umgehen