Dev


AviLib

(Letztes Update: 07.02.2008)
Allgemeines screenshot

"AviLib" ist eine unter Microsoft Visual C++ Version 6.0 mit MFC entwickelte Testplattform zur Demonstration der Wirkungsweise verschiedener Kompressionsstrategien in Streaming Video / Video On Demand-Systemen (VOD).

Zur Reduzierung der nativen Videodatenrate für schmalbandige Netzwerke, die bei True-Color-Material, PAL-Auflösung und -bildrate durchaus 10 MBytes/s übersteigt, werden verlustbehaftete Kompressionsverfahren mit veriierender Bildauflösung und -rate verwendet.

Im vorgestellten Fall wurde die Möglichkeit einer Separation des "feststehenden" (d. h. unbewegten bzw. konstanten) Bildinhalts, der Hintergrund, vom "bewegten" (d. h. veränderlichen) Bildinhalt, dem sog. Vordergrund, untersucht. Dieses Verfahren wird u. A. auch bei der MPEG-4 Videokompression angewandt und gestattet die getrennte Übertragung des Hintergrundes mit niedriger Bildrate (und höherer Auflösung) vom Vordergrund mit höherer Bildrate (und niedrigerer Auflösung). Je nach Verwendungszweck finden für den Hintergrund z. B. waveletbasierende Kompressionsverfahren und für den Vordergrund MPEG-1/2-Kompression Verwendung.

Funktion circle Die Bildseparationsengine von AviLib basiert auf einem Block-Matching Algorithmus, der im Bild und Folgebild einer Videodatei einander entsprechende, quadratisch umgrenzte Blöcke mit gleichen oder zumindest ähnliche Eigenschaften aufzufinden. Dabei werden bis zu einer gewissen Tiefe Translations- (d. h. Bewegungs-) Vektoren und Rotationen berücksichtigt.

AviLib stellt das Resultat eines Block-Matching Zyklus mittels einer Farbskala (s. Bild rechts) dar, wobei die Farbhelligkeit die Länge und der Farbton die Richtung der Verschiebung einander entsprechender Blöcke angibt.

Gleichfarbig umschriebene Gebiete markieren also ein "Objekt" mit weitgehend gleichen Eigenschaften wie Richtung und Geschwindigkeit (s. auch Bild unten). Entsprechend der Länge und Richtung des Verschiebevektors kann zwischen einzelnen Bildern (sog. Frames) einer Videodatei interpoliert werden mit dem Zweck einer Bildratenerhöhung (z. B. von 15 Bilder/s auf 25 Bilder/s) von grob abgetastetem Quellmaterial, der Überbrückung defekter oder ausgelassener Frames (sog. Dropped Frames) oder der Generierung qualitativ hochwertiger und ansprechender Zeitlupeneffekte.

Bedienung Trotz einer Vielzahl von möglichen Optionen gestaltet sich die Bedienung von AviLib bzw. der AviLib-Engine relativ einfach, da sinnvolle Werte bereits voreingestellt sind. Im Folgenden sollen die Anzeige- und Bedienelemente näher beschrieben werden.

display

Die obere Bildhälfte teilen sich zwei Anzeigefenster. Üblicherweise werden im linken Fenster die Einzelbilder des Ausgangsmaterials und im rechten Fenster die daraus jeweils abgeleiteten Resultate angezeigt.

Ausnahmen:

  • Rotationen und Translationen (Rotate bzw. Shift) - diese beziehen sich immer auf das im linken Fenster angezeigte Quellbild.
  • Motion - diese Option versucht das gerade angezeigte Vollbild mit dem jeweils nächsten Vollbild (d. h. kein Block-Matching) zur Deckung zu bringen. Die untersuchten Verschiebevektoren werden in Reihenfolge der besten Übereinstimmung angezeigt und das Resultat einer subtraktiven Überlagung der aufeinander gepaßten Bilder wird im linken Fenster angezeigt.
  • Color-Circle - diese auf dem Knopf "?" angebrachte Option zeigt den Referenzkreis für die farbliche Darstellung von Verschiebungsvektoren im rechten Fenster.
menu

Auf der unteren Bildhälfte sind die Befehlstasten und die Eingabefelder zur Konfiguration der Parameter angeordnet.

Bedientasten und Eingabefelder:

  • Load: Videodatei (AVI, umkomprimiert) laden.
  • Cancel: Programmabbruch.
  • OK: Dialog beenden.
  • Rotate: Bildinhalt des li. Fensters im Urzeiger- oder Gegen uhrzeigersinn rotieren (höchste Präzision, reversibel!)
  • Progress: Fortschrittsanzeige. Zeigt den Fortschritt der Berechnungen innerhalb eines Bildes an.
  • Framecounter (unterhalb der Progress/Fortschrittsanzeige): Hier kann direkt zum jeweiligen Bild in der AVI-Datei gesprungen werden. Zeigt außerdem den Fortschritt der Gesamtoperation an.
  • Motion: Bildverschiebung des gesamten Bildes suchen. Differenzbild und Verschiebevektor wird angezeigt.
  • Density: Bewegungsvektoren vom angezeigten zum nächsten Bild werden errechnet und das Resultat in einem Farbdiagramm angezeigt.
  • "?": Color-Circle anzeigen.
  • Interpolate: Aus der geladenen AVI-Datei eine neue Datei mit interpolierten Bildern erstellen. Dabei kann sich die Bildrate (bFramerateX <> 1) oder die Clipdauer ändern (bFramerateX =1). Die resultierende Videodatei wird mit einem Zusatz versehen, der den Interpolationsfaktor angibt und steht im Verzeichnis aus dem auch die Quelldatei stammt.
  • Separate: Vordergrund und Hintergrund werden getrennt und in separaten Dateien (mit Endung "_A" bzw. "_B" abgelegt.
  • R, G, B, Y, U, V: Bild(farbanteile) in Histogrammform in Fenster 2 anzeigen. Im Eingabefeld können die Zahl der Balken variiert werden.
Parameter Folgende Parameter können variiert werden:
  • iMaxLen: Maximale Länge des Bewegungsvektors (in Pixeln) der bei Suchen noch erkannt wird. Falls iDelta <> 1, wird auch nach Bewegungen im Sub-Pixel-Bereich gesucht. Die maximale Suchtiefe reduziert sich dann auf den Teil iMaxLen/iDelta.
  • iBoxWidth: Seitenlänge (in Pixeln) des Quadrats bei Interpolationen und Suche über den Block-Matching-Algorithmus. Vorsicht: Große Werte für iMaxLen und iBoxWidth können die Bearbeitungszeit erheblich verlängern.
  • dHysteresis: Hystereseschwelle für die eine Suche nach neuen Bewegungsvektoren als genügend gut abgebrochen wird. Liegt die Übereinstimmungsqualität um die Schwelle unter dem derzeit besten Resultat, wird ein Zähler (der Hit-Counter) erhöht.
  • dHitsFrac: Gibt an, wieviele Treffer ("Counts") der Hit-Counter erreicht haben muss (prozentual von der Gesamtanzahl der möglichen Bewegungsvektoren gesehen), damit die weitere Suche nach übereinstimmenden Bewegungsvektoren abgebrochen wird (s. auch dHysteresis).
  • iDelta: Divisor für Sub-Pixel-Suche. Alle Bewegungsvektoren werden durch diesen Betrag dividiert.
  • bUsePrev: Wenn aktiviert, werden die gut passenden Bewegungsvektoren der vorangegangenen Suche bevorzugt verwendet. Kann Laufzeiteffekte und "fliehende Pixel" verursachen.
  • bSlomoFactor: Gibt die Zahl der interpolierten Bilder zwischen zwei Bildern der Originaldatei (+1) an. bSlomoFactor = 3 bedeutet eine Dehnung um den Faktor 3.
  • bFramerateX: Gibt an, um welchen Faktor die Bildrate zu beschleunigen ist. bFramerateX = 1 bedeutet keine Änderung (z. B. für reine Zeitlupeneffekte), bFramerateX > 1 bedeutet eine Beschleunigung der Bildrate um diesen Faktor (z. B. bFramerateX = 2 und bSlomoFactor = 2 um von 12 fps auf 24 fps zu interpolieren).
Demoversion Folgende Einschränkungen gelten:

  • Der Testzeitraum dauert einen Monat. Danach läßt sich die Demonstrationsversion von AviLib nicht mehr starten.
  • Es können nur unkomprimierte AVI-Dateien von nicht mehr als 100 Frames Länge geladen werden.
Bei weitergehendem Interesse können die Lizenz- und Nutzungbedingungen beim Autor erfragt werden.
Download Eine Installationspaket der aktuellen Demoversion von AviLib (lauffähig unter Windows 2000 und besser) kann hier heruntergeladen werden: setup.exe. Ein mit sehr hoher Suchtiefe gerechnetes Beispielvideo (800kB, DivX-WMA) kann hier heruntergeladen werden.
Schlusswort Für Fragen und Anregungen stehe ich jederzeit zur Verfügung. Viel Spaß beim Testen!