[Avisynth] FadeIn zusammen mit FadeOut => FadeOut warum du nix tuen?!

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [Avisynth] FadeIn zusammen mit FadeOut => FadeOut warum du nix tuen?!

    Anzeige
    Hab hier eine kleine Avisynth Seelsorge ;D

    Ich möchte das der das Bild auch ausblenden tut, es funktioniert aber irgendwie nur das einblenden (FadeIn). Warum ist das so? Ich finde den Fehler nicht.

    Des Weiteren frage ich mich, warum ich das über Trim lösen muss. Mit ApplyRange taucht das Bild gar nicht erst auf. Darum ist ApplyRange auskommentiert, klappte so nicht.

    Hier mein Script: pastebin.com/VZdYBsWw
    Aktuelle Projekte/Videos




    Seit etlichen Monaten komplett veraltete Signatur, wie ihr sicherlich schon bemerkt habt. Habe mittlerweile mehr als 4 Projekte, weshalb die Signatur leider momentan gesprengt ist xD
    Notdürftig die Liste was aktuell läuft: Unreal | Complex DooM (LPT) | DooM 2016 | Need For Speed III: Hot Pursuit | Dirt Rally | Dirt 4 | WRC 7
  • Weil dein Bild keine feste Länge hat. Dein Bild muss die Länge haben wie der Schnitt, sollte ein Fadeout des Bildes erfolgen. Dein Anfang setzt du aber immer mit Frame 0 fest. Bei einem Trim Befehl, ist zwars der Startframe 0 aber der Endframe das in Trim definiert ist, ist nicht gleich der Bildlänge. Deshalb kannste auch kein Fadeout machen.

    Und auch nicht nötig das du beim normalen Fadein und Fadeout eine Framezahl angibst.

    Die Parameter für beide sind immer: (Clip Video, int frame, int color)
    Nicht mehr. Ist der Parameter Clip Video nicht angegeben, wird last verwendet. Resultierend bleibt nur noch Framelänge und Farbe. Farbe ist Standardmäßig Schwarz in die geblendet wird. Bleibt nur noch die Framedauer die du angeben müsstest ^^

    Hier mal deins wo es dann aber funktioniert:
    Spoiler anzeigen

    Quellcode

    1. ### Lade Plugins und setze die globalen Variablen ###
    2. Global breite = 2048
    3. Global hoehe = 1152
    4. Global AR = 0
    5. ### Lade Videoquellen ###
    6. #SetMTMode(3)
    7. AVIload("E:\Lets Play DooM\zandronum 2014-03-15 17-08-22-331.avi", 0, 0, 0, -0, -0)
    8. bild = ImageReader("d:\XVideos\Lets Play DooM\ZDW-Tourn1.png", 0, 500, last.Framerate, pixel_type="rgb32") # Siehe unten beim Schnitt
    9. ### Filter Verarbeitungszone ###
    10. #ApplyRange(last, 2246, 2746, "Overlay", bild, 0, 0, bild.ShowAlpha().FadeIn(100, 0, last.Framerate).FadeOut(200, 0, last.Framerate))
    11. ### Funktion für Video-Laderoutine ###
    12. Function AVIload (String file, int loading, int cl, int co, int cr, int cu) {
    13. (loading == 1) ? FFIndex(file) : nop()
    14. clip0 = (loading == 3) ? LWLibavVideoSource(file) : (loading == 2) ? Import(file) : (loading == 1) ? FFVideoSource(file, threads=1) : AVISource(file, false)
    15. clip1 = clip0.AssumeFPS(Float(Round(clip0.Framerate*1000))/1000).Crop(cl, co, cr, cu)
    16. clip1 = (clip1.width == breite && clip1.height == hoehe) ? clip1 : (AR == 1) ? ((float(Clip1.height * breite) / clip1.width) / 2 == round((float(Clip1.height * breite) / clip1.width) / 2)) ? ((float(Clip1.width * hoehe) / clip1.height) / 2 == round((float(Clip1.width * hoehe) / clip1.height) / 2)) ? clip1 : clip1.ConvertToRGB24() : clip1.ConvertToRGB24() : clip1
    17. clip1 = (clip1.width == breite && clip1.height == hoehe) ? clip1 : (AR == 1) ? (((clip1.width * hoehe) / clip1.height > breite) ? Clip1.PointResize(breite, ceil(float(Clip1.height * breite) / clip1.width)) : Clip1.PointResize(ceil(float(clip1.width * hoehe) / clip1.height), hoehe)) : clip1.PointResize(breite, hoehe)
    18. back = (clip1.width == breite && clip1.height == hoehe) ? clip1 : (AR == 1) ? (0 == 1) ? ImageReader("", 0, clip1.framecount, clip1.framerate).PointResize(breite, hoehe).ConvertToYVY2() : BlankClip(clip1.framecount, breite, hoehe, "YVY2", Clip1.framerate).KillAudio() : clip1
    19. Return (clip1.width == breite && clip1.height == hoehe) ? clip1 : (AR == 1) ? Overlay(back, clip1, (back.width - clip1.width) / 2, (back.height - clip1.height) / 2) : clip1
    20. }
    21. __film = last
    22. __t0 = __film.trim(0, 2245)
    23. __t1 = Overlay(__film.trim(2246, 2746), bild, 0, 0, bild.ShowAlpha().FadeIn(100).FadeOut(100)) # 2746 - 2246 = 500
    24. __t2 = __film.trim(2747, 29680)
    25. __t3 = __film.trim(37530, 91036)
    26. __t0 ++ __t1 ++ __t2 ++ __t3
    Alles anzeigen


    Ansonsten gibt es beim SSM die Möglichkeit, wenn du Blend.avsi importierst in deinen Skript (Oben bei Plugins einfach mit (Import(D:\SSM\Plugins\Blend.avsi) ) angeben) eine bestimmt besseren Blendfilter zu nutzen.

    Und zwars handelt es sich um die Funktion Blende die wie folgt funktioniert:

    Quellcode

    1. # ===============
    2. # Blendfunktionen
    3. # ===============
    4. # clip0 - Das Bild auf das gezeichnet wird
    5. # clip1 - Das Bild was gezeichnet werden soll
    6. # clip1mask - Die Maske für Clip1
    7. # sframe - Der Startframe wo das ganze anfangen soll
    8. # eframe - Der Endframe wo das ganze aufhören soll
    9. # fadeinframe - Die Framelänge die das Fadein benötigt
    10. # fadeoutframe - Die Framelänge die das Fadeout benötigt
    11. # x - Der x Wert für Clip1 in Overlay an welcher Breitenposition positioniert werden soll
    12. # y - Der y Wert für Clip1 in Overlay an welcher Höhenposition positioniert werden soll
    13. # opa - Transparentmaximum max=1.0 min=0.0
    14. Function Blende (clip clip0, clip clip1, clip clip1mask, int sframe, int eframe, int fadeinframe, int fadeoutframe, int x, int y, float opa) {
    15. clip0 = ApplyRange(clip0, sframe, eframe-fadeoutframe-1, "Animate", sframe, sframe+fadeinframe, "Overlay", clip1, x, y, clip1mask, 0.0, clip1, x, y, clip1mask, opa)
    16. return ApplyRange(clip0, eframe-fadeoutframe, eframe, "Animate", eframe-fadeoutframe, eframe, "Overlay", clip1, x, y, clip1mask, opa, clip1, x, y, clip1mask, 0.0)
    17. }
    18. Function GrauBlende (clip clip0, clip clip1, clip clip1mask, int sframe, int eframe, int fadeinframe, int fadeoutframe, int x, int y, float opa) {
    19. clip1 = clip1.Greyscale()
    20. clip1mask = clip1mask.Greyscale()
    21. clip0 = ApplyRange(clip0, sframe, eframe-fadeoutframe-1, "Animate", sframe, sframe+fadeinframe, "Overlay", clip1, x, y, clip1mask, 0.0, clip1, x, y, clip1mask, opa)
    22. return ApplyRange(clip0, eframe-fadeoutframe, eframe, "Animate", eframe-fadeoutframe, eframe, "Overlay", clip1, x, y, clip1mask, opa, clip1, x, y, clip1mask, 0.0)
    23. }
    Alles anzeigen


    Stehen dir keine Masken zur Verfügung, reicht es wenn du das Maskenbild aus dem Bild mit dem Befehl Levels behandelst und absolut Weiß färbst. (Nur für die Maske aber dann)
    Ansonsten halt die Maske des Bildes wie gewohnt mit ShowAlpha generieren.

    Der Rest steht ja da. ^^
  • oh man sowas blödes ..

    vor allem ich habs ja schon mit den längen versucht, aber ich hab nich dran gedacht das es wegen trim 0 und 500 sein muss, sondern hatte da 2246, 2746 drin <.<

    Damnit^^ solche blöden Fehler immer ^^

    Danke dir, geht ;)

    Aber @Sagaras (damit du mein edit siehst^^) haste noch 'ne Idee warum das mit ApplyRange nicht geht?
    Ich meine: ist mir jetzt eh egal, da es mit trim ja auch geht, aber interessieren würds mich ja schon mal.^^
    Aktuelle Projekte/Videos




    Seit etlichen Monaten komplett veraltete Signatur, wie ihr sicherlich schon bemerkt habt. Habe mittlerweile mehr als 4 Projekte, weshalb die Signatur leider momentan gesprengt ist xD
    Notdürftig die Liste was aktuell läuft: Unreal | Complex DooM (LPT) | DooM 2016 | Need For Speed III: Hot Pursuit | Dirt Rally | Dirt 4 | WRC 7

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von De-M-oN ()

  • Aus den gleichen Grund. Dein Bild wird zwars rausgefadet, aber das zerschnippelst du ja wieder unten mit Trim. Bedeutet das keiner deiner Schnitte die Zielframe erreicht hat. Da kannste mit ApplyRange das begrenzen wie du willst ^^

    Wie gesagt, das hier wäre Sinnvoller und wäre denke ich mal auch praktischer für dich gewesen:

    Quellcode

    1. ### Lade Plugins und setze die globalen Variablen ###
    2. Import("D:\SSM\Plugins\Blend.avsi")
    3. Global breite = 2048
    4. Global hoehe = 1152
    5. Global AR = 0
    6. ### Lade Videoquellen ###
    7. #SetMTMode(3)
    8. AVIload("D:\NV.avi", 0, 0, 0, -0, -0)
    9. bild = ImageReader("Doom.png", 0, last.framecount, last.Framerate, pixel_type="rgb32") # Siehe unten beim Schnitt
    10. ### Filter Verarbeitungszone ###
    11. #ApplyRange(last, 2246, 2746, "Overlay", bild, 0, 0, bild.ShowAlpha().FadeIn(100, 0, last.Framerate).FadeOut(200, 0, last.Framerate))
    12. ### Funktion für Video-Laderoutine ###
    13. Function AVIload (String file, int loading, int cl, int co, int cr, int cu) {
    14. (loading == 1) ? FFIndex(file) : nop()
    15. clip0 = (loading == 3) ? LWLibavVideoSource(file) : (loading == 2) ? Import(file) : (loading == 1) ? FFVideoSource(file, threads=1) : AVISource(file, false)
    16. clip1 = clip0.AssumeFPS(Float(Round(clip0.Framerate*1000))/1000).Crop(cl, co, cr, cu)
    17. clip1 = (clip1.width == breite && clip1.height == hoehe) ? clip1 : (AR == 1) ? ((float(Clip1.height * breite) / clip1.width) / 2 == round((float(Clip1.height * breite) / clip1.width) / 2)) ? ((float(Clip1.width * hoehe) / clip1.height) / 2 == round((float(Clip1.width * hoehe) / clip1.height) / 2)) ? clip1 : clip1.ConvertToRGB24() : clip1.ConvertToRGB24() : clip1
    18. clip1 = (clip1.width == breite && clip1.height == hoehe) ? clip1 : (AR == 1) ? (((clip1.width * hoehe) / clip1.height > breite) ? Clip1.PointResize(breite, ceil(float(Clip1.height * breite) / clip1.width)) : Clip1.PointResize(ceil(float(clip1.width * hoehe) / clip1.height), hoehe)) : clip1.PointResize(breite, hoehe)
    19. back = (clip1.width == breite && clip1.height == hoehe) ? clip1 : (AR == 1) ? (0 == 1) ? ImageReader("", 0, clip1.framecount, clip1.framerate).PointResize(breite, hoehe).ConvertToYVY2() : BlankClip(clip1.framecount, breite, hoehe, "YVY2", Clip1.framerate).KillAudio() : clip1
    20. Return (clip1.width == breite && clip1.height == hoehe) ? clip1 : (AR == 1) ? Overlay(back, clip1, (back.width - clip1.width) / 2, (back.height - clip1.height) / 2) : clip1
    21. }
    22. __film = last
    23. __t0 = __film.trim(40, 200)
    24. __t1 = __film.trim(500, 1000)
    25. __t0 ++ __t1
    26. Blende(bild, Bild.ShowAlpha("RGB32"), 100, 700, 75, 75, Last.width - Bild.width, Last.height - Bild.height, 1.0)
    Alles anzeigen


    Die Blende kannste so oft einsetzen bis dir die Bilder ausgehen, ohne das du die Bilder begrenzen musst (Siehe wie ich das Bild geladen habe ^^)

    Das wäre denk ich mal einfacher und auch angenehmer für dich ^^