• Hallo,

    Ich muss den Thread mal ausgraben, da ich mit Didées Guide ein Problem habe.

    Vorweg, ich bin in Sachen avisynth absoluter Neuling, bitte also um Nachsicht.

    Ich habe nach dem Pdf-Tutorial (Seite 1 heruntergeladen) eine Analyse.bmp erstellt (der Logo-Schnipsel war aus der Ecke links oben herausgeschnitten, 80 Pixel breit und 92 Pixel lang) und damit in VD auch die Masken hinbekommen. Dann habe ich das leicht modifizierte Skript aus dem Guide als delogo_filter.avs abgespeichert (nur den Pfad zu delogo.vdf abgeändert). Dann folgendes avs-Skript erstellt:
    ---------------
    AVIsource("z:\video\filme\film.avi")

    Import("C:\Dokumente und Einstellungen\xxxxx\Desktop\delogo~tmp3\delogo_filter.avs")

    ServeLogo( 80, 92, "LO", 56, 3 )

    DeLogo( 80, 92, "LO", "sat1", Cmix=0.0, Lmix=0.0)

    ---------

    Wenn ich nun dieses Skript in Virtualdub lade, erhalte ich folgende Fehlermeldung:

    Avisynth openfailure: crop: destination width is 0 or less

    Ich komme nicht dahinter - was mache ich falsch?

    Bin für jede Hilfe dankbar!

    Gruß
    Erbse

  • ServeLogo ist nur zum erstellen des Schnipsel, nimm die Zeile mal raus.

    mawi2006

    Intel Q9550@2500 MHz / Motherboard Name Asus P5N-VM WS / Grafikkarte NVIDIA Quattro FX470 / 4x2 GB 800 MHz / DVD-RAM DVR-216DBK / LiteOn IHas 322 / HDD: 500 GB HD502HJ / SSD: Solidata K5 64GB

  • Wenn ich das mache, erhalte ich beim Laden des Skripts diese Fehlermeldung:

    Avisynth open failure: I don't know what "-" means
    (delogo_filter.avs, line 9)
    (delogo_filter.avs, line 41)

    Hier ist mal zur Sicherheit noch delogo_filter.avs:
    --------------
    function VD_DeLogo(clip clip, bool "on_frames", string "range", string "file_deblend", string "file_alpha",
    \ string "file_color", string "file_repair", float "depth", float "power", int "par_X", int "par_Y", bool "interlaced")
    {
    LoadVirtualdubPlugin("C:\Dokumente und Einstellungen\Karin\Desktop\VirtualDub\plugins\delogo.vdf", "_VD_DeLogo")
    X = round(10*depth)
    Y = round(10*power)
    # theoretically: z = 100*log10(par_X/par_Y), as approximation I took a minimax-approximation (calculated with Maple):
    v = - 48.96556825 + 63.18825967*par_X - 16.00966389*par_X*par_X + 2.473556539*par_X*par_X*par_X
    \ – .2133268695*par_X*par_X*par_X*par_X
    \ + .009456579673*par_X*par_X*par_X*par_X*par_X - .0001675297934*par_X*par_X*par_X*par_X*par_X*par_X
    w = - 48.96556825 + 63.18825967*par_X - 16.00966389*par_X*par_X + 2.473556539*par_X*par_X*par_X
    \ – .2133268695*par_X*par_X*par_X*par_X
    \ + .009456579673*par_X*par_X*par_X*par_X*par_X - .0001675297934*par_X*par_X*par_X*par_X*par_X*par_X
    z = round(v) - round(w)
    return clip._VD_DeLogo(default(on_frames,false)?1:0, default(range,""), default(file_deblend,""), default(file_alpha,""),
    \ default(file_color,""), default(file_repair,""), default(X,15), default(Y,40), default(interlaced,false)?1:0, z)
    }
    ### ### ###

    function delogo( clip clp, int Lwidth, int Lheight, string loc, string name,
    \ float "Cmix", float "Lmix", string "name2", bool "i", bool "PP",float "amount")
    {
    name2=default(name2,"")
    PP=default(PP,false)
    amount=default(amount,1.0)
    logomask=(name2=="")?clp:imagereader(name2).loop().trim(0,framecount(clp)).converttoyv12(matrix="PC.601")
    # return logomask.histogram(mode="levels")
    Lmix=default(Lmix,0.0)
    Cmix=default(Cmix,0.0)
    i=default(i,false)
    ox=clp.width
    oy=clp.height
    x1 = (LeftStr(loc,1)=="L") ? 0 : ox-Lwidth
    y1 = (RightStr(loc,1)=="O") ? 0 : oy-Lheight
    logo = clp.crop(x1,y1,Lwidth,Lheight)
    row = (x1==0) ? (y1==0) ? clp.crop(Lwidth,0,-0,Lheight) : clp.crop(Lwidth,oy-Lheight,-0,-0)
    \ : (y1==0) ? clp.crop(0,0,x1,Lheight) : clp.crop(0,oy-Lheight,x1,-0)
    rest = (y1==0) ? clp.crop(0,Lheight,-0,-0): clp.crop(0,0,-0,oy-Lheight)
    ConvertToRGB(logo)
    # log1=VD_DeLogo(false, "", "ana2.bmp", "alpha-G3.bmp", "color-G3.bmp", "repair.bmp", 1.5, 3.0, 1, 1, i).ConvertToYV12()
    log1=VD_DeLogo(false, "", name+"_deblend.bmp", name+"_alpha.bmp", name+"_color.bmp", name+"_repair.bmp", 1.5, 3.0, 1, 1, i).ConvertToYV12()
    log2 = (Cmix==0.0 && Lmix==0.0)
    \ ? log1 : VD_DeLogo(false, "", name+"_deblend.bmp", name+"_alpha.bmp", name+"_color.bmp", name+"_repair_c.bmp", 2.5, 3.0, 1, 1, i).ConvertToYV12()
    LL=string(int(round(Lmix)))
    LL1=string(int(round(Lmix*100.0)))
    # log1.DEdgemask(0,255,0,255,"1 1 1 1 0 1 1 1 1",U=2,V=2)
    # log1.yv12convolution("1 8 28 56 76 56 28 8 1","1 8 28 56 76 56 28 8 1")
    PP ? (i ? log1.yv12convolution("1 8 28 56 76 56 28 8 1","1 0 28 0 76 0 28 0 1")
    \ : log1.yv12convolution("1 8 28 56 76 56 28 8 1","1 8 28 56 76 56 28 8 1") )
    \ : log1
    # log1.yv12convolution("1 8 28 56 76 56 28 8 1","1 0 6 0 15 0 20 0 15 0 6 0 1")
    log1=Lmix<=1.0?log1:yv12lutxy(last,log1,yexpr="x y "+LL+" + > x "+LL+" - x y "+LL+" - < x "+LL+" + y ? ?",U=2,V=2)

    Cmix==0.0 ? log1 : MergeChroma(log1,log2,Cmix)
    Lmix==0.0 ? last
    \: Lmix >1.0 ? yv12lutxy(last,log2,yexpr="x y "+LL+" + > x "+LL+" - x y "+LL+" - < x "+LL+" + y ? ?",U=2,V=2)
    \: yv12lutxy(last,log2,yexpr="x 100 "+LL1+" - * y "+LL1+" * + 100 /",U=2,V=2)
    # \: MergeLuma(last,log2,Lmix) ## -->"Access violation" ... yippieh ... müsse mache yv12lutxy ...

    # PP?yv12convolution("1 8 28 56 76 56 28 8 1","1 0 28 0 76 0 28 0 1",U=2,V=2):last
    PP?(i?separatefields.Removegrain(2).weave:removegrain(2)):last
    PP?temporalsoften(2,11,11,23,2).AddGrain(5,.0,.0):last
    # PP?repair(last.sharpen(1),last,mode=1,modeU=3):last
    name2==""?last:maskedmerge(logo,last,logomask.FitY2UV(),Y=3,U=3,V=3)

    row2 = (x1==0) ? stackhorizontal(last,row) : stackhorizontal(row,last)
    y1==0 ? stackvertical( row2,rest) : stackvertical( rest,row2)
    return last
    }

    Function ServeLogo( clip clp, int Lwidth, int Lheight, string loc, int "SnipSize", int "avg" )
    { SnipSize = default( SnipSize, 56 )
    avg = default( avg, 3 )
    x1 = (LeftStr(loc,1)=="L") ? 0 : clp.width-Lwidth
    y1 = (RightStr(loc,1)=="O") ? 0 : clp.height-Lheight
    clp.crop(x1,y1,Lwidth,Lheight)
    SelectRangeEvery( SnipSize, 1 )
    return TemporalSoften( avg,255,255,255,2 )
    }

    Das habe ich wie gesagt aus dem Pdf-Dokument übernommen und nur den Pfad zu delogo.vdf abgeändert.

    Erbse

  • Ja ist richtig so, da hatte Didée es falsch kopiert oder das PDF Dokument hat es nicht richtig übernommen, irgendwie so, hatte ich auch mal hier im Forum gelesen, musste leider manuell machen, also in Line 9 und Line 49 das "-" rauslöschen.

    Danach sollte es klappen. :)

  • Hallo,

    habe den Fehler gefunden. Anscheinend ist im pdf-File ein falsches Minuszeichen (Gedankenstrich statt Minuszeichen), ich habe das korrigiert und jetzt funktioniert es.

    Danke!

    Gruß
    Erbse

  • Da haben sich gerade unsere Antworten überschnitten :)

    Allerdings habe ich das falsche Minus nicht nur gelöscht, sondern zum richtigen Minus gemacht, so war es hoffentlich richtig? Scheint jedenfalls zu funktionieren :)

    Erbse

  • So, jetzt habe ich meine ersten Versuche mit dem Skript gemacht.

    Von den Ergebnissen bin ich ein wenig enttäuscht: Es sieht ein bisschen besser aus als mit Logoaway, aber nicht viel. Ich nehme mal an, dass ich noch irgendwas falsch mache - oder erwarte ich zu viel?
    Bei relativ monotonen und detailarmen Hintergründen ist alles wunderbar, zwischendurch sieht man schon, dass da ein Logo war. Ich hänge mal zwei Beispiele an, dazu mein Analyse.bmp. Ausgangsmaterial war ein Film mit dem aktuellen Sat1-Logo (Xvid-kodiert, vom TV Onlinerecorder), für die Analyse habe ich rund 5000 Frames genommen. Als Delogo-Skript habe ich nun das aus #250 in diesem Thread genommen (übrigens wäre es nicht schlecht, wenn man dort dazuschreiben könnte, dass man das MaskTools-Plugin dafür braucht). Das Sat1-Logo ist doch eigentlich schön transparent, sollte da nicht mehr gehen?

    Fragen:

    1. Nachdem die Analyse gelaufen ist, soll man "Alpha to repair" und "Deblend falloff" auf Null stellen. Wenn ich das mache, sehe ich aber praktisch das originale Logo ohne Veränderung. Erst wenn ich "Alpha to repair" ganz weit nach rechts schiebe und "repair radius" auch ziemlich weit, verschwindet das Logo und wenn ich dann die Masken abspeichere, erhalte ich das oben beschriebene Ergebnis. Woran kann es liegen? Ich habe mir die Anmerkungen zu Fehlerquellen durchgelesen, aber sollte man nicht wenigstens eine kleine Verbesserung schon dann sehen, wenn die Regler auf Null stehen?

    2. Den Teil mit den zwei Masken-Sets habe ich leider nicht richtig verstanden. Kann mir bitte jemand Punkt für Punkt (Telegrammstil reicht) erklären, wie ich dafür nach der Analyse vorgehen muss, welche Regler ich wann verschieben muss und woher ich weiß, welche Werte ich dann in etwa bei lmix und cmix nehmen muss? Ich habe es zwar mal versucht und es hat auch geklappt, aber mangels Durchblick war das Ergebnis nicht besser als mit nur einem Maskenset.

    Danke schon mal!

    Gruß Erbse


  • Allerdings habe ich das falsche Minus nicht nur gelöscht, sondern zum richtigen Minus gemacht, so war es hoffentlich richtig? Scheint jedenfalls zu funktionieren :)

    Hm ich hatte es gelöscht, scheint wohl beides zu klappen..

    Zu 2. Mit lmix und cmix kannst du eigentlich versuchen selber rumzuspielen, aber Didée hatte mir auch erst neulich geholfen und mir z.B. den Thread gezeigt:
    http://forum.gleitz.info/showpost.php?p=172450&postcount=250

    Da sind ein paar Einstellungen erklärt und im Screen sieht man auch, was so möglich ist. Wird ausserdem auch auf dem Sat.1 Logo angewendet, allerdings weiß ich nicht, ob sich das Sat.1 Logo verändert hat.

    Zu 1. bei mir war es auch so, das wenn ich alles auf 0 stelle, wie es auch im tutorial steht, das logo voll sichtbar war und ich es erst ganz weit nach rechts schieben musste, damit es verschwindet oder zumindest überblendet wird.

    Die Avisynth einstellungen sind aber deutlich besser und bei mir war das logo dann auch meiste zeit weg. Ich benutz jetzt allerdings eine andere Methode, die mir das beste Ergebnis, bei wenig Arbeit bringt, aber das ist dann wohl eher ansichtssache.

  • Re 2.)

    - Analyse durchlaufen lassen
    - alpha to repair -> 0
    - alle Masken speichern: "sat1_deblend.bmp", "sat1_alpha.bmp", usw.
    - alpha to repair --> gerade so hoch wie nötig einstellen, dass Problembereiche verwischt werden
    - jetzt nochmal alle Masken speichern: "sat1_deblend_c.bmp", "sat1_alpha_c.bmp", usw.


    Wenn direkt nach der Analyse, mit alpha-to-repair auf "Null", das Logo immer noch *unverändert* zu sehen ist, dann hast Du wohl etwas falsch gemacht. Was das sein könnte, kann ich Deiner Beschreibung leider nicht entnehmen.
    Diesen Grundsatzfehler musst Du erst mal ausmerzen. Wenn schon der Anfang nicht stimmt, dann macht's wenig Sinn, mit den "Zusatzoptionen" herumzuspielen.


    Und: Die Quelle scheint in 512x384 vorzuliegen? Also, wenn das Video vorher schon mal (Xvid-?) - komprimiert worden ist, dann wird das Ergebnis bestimmt sub-optimal ...

    Kannst ja mal alle Masken (als BMP, nicht JPG!!!) posten, die Du bislang fabriziert hast. Vielleicht kommt dann die zündende Idee, wo der Fehler liegen könnte.

  • @Lugia

    Zitat


    Zu 1. bei mir war es auch so, das wenn ich alles auf 0 stelle, wie es auch im tutorial steht, das logo voll sichtbar war und ich es erst ganz weit nach rechts schieben musste, damit es verschwindet oder zumindest überblendet wird.

    Die Avisynth einstellungen sind aber deutlich besser

    Was meinst Du damit? Die Avisyntheinstellungen, bevor der Alpha-Regler verschoben wird?

    Und welche Methode verwendest Du denn jetzt?


    Danke!
    Erbse

  • Didée

    Danke für die Anleitung :) Ich werde das mal heute abend ausprobieren, wenn ich mehr Zeit habe, und vorher noch neue Masken erstellen. JPGs hatte ich hochgeladen, weil ich dachte, die BMPs seien zu groß.

    Ja, die Quelle ist sicher nicht optimal, OTR liefert nun mal gleich divx-Dateien in dieser Auflösung. Allerdings habe ich mal mit eigenen Aufnahmen vom VDR experimentiert (vorher als Mpeg2 abgespeichert) und das war nicht besser. Wir haben hier sowieso nur Analog-TV, nix digital.

    Viele Grüße
    Erbse

  • Das habe ich vorhin vergessen zu fragen:

    Re 2.)

    - Analyse durchlaufen lassen
    - alpha to repair -> 0
    - alle Masken speichern: "sat1_deblend.bmp", "sat1_alpha.bmp", usw.
    - alpha to repair --> gerade so hoch wie nötig einstellen, dass Problembereiche verwischt werden
    - jetzt nochmal alle Masken speichern: "sat1_deblend_c.bmp", "sat1_alpha_c.bmp", usw.

    Was ist mit dem Repair Radius? Sollte der nicht für eine oder beide Masken verändert werden?

    Erbse

  • Repair Radius ist zunächst mal wurst-egal. Für die Transparenz-Rückrechnung spielt der Rep.radius überhaupt keine Rolle, und für die Repair-Unterstützung fällt das eher in den Bereich "Fein-Tuning".
    Wichtig ist zunächst mal, das die Transparen-Rückrechnung grundsätzlich funktioniert, also dass das Logo mit [Alpha-to-Repair = Null] mehr oder weniger verschwindet. Solange das (noch) nicht funktioniert, brauchen wir über all' den anderen Kram gar nicht erst zu reden.

  • OK,von diesem Ziel bin ich noch weit entfernt. Ich habe jetzt mal eine neue analyse.bmp gemacht und dabei ein paar weitere Tips aus dem Guide berücksichtigt, z. B. den schwarzen Lettersize-Rand oben grün gefärbt (hatte ich vorher nicht gemacht, was wahrscheinlich ziemlich blöd war). Das Ergebnis ist jetzt mit einem Satz Masken immer noch sehr schlecht, mit 2 Sätzen Masken viel besser als vorher, das Sat1-Logo ist aber in den meisten Szenen noch als "Geist" vorhanden, d.h. es ist ist schon sehr viel besser als mit Original-Logo.
    Ich hänge mal die Bitmaps an (alle zusammen gezippt, bmps gehen im Forum anscheinend nicht - hoffe, das ist ok so).

    Gruß
    Erbse

  • Die grünen und blauen Ränder in der Analyse-Maske sind schon mal gut.
    Die alpha-Masken sehen auch gut aus.

    Normal ist auch die color_c.bmp, NICHT aber die color.bmp. "ganz weiß" sollte diese Maske nicht sein ... sowas entsteht normalerweise, wenn man "deblend_shift" viel zu sehr verstellt hat.

    Die repair_c.bmp ist richtig so. ABER: die repair.bmp ist falsch. Diese Maske soll komplett schwarz sein. So wie die repair.bmp jetzt aussieht, findet überhaupt keine Transparenz-Rückrechnung statt, es wird alles breitgemanscht. Vermutlich stand "alpha to repair" nicht auf Null, als Du die repair.bmp gespeichert hast.

    Nochmal auf Anfang. Im Zweifelsfall bitte ein Sample posten.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!