Ergebnis 1 bis 5 von 5

Thema: Biete AviSynth-Timer ähnlich Showtime()

  1. #1
    Mitglied Avatar von djcj
    Registriert seit
    24. August 2006
    Beiträge
    36

    Standard Biete AviSynth-Timer ähnlich Showtime()

    Ich hoffe das hier ist der richtige Bereich eine von mir erstellte Funktion vorzustellen.

    Ich wollte einen Timer haben und die bei AviSynth mitgelieferte Funktion ShowTime() war mir nicht umfangreich genug, da hab ich mir was passendes zusammen gescriptet.

    Das Ganze enthält zwei Funktionen, timer() und timer_cut().

    timer() blendet einen Timer ein und hat folgende Optionen:
    mode - der Modus, ob mit oder ohne Stunden, Millisekunden, etc:
    hmmss: 0:04:17
    mmss: 04:17
    mss: 4:17
    mssms1: 4:17.3
    mssms2: 4:17.37
    mssms3: 4:17.375
    mssms: 4:17.375
    mmssms1: 04:17.3
    mmssms2: 04:17.37
    mmssms3: 04:17.375
    mmssms: 04:17.375
    hmmssms1: 0:04:17.3
    hmmssms2: 0:04:17.37
    hmmssms3: 0:04:17.375
    hmmssms: 0:04:17.375

    reverse - Lässt den Timer rückwärts laufen.
    color - Farbe (Standart weiß)
    size - Schriftgröße
    x, y - Position des Timers.
    align - Timer-Position relativ zu x, y

    timer_cut() blendet den Timer zwischen Frame a und Frame b ein. Die Optionen sind dieselben wie bei timer(), plus folgender zusätzlicher:
    start, end - Start- und Endframe für den Timer.
    showstart, showend - Wenn beide true gesetzt sind, wird der Timer die ganze Zeit eingeblendet, startet bei Frame a und friert bei Frame b ein. Man kann auch nur den Anfang oder das Ende einblenden.


    Beispiele:

    Code:
    colorbars().trim(0,3000)
    import("timer.avs")
    #timer()
    #timer(mode="mssms1",color=color_green,size=66.6)
    timer_cut(mode="mss",start=500,end=2500,showstart=true,showend=false,size=99.9,x=150,y=200)
    Code:
    blankclip(length=15001,width=320,height=120,fps=1000)
    import("timer.avs")
    timer(mode="mssms3",size=85,y=15)


    PHP-Code:
    ## Written by djcj
    ## Last change: July 14th 2012

    /*
    mode =
    hmmss: 0:04:17
    mmss: 04:17
    mss: 4:17
    mssms1: 4:17.3
    mssms2: 4:17.37
    mssms3: 4:17.375
    mssms: 4:17.375
    mmssms1: 04:17.3
    mmssms2: 04:17.37
    mmssms3: 04:17.375
    mmssms: 04:17.375
    hmmssms1: 0:04:17.3
    hmmssms2: 0:04:17.37
    hmmssms3: 0:04:17.375
    hmmssms: 0:04:17.375
    */

    function FormatTime(int "ms") {

    _s ms 1000
    _ms 
    ms 1000
    _m 
    _s 60
    _s 
    _s 60
    _h 
    _m 60
    _m 
    _m 60

    string(_h)
    string(_m,"%2.0f")
    mm string(_m,"%02.0f")
    ss string(_s,"%02.0f")
    ms string(_ms,"%03.0f")
    ms1 LeftStr(string(_ms,"%03.0f"), 1)
    ms2 LeftStr(string(_ms,"%03.0f"), 2)

    FormatTime = \
    timer_global_mode=="hmmss" h+":"+mm+":"+ss : \ 
    timer_global_mode=="mmss" mm+":"+ss : \ 
    timer_global_mode=="mss" m+":"+ss : \ 
    timer_global_mode=="mssms1" m+":"+ss+"."+ms1 : \ 
    timer_global_mode=="mssms2" m+":"+ss+"."+ms2 : \ 
    timer_global_mode=="mssms3" m+":"+ss+"."+ms : \ 
    timer_global_mode=="mssms" m+":"+ss+"."+ms : \ 
    timer_global_mode=="mmssms1" mm+":"+ss+"."+ms1 : \ 
    timer_global_mode=="mmssms2" mm+":"+ss+"."+ms2 : \ 
    timer_global_mode=="mmssms3" mm+":"+ss+"."+ms : \ 
    timer_global_mode=="mmssms" mm+":"+ss+"."+ms : \ 
    timer_global_mode=="hmmssms1" h+":"+mm+":"+ss+"."+ms1 : \ 
    timer_global_mode=="hmmssms2" h+":"+mm+":"+ss+"."+ms2 : \ 
    timer_global_mode=="hmmssms3" h+":"+mm+":"+ss+"."+ms : \ 
    timer_global_mode=="hmmssms" h+":"+mm+":"+ss+"."+ms NOP

    return FormatTime
    }

    function 
    timer(clip cstring "mode"bool "reverse"int "color"float "size"int "x"int "y"int "align") {

    global 
    timer_global_mode = Default(mode"hmmss")
    reverse = Default(reversefalse)
    global 
    timer_global_color = Default(color$ffffff)
    global 
    timer_global_size size
    global timer_global_x x
    global timer_global_y y
    global timer_global_align align

    source 
    c
    HasAudio
    (source)==true ? Eval("""   # prevents a double reverse on the sound
        a = c.KillVideo
        c = c.KillAudio
    """
    ) : NOP

    reverse==true c.reverse() : c
    c.ScriptClip("subtitle(FormatTime(round((current_frame * 1000) / framerate)), \
                        text_color=timer_global_color, size=timer_global_size, x=timer_global_x, \
                        y=timer_global_y, align=timer_global_align)"
    )
    reverse==true c.reverse() : c
    HasAudio(source)==true AudioDub(ca) : c   # prevents a double reverse on the sound
    return c
    }

    function 
    timer_cut(clip cstring "mode"int "start"int "end"bool "reverse"bool "showstart",\
                         
    bool "showend"int "color"float "size"int "x"int "y"int "align") {

    global 
    timer_global_mode = Default(mode"hmmss")
    reverse = Default(reversefalse)
    showstart = Default(showstartfalse)
    showend = Default(showendfalse)
    color = Default(color$ffffff)

    IsInt(start)==false || IsInt(end)==false ? Eval("""
        start = round(c.framecount/3)
        end = 2*round(c.framecount/3)
        c = c.subtitle("
    No value set for parameter START and/or END!", align=2, size=round(c.width*0.05))
    """
    ) : NOP

    fs 
    round(((end-start) * 1000) / c.framerate)
    zero reverse==true FormatTime(fs) : FormatTime(0)
    time reverse==true FormatTime(0) : FormatTime(fs)
    zero showstart==false "" zero
    time 
    showend==false "" time

    c.trim(0,start-1).subtitle(zerotext_color=colorsize=sizex=xy=yalign=align)++\
    c.trim(start,end).timer(mode=timer_global_modereverse=reversecolor=colorsize=sizex=xy=yalign=align)++\
    c.trim(end+1,0).subtitle(timetext_color=colorsize=sizex=xy=yalign=align)
    return 
    c


    Und hier noch ein Skript das einen rotierenden Balken erzeugt (sinnfrei):
    PHP-Code:
    function lol(clip last) {
        
    scriptclip("""
            ms = round((current_frame * 1000) / framerate) % 1000

            a = " 
    |"
            b = " 
    /"
            c = "
    "
            d = " 
    \"

            lol = \
            ms <= 125 ? a : \ 
            ms <= 250 ? b : \ 
            ms <= 375 ? c : \
            ms <= 500 ? d : \ 
            ms <= 625 ? a : \ 
            ms <= 750 ? b : \
            ms <= 875 ? c : d

            subtitle(lol)
        """
    )

    Geändert von djcj (14. July 2012 um 15:59 Uhr)

  2. #2
    Erklär-Bär Avatar von LigH
    Registriert seit
    19. April 2003
    Ort
    Gardelegen
    Alter
    37
    Beiträge
    37.861

    Standard AW: Biete AviSynth-Timer ähnlich Showtime()

    Vielen Dank für deinen Beitrag.

    Ich schiebe ihn aber besser in die Forenrubrik, die auch gleich den passenden Namen hat: "AviSynth".

    Auf gute Zusammenarbeit:

    REGELN befolgen | SUCHE benutzen | FAQ lesen | STICKIES beachten




  3. #3
    Mitglied Avatar von djcj
    Registriert seit
    24. August 2006
    Beiträge
    36

    Standard AW: Biete AviSynth-Timer ähnlich Showtime()

    Habe das Script nochmals überarbeitet:

    PHP-Code:
    ## Written by djcj
    ## Last change: July 12th 2012

    /*
    mode =
    hmmss: 0:04:17
    mmss: 04:17
    mss: 4:17
    mssms1: 4:17.3
    mssms2: 4:17.37
    mssms3: 4:17.375
    mssms: 4:17.375
    mmssms1: 04:17.3
    mmssms2: 04:17.37
    mmssms3: 04:17.375
    mmssms: 04:17.375
    hmmssms1: 0:04:17.3
    hmmssms2: 0:04:17.37
    hmmssms3: 0:04:17.375
    hmmssms: 0:04:17.375
    */

    function FormatTime(int "ms") {

    _s ms 1000
    _ms 
    ms 1000
    _m 
    _s 60
    _s 
    _s 60
    _h 
    _m 60
    _m 
    _m 60

    string(_h)
    string(_m,"%2.0f")
    mm string(_m,"%02.0f")
    ss string(_s,"%02.0f")
    ms string(_ms,"%03.0f")
    ms1 LeftStr(string(_ms,"%03.0f"), 1)
    ms2 LeftStr(string(_ms,"%03.0f"), 2)

    FormatTime = \
    mode=="hmmss" h+":"+mm+":"+ss : \ 
    mode=="mmss" mm+":"+ss : \ 
    mode=="mss" m+":"+ss : \ 
    mode=="mssms1" m+":"+ss+"."+ms1 : \ 
    mode=="mssms2" m+":"+ss+"."+ms2 : \ 
    mode=="mssms3" m+":"+ss+"."+ms : \ 
    mode=="mssms" m+":"+ss+"."+ms : \ 
    mode=="mmssms1" mm+":"+ss+"."+ms1 : \ 
    mode=="mmssms2" mm+":"+ss+"."+ms2 : \ 
    mode=="mmssms3" mm+":"+ss+"."+ms : \ 
    mode=="mmssms" mm+":"+ss+"."+ms : \ 
    mode=="hmmssms1" h+":"+mm+":"+ss+"."+ms1 : \ 
    mode=="hmmssms2" h+":"+mm+":"+ss+"."+ms2 : \ 
    mode=="hmmssms3" h+":"+mm+":"+ss+"."+ms : \ 
    mode=="hmmssms" h+":"+mm+":"+ss+"."+ms NOP

    return FormatTime
    }

    function 
    timer(clip cstring "mode"bool "reverse"int "color"float "size"int "x"int "y"int "align") {

    global 
    mode = Default(mode"hmmss")
    reverse = Default(reversefalse)
    global 
    color = Default(color$ffffff)
    global 
    size size
    global x
    global y
    global align align

    source 
    c
    HasAudio
    (source)==true ? Eval("""   # prevents a double reverse on the sound
        a = c.KillVideo
        c = c.KillAudio
    """
    ) : NOP

    reverse==true c.reverse() : c
    c.scriptclip("subtitle(FormatTime(round((current_frame * 1000) / framerate)), \
                        text_color=color, size=size, x=x, y=y, align=align)"
    )
    reverse==true c.reverse() : c
    HasAudio(source)==true AudioDub(ca) : c   # prevents a double reverse on the sound
    return c
    }

    function 
    timer_cut(clip cstring "mode"int "start"int "end"bool "reverse"bool "showstart",\
                         
    bool "showend"int "color"float "size"int "x"int "y"int "align") {

    global 
    mode = Default(mode"hmmss")
    reverse = Default(reversefalse)
    showstart = Default(showstartfalse)
    showend = Default(showendfalse)
    color = Default(color$ffffff)

    IsInt(start)==false || IsInt(end)==false ? Eval("""
        start = round(c.framecount/3)
        end = 2*round(c.framecount/3)
        c = c.subtitle("
    No value set for parameter START and/or END!", align=2, size=round(c.width*0.05))
    """
    ) : NOP

    fs 
    round(((end-start) * 1000) / c.framerate)
    zero reverse==true FormatTime(fs) : FormatTime(0)
    time reverse==true FormatTime(0) : FormatTime(fs)
    zero showstart==false "" zero
    time 
    showend==false "" time

    c.trim(0,start-1).subtitle(zerotext_color=colorsize=sizex=xy=yalign=align)++\
    c.trim(start,end).timer(mode=modereverse=reversecolor=colorsize=sizex=xy=yalign=align)++\
    c.trim(end+1,0).subtitle(timetext_color=colorsize=sizex=xy=yalign=align)
    return 
    c

    Ein Problem das ich aber noch habe ist, dass ich globals verwenden muss. Weiß jemand wie ich das auch ohne hin bekomme?



    Und ich habe spaßeshalber noch dieses Skript geschrieben (erzeugt rotierenden Balken):

    PHP-Code:
    function lol(clip last) {
        
    scriptclip("""
            ms = round((current_frame * 1000) / framerate) % 1000

            a = " 
    |"
            b = " 
    /"
            c = "
    --"
            d = " 
    \"

            lol = \
            ms <= 125 ? a : \ 
            ms <= 250 ? b : \ 
            ms <= 375 ? c : \
            ms <= 500 ? d : \ 
            ms <= 625 ? a : \ 
            ms <= 750 ? b : \
            ms <= 875 ? c : d

            subtitle(lol)
        """
    )


  4. #4
    Erklär-Bär Avatar von LigH
    Registriert seit
    19. April 2003
    Ort
    Gardelegen
    Alter
    37
    Beiträge
    37.861

    Standard AW: Biete AviSynth-Timer ähnlich Showtime()

    Ob irgendwer rotierende Balken im Bild mag ... Geschmackssache; aber wenn dir das Minus zu kurz ist, versuch doch mal den "Gedankenstrich" (Alt+Num:0151 = —).

    Eigentlich ist es nur im Sinne der Sicherheit, dass Variablen nur im jeweiligen "Blickfeld" (Scope) bekannt sind: Entweder nur innerhalb der Funktion, in der sie durch erstmalige Verwendung deklariert wurden, oder außerhalb jeder Funktion. Nur so kann man halbwegs sicher sein, dass man nicht aus Versehen in importierten Funktions-Skripten etwas durcheinanderbringt, nur weil man in seinem eigenen Skript eine Variable mit dem gleichen Namen verwendet, ohne zu wissen, welche Variablen in den Funktionen verwendet werden. Was du nicht als Parameter an die Funktion weitergibst, muss global verfügbar sein, um eine Variable auch innerhalb der Funktion zu kennen, wenn sie außerhalb der Funktion deklariert wurde. Um Globals zu vermeiden, müsstest du also mode an FormatTime() als Parameter weiterreichen, und den String für ScriptClip() so zusammensetzen, dass die darin enthaltenen Parameterwerte zu Literalen aufgelöst werden (also raus aus dem String und mit String(variable) verketten).

    Auf gute Zusammenarbeit:

    REGELN befolgen | SUCHE benutzen | FAQ lesen | STICKIES beachten




  5. #5
    Mitglied Avatar von djcj
    Registriert seit
    24. August 2006
    Beiträge
    36

    Standard AW: Biete AviSynth-Timer ähnlich Showtime()

    Habe es nicht hinbekommen das Skript ohne Globals zum laufen zu bekommen.
    Aber um etwaige Konflikte mit anderen Skripten zu vermeiden, habe ich
    alle Globals umbenannt nach timer_global_var.

    Habe Startbeitrag aktualisiert.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Biete seltene Stücke aus Urzeit des DVD-Brennens
    Von Diet im Forum Allgemeine Themen zu Rohlingen
    Antworten: 11
    Letzter Beitrag: 3. December 2010, 16:54
  2. VHS Capturen - brauche help biete space.
    Von mausi im Forum Newbies
    Antworten: 19
    Letzter Beitrag: 17. February 2005, 23:50
  3. Suche: Tool ähnlich wie DVDremake
    Von XadoX im Forum IFO/VOB-Editoren
    Antworten: 1
    Letzter Beitrag: 15. September 2004, 10:26
  4. [BIETE] Asus V8460 Ultra TD (GeForce 4 Ti 4600 mit CX 25871)
    Von digidroid im Forum PC-Komplettsysteme, HTPC´s & sonstige PC-Komponenten
    Antworten: 1
    Letzter Beitrag: 30. August 2004, 10:12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •