Entfernen von Logos

1. Einführung

Dieses Kapitel ist nur eine kleine Erläuterung wie, wann und welche Filter man zum Entfernen von Logos einsetzen kann. Meistens ist die Entfernung von Logos nicht notwendig, da das Logo bei fast jedem 16:9 Film weggecroppt wird. Ausserdem bevorzugen die meisten Leute ein statisches, sauberes Logo gegenüber einem verwaschenen Schmierfleck, der nach dem Entfernen des Logos meistens zurückbleibt. Die Entscheidung liegt also bei Euch, ob sich der ganze Aufwand lohnt. Perfekte Ergebnisse dürft Ihr keinesfalls erwarten.

Grundsätzlich sollte ein Filter zum Entfernen von Logos so früh wie möglich eingesetzt werden. Jeder Filter (mit Ausnahme von Deinterlacern), der vorher eingesetzt wird, verschlechtert das Ergebnis. Ausserdem ist die einhellige Meinung im Doom9-Forum, dass kein Filter Sinn macht, wenn nicht mit Huffyuv oder MJPEG mit Qualitätsstufe 18 oder mehr aufgenommen wurde.

2. VirtualDub

Beachtet bitte, dass dies nur eine grobe Richtlinie ist. Im Internet existieren sehr gute und detaillierte Guides für diese Filter. Für weitere Informationen schaut bitte in die Linkliste im Anhang. Zur Zeit existieren drei Filter zum Entfernen von Logos: Logoaway, Delogo und Xlogo. Nach dem Download (links im Anhang) müssen sie im Plugin-Verzeichnis von VirtualDub ausgepackt werden.

In VirtualDub muss der Filter direkt nach dem Deinterlacer eingefügt werden. Ruft die Funktion Video > Filters > Add auf und wählt einen der drei oben erwähnten Filter. Im nun erscheinenden Fenster legt Ihr die Position und die Größe des Logos fest. Dies ist mehr oder weniger Ausprobiererei. Besser Ergebnisse erzielt Ihr, wenn Ihr einen Screenshot von einem oder mehreren Frames macht und diese in ein vernünftiges Grafikprogramm einlest. Dort könnt Ihr die Koordinaten besser ermitteln. Für die Feineinstellungen müsst Ihr trotzdem das Vorschau-Fenster des Filters verwenden! Einige wichtige Punkte:

Soweit die Grundlagen zu VirtualDub.

3. AviSynth v2.0x / AviSynth v2.5x / GordianKnot

Mit AviSynth habt ihr die Wahl zwischen zwei Filtern zum Logo-Entfernen: Xlogo (verfügbar Plugin für AviSynth 2.5x) oder Dekafka (aus nativen Filtern zusammgesetzt). Letzterer ist deutlich schneller, aber nicht so vorteilhaft. Es folgen eine detaillierte Einführung zu Dekafka und eine kurze Einführung zu Xlogo.

3.1 Dekafka

Es ist möglich, ein Logo mit nativen AviSynth-Filtern zu entfernen. Kopiert die DeKafka-Funktion aus dem Link oben in eine Textdatei und speichert sie unter dem Namen dekafka.avsi. Wenn Ihr das Script in das AviSynth-Plugin-Verzeichnis kopiert, wird es automatisch geladen. Ansonsten müsst Ihr es mit folgender Zeile am Anfang Eures Scriptes importieren:

Import("e:\dekafka.avsi")

Beachtet, dass dieser Filter das Video und die Maskierungsdatei in RGB32 konvertiert, da dies das einzige Format mit einem Alphakanal ist (zumindest bis AviSynth 2.52). Das Logo sollte nach dem Deinterlacing entfernt werden. Im folgenden Beispiel wird das Logo noch vor dem Resize entfernt. Wenn es nach dem Resize entfernt werden soll, muss die Maskierungsdatei nach dem resize erstellt werden.

Erzeugung der Maskierungsdatei
Nach dem Deinterlacing sieht Eurer Script z.B. so aus: he following:

Import("e:\dekafka.avsi")
AviSource("d:\capture.avi")
Trim(begin, end)
Telecide()

Öffnet dieses Script in VirtualDubMod, und wählt aus dem Menü "Video" die Funktion "copy source frame to clipboard". Wählt dazu ein Frame, in dem das Logo deutlich sichtbar ist. Importiert dieses Frame in ein Grafikprogramm. Dort schneidet Ihr das Logo so aus, dass es noch an allen Seiten von mindestens vier Pixeln des Videos umgeben ist:

Ergebnis:

Färbt das Logo weiß, inklusive ein Pixel des umgebenden Videos, und den Rest schwarz:

Jetzt habt Ihr zwei Möglichkeiten: Erstellt einen AVI-Film daraus (möglich z.B. mit Corel Photo-Paint) oder speichert die Maske als BMP/JPEG/PNG-Datei. Öffnet den Script-Editor von VirtualDubMod (Strg-E) und ladet Eure Maske:

1) Wenn Ihr einen AVI-Film Eurer Maske erstellt habt, sieht das Script z.B. so aus (der Loop-Filter dient dazu, das Masken-Video genau so lang zu machen, wie das Video):

