Bereich einem Farbblock Übermalen

  • Hallo zusammen,

    Ich habe bisher noch nicht viel mit avisynth(2.5x) gearbeitet und komme nicht so recht weiter. Ich Möchte in einem Video einen Bestimmten bereich mit einem farbigen Block überblenden. Die einzige möglichkeit die ich bisher gefunden habe dies zu tun ist mit BlankClip ein Video mit den ausmassen des Block zu erzeugen und diesen dann mit Overlay über der gewünschten Position zu platzieren.
    Kennt einer von euch eine effectivere Metode dies zu tun/fileter der das kann? Denn meine bisherige methode ist mir zu aufwendig, da ich recht viele solche stellen an unterschiedlichen orten und zu unterschiedlichen Zeiten habe. Das heisst ich muss rechtviel ändern für jede Einblendung.

    Bessten dank im Vorraus.

    AC-Sama(Robert Vincenz)
    (werde für das -Chan zu alt :zunge: )

  • hmm,.. bin gerade zu faul, aber gab's bei Avisynth nicht ne Methode, dass man sowas machen könnte:


    Bin mir eigentlich ziemlich sicher sowas schonmal in avisynth gemacht zu haben. ;)

    Das könnte man dann in ein Script schreiben was changePixelto(vonx, nachx, vony, nachy, color) heißt.

    scharfi oder sonst einer der sich intensiver mit avisynth rumschlägt weiß wahrscheinlich wie man das ordentlich aufschreibt. Damit die Syntax stimmt. ;)

    Cu Selur

  • Du könntest auch so einen delogo Filter versuchen, vielleicht kann man da irgendwelche Thresholds so einstellen, dass es einen einfarbigen Block gibt. Und da ist es evtl. einfacher einzustellen.

    z.B. http://www.videohelp.com/tools?tool=354, ist aber ein VDub Filter

    Es gibt eine Theorie, die besagt, dass das Universum sofort verschwinden und etwas noch Unerklärlicheres und Bizarres an seine Stelle treten wird, sobald jemand herausfindet, wofür es gut ist und warum es existiert.

    Es gibt eine andere Theorie, die besagt, dass das bereits geschehen ist.

  • Das mit dem Overlay ist schon recht optimal, wenn du das oft brauchst, musst du eine benutzerdefinierte Funktion schreiben (nicht in C sondern im AviSynth) die genau das macht und als Eingabevariablen deine Werte nimmt.
    also sowas wie:

    function block(clip c, int x, int y) {
    blockclip = blankclip(c,...)
    return overlay(..blockclip,... x , y,...)
    }

    Schreib mal genau deine Vorstellungen (also was genau sich bei bei den verschiedenen Stellen ändern und wie)

  • Ich will ein Bericht untertiteln. Aber es werden auch öffter mal bestimmte Namen und Titel eingebländet. Leider werden diese Einblendungen an verschiedenen stellen am unteren rand eingeblendet und sind immer so breit wie der Text(also variabel).
    Ich hätte also gerne einen filter wo ich folgendes angeben kann:
    -von frame xxxx
    -bis frame xxxx
    -blockposition xx:yy
    -block dimension xx:yy
    -farbe

    AC-Sama(Robert Vincenz)
    (werde für das -Chan zu alt :zunge: )

  • Doch, hat zumindest der Logoaway-Filter,
    ich kann dort ein script laden, in dem Framegenau das Einfügen
    des Logos (farbiges Rechteck) geregelt wird:

    0-51 on ' Gibt den Bereich in Frames an, in dem das Logo eingeblendet wird.
    193-514 on
    1234-3453

  • Bitte schön - hier die "Vollversion". Die vielen Fallunterscheidungen kommen davon, dass ja auch frame 0-0 oder 1-1 oder 0-1 etc. gehen soll, beim Trim aber der zweite Wert "0" das ganze Clip nehmen würde.

    #Beispiel: roter Block auf Version() drauf
    s=version().trim(0,100)
    Block(s,0,2, 10,15, 20,25,$FF0000)
    return last

    #zwei user-Funktionen, die ich dazu brauche: diese können auch als .avsi-Datei im plugin-Verzeichnis abgespeichert werden, dann kennt AviSynth sie immer und in deinem Script muss nur "Block(...)" stehen.

    function Block(clip c, int von, int bis, int _x, int _y, int _width, int _height, int _color) {
    #overlays a block
    block = blankclip(c, color=_color, width=_width, height=_height)
    ov=overlay(c,block,x=_x,y=_y)
    return SwitchClip(c,ov,von,bis)
    }


    function SwitchClip(clip c1, clip c2, int frame_start, int frame_end) {
    # switches between c1 and c2 from frame_start to frame_end
    # 0 : illegal
    # 1 : m-n
    # 2 : 0-0
    # 3 : 0-n
    # 4 : 1-1
    # 5 : 1-n

    mode = 1
    mode = frame_start==0 ? (frame_end==0 ? 2 : 3) : mode
    mode = frame_start==1 ? (frame_end==1 ? 4 : 5) : mode
    mode = ( frame_start>frame_end? 0 : mode)

    return select (mode, \
    c1, \
    trim(c1,0,frame_start-1) ++ trim(c2,frame_start,frame_end) ++ trim(c1,frame_end+1,0), \
    trim(c2,0,-1) ++ trim(c1,1,0), \
    trim(c2,0,frame_end) ++ trim(c1,frame_end+1,0), \
    trim(c1,0,-1) ++ trim(c2,1,1) ++ trim(c1,2,0), \
    trim(c1,0,-1) ++ trim(c2,1,frame_end) ++ trim(c1,frame_end+1,0) \
    )
    }

  • Zitat von WarpEnterprises

    Bitte schön - hier die "Vollversion".


    Solangsam entwickelst du dich zu meinem avisynth Programierer. ;)

    Mit den ersten beiden Sachen komm ich noch klar, aber mit diesem switch nicht.

    Zitat von WarpEnterprises


    mode = 1
    mode = frame_start==0 ? (frame_end==0 ? 2 : 3) : mode
    mode = frame_start==1 ? (frame_end==1 ? 4 : 5) : mode
    mode = ( frame_start>frame_end? 0 : mode)

    müsste da for das Fragezeichen kein leerzeichen, oder erkennt avisynth das trotzdem?


    Was bewirken diese modie?

    AC-Sama(Robert Vincenz)
    (werde für das -Chan zu alt :zunge: )

  • * das "?" braucht keine Leerzeichen drumrum
    * "mode" "bewirkt" nix sondern ist nur mein Zwischenspeicher, damit das ganze lesbarer wird (weil eben AviSynth kein "schönes" if-then-else kann
    * dass ich mehrmals "mode = " -Zeilen habe, soll es auch nur besser lesbar machen. Im Prinzip könnte man eine lange Wurscht machen, nur dann ist sonst echt niemandem geholfen.
    * der Trick kommt dann mit dem Select - netter Befehl, der recht selten "erwähnt" wird, aber wie hier exakt passt (hoffentlich gut genug beschrieben in syntax.htm)

    Alles klar?

Jetzt mitmachen!

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