Animate + Subtitle = Bug?

  • Hallo,

    ich nutze AviSynth für meine "Versus" Videos. Die Möglichkeiten die es mir bietet, übertrifft so ziemlich alles was ich mit "normaler" Video-Software erreichen kann. Vor allem im kostenlosen Bereich. Ein Feature welches ich besonders mag, ist "Animate".
    Für mein aktuelles Projekt würde ich gerne eine Laufschrift realisieren. Der alte Punktestand läuft aus dem Bild raus, während der neue Punktestand dessen Platz einnimmt. Das klappt an sich auch ganz gut. Mein Problem ist jetzt aber, dass die Laufschrift für genau einen Frame an - zumindest für mich - zufälligen Ort platziert wird.

    Hier mal ein paar Screenshots:
    [Blockierte Grafik: http://imageshack.us/a/img812/2038/spj9.th.png]
    (Vor der Animation)

    [Blockierte Grafik: http://imageshack.us/a/img22/7484/d4ma.th.png]
    (1 Bild vor dem "Bug")

    [Blockierte Grafik: http://imageshack.us/a/img28/9366/sgiv.th.png]
    (Bild mit dem "Bug")

    [Blockierte Grafik: http://imageshack.us/a/img546/2227/wzu4.th.png]
    (1 Bild nach dem "Bug")

    [Blockierte Grafik: http://imageshack.us/a/img19/7641/nm6m.th.png]
    (Vorläufiges Ende der Animation)

    Und hier der dazu gehörige Quelltext:

    Code
    Function ChangeScore( clip aClip, string aPlayer, string aType, int aStart, int aEnd ) {    # Zentrum des Punktestandes ermitteln    lX = ( aPlayer == "d" ) || ( aPlayer == "D" ) ? 180 : 1740    lY = 196 # Untere Linie des Punktestandes    lEnd = aEnd <= 0 ? aClip.FrameCount() : aEnd - 1 # Ende der Anzeige des Untertitels    # Punkte anhand der Erfolges vergeben    lPoints = ( aType ==  "h" ) ||  ( aType == "H" ) ? 3 : 0    lPoints = ( aType ==  "b" ) ||  ( aType == "B" ) ? 2 : lPoints    lPoints = ( aType ==  "n" ) ||  ( aType == "N" ) ? 1 : lPoints    # Nachricht auswählen    lMessage = ( aType ==  "h" ) ||  ( aType == "H" ) ? "Haupt (" + string( lPoints ) + ")" : ""    lMessage = ( aType ==  "b" ) ||  ( aType == "B" ) ? "Bonus (" + string( lPoints ) + ")" : lMessage    lMessage = ( aType ==  "n" ) ||  ( aType == "N" ) ? "Neben (" + string( lPoints ) + ")" : lMessage    # Aktuellen Punktestand auswählen    lDisplayScore2 = string( ( aPlayer == "d" ) || ( aPlayer == "D" ) ? gDomenik : gChris )    # Punktestand des Spielers aktualisieren    global gDomenik = ( aPlayer == "d" ) || ( aPlayer == "D" ) ? int( gDomenik ) + int( lPoints ) : int( gDomenik )    global gChris   = ( aPlayer == "c" ) || ( aPlayer == "C" ) ? int( gChris   ) + int( lPoints ) : int( gChris )    # Neuen Spielstand zwischenspeichern        lDisplayScore = string( ( aPlayer == "d" ) || ( aPlayer == "D" ) ? gDomenik : gChris )    # Animation durchführen        # Art des Erfolges einfliegen lassen    aClip=aClip.Animate( aStart   , aStart+29   , "subtitle", lMessage      , -100, 100, aStart, aStart+100, "Verdana", 48, $FFFFFF, $000000, 3, lMessage      ,  180, 100, aStart, aStart+100, "Verdana", 48, $FFFFFF, $000000, 2 )        # Neuen Punktestand einfliegen lassen    aClip=aClip.Animate( aStart+15, aStart+29+15, "subtitle", lDisplayScore ,    0,  lY, aStart, aStart+100, "Verdana", 96, $FFFFFF, $000000, 3, lDisplayScore ,  180,  lY, aStart, aStart+100, "Verdana", 96, $FFFFFF, $000000, 3 )        # Alten Punktestand rausfliegen lassen    aClip=aClip.Animate( aStart   , aStart+29+15, "subtitle", lDisplayScore2,   lX,  lY, aStart, aStart+100, "Verdana", 96, $FFFFFF, $000000, 2, lDisplayScore2, -200,  lY, aStart, aStart+100, "Verdana", 96, $FFFFFF, $000000, 2 )    Return aClip}

    Ich benutze diese Funktion wie folgt: (Entspricht dem obigen Screenshots)

    Code
    Video=Video.ChangeScore( "d", "n", 14080, 19163 )

    Randnotiz: Die Anzeigedauer ist absichtlich nicht auf die volle Länge eingestellt, da ich an diesem Effekt arbeite. ;)

    Ist das ein Bug oder mache ich etwas falsch? Bevor ich es vergesse ... Mir ist bekannt, dass ich den Wert von "align" von 2 auf 3 ändere. Dies auf "von 2 auf 2" zu setzen, ändert jedoch nichts.
    Ich hatte dieses Problem schon einmal, habe mich aber im vorherigen Fall entschieden einen anderen Effekt einzusetzen.
    Das würde ich hier gerne vermeiden. Und manuelles Nachbearbeiten fällt auch weg.

    Über eure Hilfe würde ich mich natürlich sehr freuen.

    Gruß
    Chris. :)

  • Es könnte sein, dass das genau dann passiert, wenn die berechnete Position einen bestimmten Wert erhält:

    AviSynth Wiki: Subtitle – 1. Parameters

    Zitat

    Caution: If your script uses Subtitle with Animate and negative x or y values, x or y might momentarily become -1, causing a glitch in the video.

    Um zu vermeiden, dass die spezielle Koordinate -1 gesondert interpretiert wird, habe ich schon mit anderen Subtitling-Plugins gearbeitet, die eine Verschiebung intern durchführen, wie SubtitleEx (die links in der Spalte "Filter" verlinkte dvutilities_20050717.zip enthält eine Dokumentation im CHM-Format).

  • Hallo und danke für eure Antworten.

    LigH, ich habe mir deinen Link angesehen und festgestellt, dass es viele interessante Plugins gibt, die ich sicherlich gebrauchen kann. Leider enthält der Download von "SubtitleEx" ausschließlich die Hilfe-Datei. Das Plugin selbst fehlt. Nun bin ich zwar nicht immer der Hellste, doch ganz so einfach aufgeben wollte ich natürlich nicht. Also habe ich aus http://avisynth.nl/users/warpente…es_20050717.zip einfach http://avisynth.nl/users/warpenterprises/ gemacht.

    Und tatsächlich landete ich auf der Übersichtsseite des Entwicklers(?). Dort wird aber ebenfalls nur die Hilfe. Auch hier fehlt das eigentliche Plugin. Die Website, die als Nachweis angegeben ist, scheint derzeit überhaupt nicht erreichbar zu sein. Weder http://mvideo.ddpp.net/eng/index.htm noch http://ddpp.net/
    Okay. Letztere URL funktioniert zwar, zeigt jedoch nur ein "Under Construction" an. Und Google meint mich auf den normalen Effekt zu verweisen.
    Lange Rede, kurzer Sinn: Es war mir nicht möglich das von dir erwähnte Plugin herunterzuladen und zu testen. Ich bin sicher, dass ich was übersehen habe. Daher wäre eine kleine Hilfe hier wieder sehr willkommen.

    Und Selur, das mag für statische Untertitel korrekt sein. Aber wie du dem Skript entnehmen kannst, übernimmt es gleichzeitig auch die Berechnung des Punktestandes. So entfällt dieser Teil der Arbeit. Und warum sollte ich .ass-Untertitel anlegen, wenn die eh fast gleich sind? ;)

    Aber ich muss dennoch erwähnen, dass mein Kumpel meine Animation nicht besonders mochte. Grund: Der alte und der neue Punktestand überschneiden sich und es ist man kann nur schwer nachvollziehen, was da genau passiert.
    Ich habe die Animation also geändert. Bei dieser tritt der Fehler auch nicht auf, da die Schrift "im Bild bleibt".
    Doch bevor ich mein Thread als "Gelöst" markiere (und keiner mehr hier reinsieht), würde ich zumindest noch gerne wissen wo ich SubtitleEx herbekomme. Dann könnte ich vielleicht auch wieder den geplanten Effekt verwenden ... Also im anderen Projekt. ;)

    Gruß und danke nochmal an alle
    Chris

Jetzt mitmachen!

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