Import("e:\pdwork\dekafka.avsi")
clip = AviSource("e:\pdwork\DO-Heaven.avi")
clip = Telecide(clip)
maskclip = AviSource("e:\pdwork\mask.avi")
Loop(maskclip, Framecount(clip))

2) Wenn Ihr eine Bilddatei Eurer Maske erstellt habt, sieht das Script z.B. so aus (hier wird ImageReader benutzt, um die Bilddatei zu laden, bei AviSynth 2.0x muss das Plugin "ImageWriter" geladen werden). Der Loop-Filter dient dazu, das Masken-Video genau so lang zu machen, wie das Video):

Import("e:\pdwork\dekafka.avsi")
clip = AviSource("e:\pdwork\DO-Heaven.avi")
clip = Telecide(clip)
maskclip = ImageReader("e:\pdwork\mask.jpg", 0, 0)
maskclip = FlipVertical(maskclip)  # nötig, wenn DevIL die Bilddatei lädt, anstelle des AviSynth-internen BMP-Parsers
Loop(maskclip, Framecount(clip))

Einrichten von DeKafka im AviSynth Script
Als nächstes fügen wir den DeKafka-Filter hinzu. Syntax:

dekafka(clip clip, clip maskclip, int Xstart, int Ystart, int X, int Y, int Amount)

(Xstart, Ystart) bilden die linke Ecke der Maske. Die X-Achse verläuft von links nach rechts, die Y-Achse von oben nach unten. "X" ist die Breite und "Y" die Höhe der Maske. "Amount" bestimmt den Vermischungsgrad zwischen Maske und Video (mit amount=0 sieht man nur das Video, mit amount=256 sieht man nur die Maske, alle Werte dazwischen vermischen Video und Maske). Fangt mit amount=128 an. In unserem Beispiel ist das Logo in der rechten oberen Ecke (Xstart, Ystart) = (500, 2):

Import("e:\pdwork\dekafka.avsi")
clip = AviSource("e:\pdwork\DO-Heaven.avi")
clip = Telecide(clip)
maskclip = ImageReader("e:\pdwork\mask.jpg", 0, 0)
maskclip = FlipVertical(maskclip)  #nötig, wenn DevIL die Bilddatei lädt, anstelle des AviSynth-internen BMP-Parsers
maskclip = Loop(maskclip, Framecount(clip))
dekafka(clip, maskclip, 500, 2, maskclip.width, maskclip.height, 256)

Scrollt langsam durch das Video, bis Ihr das Maskierungslogo seht:

Wenn Ihr es gefunden habt, ändert die Position (Xstart, Ystart), bis die Positionen von Maske und Logo übereinstimmen:

Import("e:\pdwork\dekafka.avsi")
clip = AviSource("e:\pdwork\DO-Heaven.AVI")
clip = Telecide(clip)
maskclip = ImageReader("e:\pdwork\mask.jpg", 0, 0)
maskclip = FlipVertical(maskclip)  # This is necessary when DevIL is reading the picture instead of AviSynth internal BMP-parser.
maskclip = Loop(maskclip, Framecount(clip))
dekafka(clip, maskclip, 550, 48, maskclip.width, maskclip.height, 256)

Zum Schluß könnt Ihr den Wert für "Amount" verändern, um das Ergebnis zu verbessern (wenn das Logo wie in unserem Beispiel weiß ist, belasst es bei 256).

3.2 Xlogo

Xlogo ist ein weiterer Filter zum Entfernen von Logos. In AviSynth oder GordianKnot müsst Ihr die Parameter manuell setzen (ich empfehle, den Script-Editor von VirtualDubMod zu benutzen). Beachtet, dass dieser Filter intern nach RGB32 konvertiert, da dies das einzige Format mit einem Alphakanal ist (zumindest bis AviSynth 2.52). Ausserdem muss die Maske eine geradzahlige Höhe und Breite haben.

Folgende Punkte müssen im AviSynth-Script eingerichtet werden:
LoadPlugin("c:\yourplugindir\xlogo.dll")

Nach dem Deinterlacing:
Xlogo(Clip, filename, X, Y, ALPHA, T1, T2, T3, B1, B2, B3, WHITE, SIDE, SCENE, FEATHER, NOISE)

So könnte ein vollständiger Xlogo-Aufruf aussehen:

AviSource("e:\pdwork\atomic.avi")
Telecide()  # or some other deinterlace method
Xlogo("e:\guides\000000.bmp", 530, 38, 0)  # Xlogo konvertiert intern nach RGB32

4. Download and documentation links

Filter Homepage VDub Download AviSynth Download Dokumentation
Logoaway home VDub dl n/a Doc
Delogo home VDub dl n/a Doc
Xlogo home VDub dl dll Doc (Vdub only)

Hier einige Beiträge aus Diskussionsforen:
doom9.org forum discussion 1
doom9.org forum discussion 2
doom9.org forum discussion 3


Zurück zum Anfang: <HOME>


Last edited on: 09/07/2003 | First release: n/a | Authors: SteVe (killingspree) & Wilbert | Translated by zisoft | Content by doom9.org