Mein erstes Video – Teil 2: Deinterlacing
In diesem vierteiligen Artikel-Serie beschreibe ich die Vorgehensweise beim Erstellen meines ersten Videos für unsere Webseite:
1. Teil: Einleitung
2. Teil: Deinterlacing
3. Teil: Video-Komprimierung
4. Teil: Audio-Komprimierung
Interlace und Progressive
Traditionell arbeitet das Fernsehen mit Halbbildern. Ein Halbbild besteht aus allen geraden Zeilen, das andere aus allen ungeraden Zeilen. Wenn der Elektronenstrahl der Bildröhre die Bildpunkte nacheinandere aktiviert, überspringt er jeweils eine Zeile und stellt so abwechselnd die Halbbilder da. Dies nennt sich Zeilensprungverfahren oder auf Englisch “interlace”. Es bewirkt, dass die Darstellungsfrequenz höher ist. Das Bild wirkt ruhiger.
Die Halbbilder haben aber noch einen anderen Effekt: Bei 25 Bilder pro Sekunde und damit 50 Halbbilder pro Sekunde sind die Halbbilder um 20 Millisekunden gegeneinader versetzt. Wenn sowohl die Aufzeichnung, als auch die Wiedergabe so erfolgt, ist das kein Problem. Die Bewegung wirkt sogar flüssiger im Vergleich zu 25 Vollbilder.
Soll aber das gesamte Bild dargestellt werden, so erscheinen bei Bewegungen im Bild horizontale Streifen, da die beiden Halbbilder zeitlich um 20 Millisekunden versetzt sind. Das kann dann so aussehen:
Genau das passiert auch, wenn so ein Video auf einem Computer dargestellt wird. Für Computer sollten die Videos im Vollbildverfahren, engl. “progressive”, vorliegen. Soll ein Video von “interlace” auf “progressive” konvertiert werden spricht man von “deinterlacing”. Übrigens dürfte der Windows Media Player automatisch Deinterlacing anwenden, wenn notwendig. Andere Player (z.B. DivX, QuickTime) machen das zumindest bei mir nicht.
Eine detaillierte Beschreibung mit Grafiken und Beispielbilder findet man beispielsweise unter Interlacing – Luke’s Video Guide oder auf 100fps.com (beide Englisch).
Wenn die aufzunehmende Kamera einen Progressive-Mode hat und man diesen aktiviert, so kann man sich das Deinterlacing natürlich sparen. Allerdings schaffen einige Kameras dann nicht 25 Bilder pro Sekunde. Meine Helmkamera liefert die Videos auch immer im Interlaced-Mode. Außerdem wirkt Interlace mit 50 Halbbilder flüssiger als Progressive mit 25 Vollbildern. Wenn man Zeitlupen-Aufnahmen benötigt oder das fertige Video eine kleinere Auflösung haben soll, ist also Interlace die bessere Wahl.
Deinterlacing-Methoden
Auf 100fps.com (zweite Hälfte der Seite) werden die gängigsten Methoden beschrieben. Außerdem gibt es auf der Webseite eine detaillierte Liste mit unterschiedlichen Deinterlacing-Methoden mit Beschreibung der Qualität und der resultierenden Dateigröße.
Hier eine kurze Aufzählung der wichtigsten Basis-Methoden:
- Blend: Die beiden Bilder werden übereinander gelegt und daraus ein Gesamt-Bild berechnet. Das Resultat sieht so aus, als wären zwei halbtransparente Bilder übereinandergelegt worden. Bei wenig Bewegung sehr gut. Bei Bewegung erscheinen aber unscharfe Geisterbilder.
- Discard: Eines der Halbbilder wird entfernt. Das entstehende Bild ist nur mehr halb so hoch und muss daher skaliert werden. Somit geht natürlich Bild-Information verloren. Außerdem auch die halbe Bewegungsinformation.
- Bob: Für jedes Halbbild wird die jeweils fehlende Zeile aus den bestehenden Zeilen erzeugt. Z.B. durch Verdopplung der vorhandenen Zeilen. Man erhält dann 50 Vollbilder pro Sekunde in der alle im Interlace-Signal vorhandenen Bild- und Bewegungsinformation enthalten sind. 50 Bilder pro Sekunde erhöhen allerdings den Speicherplatzverbrauch.
Daneben gibt es intelligente oder hybride Methoden, die das Bild und auch Bewegungen innerhalb des Bildes analysieren und jeweils die passende Methode für einzelne Bereiche wählen. Das ist vorallem wichtig, wenn in einem Video Teile interlace sind und andere progressive. Z.B. Logos oder Schriften, die über dem Bild liegen.
VirtualDub
Das Werkzeug zum Vor- und Nachbearbeiten von AVI-Video-Dateien ist das Freeware-Tool VirtualDub. Ich habe es für das Deinterlacing, das Skaliern und das Komprimieren des Videos verwendet.
Die Bearbeitung von Videos erfolgt durch Filter. Filter sind Programme, die diverse Veränderungen am Video vornehmen und nacheinander ausgeführt werden können. Neben den fix integrierten Filter können auch einfach externe Filter hinzugefügt werden. Dazu muss der heruntergeladen Filter (die .vdf-Datei) einfach in das “plugins”-Verzeichnis von Virtualdub kopiert werden.
VirtualDub Filter “Deinterlace Smooth”
Ich möchte vorausschicken, dass ich das Deinterlacing mit diesem Filter noch nicht hingebracht habe, da am Ende Bild und Ton nicht mehr synchron waren. Es liegt aber nicht am Filter. Hier mehr:
100fps.com schreibt, das beste Ergebnis beim Deinterlacing sei mit Filter “Deinterlace Smooth” von Gunnar Thalin zu erreichen (Methode 15). Dieser Filter interpoliert in jedem Halbbild die fehlenden Zeilen und macht so aus 50 Halbbildern 50 Vollbilder. Es wird also keine Bild- und Bewegungsinformation verloren. Die Bewegung erscheint sehr flüssig. Das bietet sich besonders an, wenn man Zeitlupeneinstellungen benötigt.
Zum Installieren des Filters in VirtualDub muss dieser nach dem Herunterladen nur entpackt und die Datei DeinterlaceSmooth.vdf in das Verzeichnis plugins/ unter VirtualDub gespeichert werden.
Gunnar Thalin schreibt zum Filter Deinterlace Smooth, dass das Video bereits in Halbbilder vorliegen muss. Bei MJPEG-Videos (Motion JPEG) soll das Trennen der Halbbilder VirtualDub selbst können. Ich konnte allerdings nicht ermitteln, wie das gehen sollte (auch nicht nach ausführlicher Internetrecherche).
Die andere Methode die Halbbilder zu trennen ist AVISynth. AVISynth ist ein sogenannter Frameserver. Dieser kann ähnlich wie VirtualDub bestimmte Operationen auf Videos ausführen. Allerdings gibt es keine GUI (Graphical User Interface), sondern die durchzuführenden Aktionen werden in Text-Dateien mit der Endung .AVS geschrieben. VirtualDub kann diese Text-Dateien (= AVISynth-Script) genau so öffnen, wie normale Video-Dateien. Wird so ein AVISynth-Script geöffnet, so wird zuerst der AVISynth-Frameserver aufgerufen, der das Script ausführt und das Ergebnis an VirtualDub weiterreicht.
Die Webseite von AVISynth ist avisynth.org. Hier geht’s zum Download von AVISynth 2.5.7. Ein Installationsprogramm führt durch das Setup.
Das auf Gunnar Thalin’s Seite angegebene Script zum Laden des Videos und Trennen der Halbbilder hat nicht funktioniert. Ich musste eine andere Funktion zum Öffnen verwenden:
DirectShowSource("D:\Path\4Cross-Koppl-1-2008-Trailer.avi", fps=25)
ComplementParity
SeparateFields
Diese Datei mit der Endung .avs speichern und mit VirtualDub öffnen. Es kann allerdings sein, dass die Halbbilder vertauscht sind. Das sieht man am besten indem man in VirtualDub mit den Cursor-Tasten durch das Video navigiert und die Bewegungen beobachtet. Wenn da plötzlich Rückwärtsbewegungen zwischen zwei aufeinadnerfolgenden Hallbilder auftreten, sollte man die Zeile “ComplementParity” entfernen. Soweit ich mich erinnern kann, habe ich die Zeile manchmal gebraucht, manchmal nicht.
Anschließend kann man unter Videos -> Filters den “Deinterlace Smooth”-Filter hinzufügen. Falls im Ergebnisvideo (rechter Bildschirm) die Bildreihenfolge nicht passt (Rückwärtsbewegungen), muss “Alternate field order” aktiviert werden.
Unter Video -> Compression kann man einen Video-Komprimierungs-Codec auswählen. Wenn man DivX (ich hatte die Testversion) oder Xvid installiert, kann man diese automatisch dort auswählen. Zum Thema Kompression aber später mehr. Zum Testen des Deinterlacing-Ergebnisses ist es sinnvoll bei den Codecs eine sehr gute Qualität z.B. in Form einer hohen Bitrate einzustellen.
Anschließend kann man unter File -> Save As AVI das Ergebnis als AVI speichern lassen. Das kann einige Zeit in Anspruch nehmen. Um das Ergebnis vorab zu prüfen, kann man das Kodieren nach einiger Zeit (über das File-Menü) abbrechen und sich den bereits kodierten Teil des AVIs ansehen.
Problem mit Bild und Ton
Beim fertigen Video fiel mir auf, dass Bild und Ton nicht synchron liefen. Nach einigen Versuchen habe ich rausgefunden, dass das Problem an AVISynth liegen muss. Bereits das per Script in VirtualDub geladene Video hatte diese Verschiebung. Allerdings hatte das Video die korrekte Länge. Das Ende des Videos wurde hinten nochmals angefüllt. Deswegen fällt es am Ende alleine nicht auf.
Nach etwas Nachforschung habe ich auch Hinweise dazu gefunden. Angeblich verliert der Befehl zum Laden des Videos DirectShowSource() von AVISynth hin und wieder Frames. Im Bild sind mir diese nicht aufgefallen. Aber es müssen einige gewesen sein. Am Ende des 4:03 Minuten langen Trailer fehlten sieben Sekunden.
Ich habe im Internet noch keine Lösung dafür befunden. Damit muss ich mich also noch genauer beschäftigen. Eventuell können die Halbbilder anders getrennt werden, oder es gibt eine andere Lösung mit AVISynth. Eventuell funktioniert es mit dem neuen AVISynth 3.0.
Ansonst ist das Ergebnis hervorragend. Lädt man das Video erneut in VirtualDub sieht man auch schön, dass es jetzt 50 Frames pro Sekunde sind. Der Abstand zwischen zwei Frames beträgt 20 ms.
Verbesserungen
Wenn ich das Problem mit der Synchronität lösen kann, wäre es in Zukunft sicher viel sinnvoller, das Deinterlacing gleich mit dem Rohmaterial durchzuführen, und das dann zu schneiden. Durch die höhere Framerate hat man dann auch bei Zeitlupenaufnahmen mehr Spielraum. Das Ausgangsmaterial zum Schneiden ist dann “progressive”. Es können also keine Probleme mit Text- und Logo-Einblendungen auftreten.
Problematisch kann aber sein, dass 50 Bilder pro Sekunde manche Computer beim Dekomprimieren (also bei der Anzeige) überfordern können.
GSpot
An dieser Stelle möchte ich gleich ein weiteres Freeware-Tool vorstellen: GSpot analysiert Videos und liefert viele wichtigen Details: Größe des Video- und Audio-Streams, Codec von Video und Audio, Bitraten, Framerates, Bildgröße, Bildformate, und vieles mehr. Dies kann bei solchen Tests und vorallem dann beim Komprimieren sehr nützlich sein.
Deinterlacing mit Discard
Nachdem das Deinterlacing mit “Deinterlace Smooth” nicht funktioniert hatte, bin ich erst mal daran gegangen eine kleine Version des Videos zu machen. Ich wollte sowieso zwei Versionen machen: Eine kleine mit halber Auflösung und eine größere mit voller Auflösung.
Das Deinterlacing habe ich vorgenommen, indem ich jeweils ein Halbbild verwerfe und den Rest um die halbe Breite reduziere. (Genaugenommen habe ich hier noch die Umrechnung von 16:9 anamorph auf quadratische Pixel und 4:3 mit Letterbox gemacht. Dazu später mehr.)
Diese Methode kann ganz einfach durch den eingebauten Deinterlace-Filter mit der Option “Discard Field 1″ in VirtualDub vorgenommen. Auch das Skalieren ist äußerst schnell. Auch hier gibt es einen internen Filter. Das Interlacing-Problem ist komplett weg. Das Ergebnis-Video ist sehr scharf. Durch die kleine Größe, kann es gut komprimiert werden.
Man verliert durch diese Methode allerdings die halbe Bewegungsinformation. Bei Schriften, die nachträglich (also progressive) eingefügt wurden, kann das Anti-Aliasing teilweise gestört sein, da ja jede zweite Zeile entfernt wurde.
In der Auflistung von 100fps.com ist das Methode 9. Sie schreiben, dass Verkleinern des Videos nach Anwenden des Filters “Smooth Deinterlace” (siehe oben, Methode 16) um 15% größere Dateien liefert, aber 4mal besser aussieht, als diese Methode. Methode 16 wäre also auch mal einen Versuch wert.
Das fertige Video kann hier heruntergeladen werden (Rechts Klick -> Ziel speichern unter …):
4Cross Koppl 2008 Trailer Small (19MB)
Deinterlacing mit “Smart Deinterlace”
Über einen Forumseintrag über Deinterlacing bin ich dann auf einen weiteren Deinterlacing-Filter gestoßen, den ich für die große Version des Videos verwenden könnte: Smart Deinterlace von Donald Graft. Dieser Filter vergleicht die unterschiedlichen Frames und führt dort Deinterlacing aus, wo es notwendig ist. Das Ergebnisvideo hat dieselbe Größe und Framerate. Also in unserem Fall 25 Bilder pro Sekunde. 100fps.com schreibt dazu (Methode 14), dass es ein sehr guter Filter ist, aber das Bild nicht so flüssig ist, da nur 25 Bilder pro Sekunden erzeugt werden. Dafür ist die Dateigröße deutlich kleiner als bei Smooth Deinterlace.
Die Anwendung des Filters ist sehr einfach. Einfach Downloaden, entpacken und den Filters elbst in das Verzeichnis plugins/ unter VirtualDub kopieren. Unter jech2.webz.cz/sd.png findet man eine sinnvolle Konfiguration für den Filter.
Ich bin mit dem Ergebnis dieses Filters sehr zufrieden. Das Video kann hier heruntergeladen werden (Rechts-Klick -> Ziel Speichern unter …):
4Cross Koppl 2008 Trailer Big (56MB)
Weiter geht’s mit Teil 3: Video-Komprimierung
1. Teil: Einleitung
2. Teil: Deinterlacing
3. Teil: Video-Komprimierung
4. Teil: Audio-Komprimierung

7. Juni 2008 um 12:52
[...] 2. Teil: Deinterlacing [...]
7. Juni 2008 um 13:02
[...] 2. Teil: Deinterlacing [...]
7. Juni 2008 um 01:41
[...] 2. Teil: Deinterlacing [...]