Bild in Video einfügen

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

  • Bild in Video einfügen

    Anzeige
    Moin Leute

    Hab da gerade ein kleines Problem...
    Ich muss ein Bild in ein Video einfügen, finde aber gerade leider nicht denn Befehl für AVS...
    Hat denn gerade mal jemand schnell zu Hand? :D

    P.s. Muss das Bild das hinzugefügt wird schon in der Endauflösung vorliegen wenn es über das gesamte Video gehen soll, oder wir es hochskalliert?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von GelberDrache92 ()

  • Hab es jetzt mal mit der Blende Funktion von Sagaras probiert

    Spoiler anzeigen
    Function Blende (clip clip0, clip clip1, clip "mask", int "sframe", int "eframe", int "fadeinframe", int "fadeoutframe", int "x", int "y", float "opa") {
    mask = (IsClip(mask) == true) ? mask : BlankClip(0, clip1.width, clip1.height, "RGB24", clip1.frameratenumerator, clip1.frameratedenominator, color = $FFFFFF).KillAudio()
    sframe = Default(sframe, 0)
    eframe = Default(eframe, 40)
    fadeinframe = Default(fadeinframe, 10)
    fadeoutframe = Default(fadeoutframe, 10)
    x = Default(x, 0)
    y = Default(y, 0)
    opa = Default(opa, 1.0)

    clip0 = ApplyRange(clip0, sframe, eframe-fadeoutframe-1, "Animate", sframe, sframe+fadeinframe, "Overlay", clip1, x, y, mask, 0.0, clip1, x, y, mask, opa)
    return ApplyRange(clip0, eframe-fadeoutframe, eframe, "Animate", eframe-fadeoutframe, eframe, "Overlay", clip1, x, y, mask, opa, clip1, x, y, mask, 0.0)
    }


    Eingetragen habe ich:

    Blende("A:\League of Legends\Custom\Miau.mp4", "C:\Users\Stefan\Desktop\mäh.png", true, 0, 1000, 0, 0, 0, 0, 1.0)

    Kommt aber immer:
    Skript error: Invalid arguments tu function "Blende" (C:\Users\Stefan\Desktop\Miau.avs, line 14)

    Verdammt wo ist der Fehler -.-
  • Ich hab ja auch nur die Funktion kopiert xD

    Skript:

    Spoiler anzeigen
    ​### SagaraS Scriptmaker - Version 5.3 ###

    ### Lade Plugins und setze die globalen Variablen ###
    LoadPlugin("D:\Programme\MeGui\tools\ffms\ffms2.dll")
    Import("C:\Program Files (x86)\SagaraS Scriptmaker\Plugins\Blend.avsi")
    Global breite = 3200
    Global hoehe = 1800
    Global AR = 0

    ### Lade Videoquellen ###
    SetMTMode(3,2)
    AVIload("A:\League of Legends\Custom\Miau.mp4", 1, 0, 0, -0, -0)

    Blende("A:\League of Legends\Custom\Miau.mp4", "C:\Users\Stefan\Desktop\mäh.png", true, 0, 1000, 0, 0, 0, 0, 1.0)

    ### Filter Verarbeitungszone ###

    ### Funktion für Video-Laderoutine ###

    Function AVIload (String file, int loading, int cl, int co, int cr, int cu) {
    (loading == 1) ? FFIndex(file) : nop()
    clip0 = (loading == 3) ? LWLibavVideoSource(file) : (loading == 2) ? Import(file).KillAudio() : (loading == 1) ? FFVideoSource(file, threads=1) : AVISource(file, false)
    rate1 = (Round(Float(clip0.framerate * 1000)) / 1000) / 2
    rate2 = Round(clip0.framerate) / 2
    rate = (rate1 == rate2) ? 1 : 1001
    ratefaktor = (rate == 1001) ? 1000 : 1
    clip1 = (rate == 1001) ? clip0.AssumeFPS(Round(clip0.Framerate) * 1000, rate) : clip0.AssumeFPS(round(clip0.framerate), rate)
    clip1 = (clip1.IsRGB32() == True) ? clip1.ConvertToRGB24() : clip1
    clip1 = (cl != 0) ? clip1.Crop(cl, co, cr, cu) : (co != 0) ? clip1.Crop(cl, co, cr, cu) : (cr != 0) ? clip1.Crop(cl, co, cr, cu) : (cu != 0) ? clip1.Crop(cl, co, cr, cu) : clip1
    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(matrix = "Rec709") : clip1.ConvertToRGB24(matrix = "Rec709") : clip1
    clip1 = (clip1.width == breite && clip1.height == hoehe) ? clip1 : (AR == 1) ? (((clip1.width * hoehe) / clip1.height > breite) ? Clip1.Spline36Resize(breite, ceil(float(Clip1.height * breite) / clip1.width)) : Clip1.Spline36Resize(ceil(float(clip1.width * hoehe) / clip1.height), hoehe)) : clip1.Spline36Resize(breite, hoehe)
    back = (clip1.width == breite && clip1.height == hoehe) ? clip1 : (AR == 1) ? (0 == 1) ? ImageReader("", 0, clip1.framecount, clip1.framerate).ChangeFPS(round(clip1.framerate) * ratefaktor, rate).Spline36Resize(breite, hoehe).ConvertToYV12(matrix = "Rec709", ChromaResample = "Spline36") : BlankClip(clip1.framecount, breite, hoehe, "YV12", round(Clip1.framerate) * ratefaktor, rate).KillAudio() : clip1
    Return (clip1.width == breite && clip1.height == hoehe) ? clip1 : (AR == 1) ? Overlay(back, clip1, (back.width - clip1.width) / 2, (back.height - clip1.height) / 2) : clip1
    }
  • Die Funktion Blende erwartet Clips und keine Quellen. ;D

    Das ist das ganze Problem was du hast in deinem Skript

    GelberDrache92 schrieb:

    Quellcode

    1. AVIload("A:\League of Legends\Custom\Miau.mp4", 1, 0, 0, -0, -0)
    2. Blende("A:\League of Legends\Custom\Miau.mp4", "C:\Users\Stefan\Desktop\mäh.png", true, 0, 1000, 0, 0, 0, 0, 1.0)

    Diesen Abschnitt musst du zerlegen

    In AVIload lädst du doch bereits das Video, also ist es Quatsch es noch mal zu laden.

    Folge wäre dann für die Blende:
    Blende(last, ...

    weiter gehts mit dem Bild. Das Bild ist eine Quelle und muss erst geladen werden, damit es als Clip vorhanden ist.

    Das machste dann wie folgt zwischen dem AVIload Eintrag und dem Blend Befehl.

    Bild = ImageReader("C:\Users\Stefan\Desktop\mäh.png", 0, last.framecount-1, last.framerate)

    Erst dann hast du das ganze als Clip indem du dem Bild die Framemenge und die FPS vorgibst.

    Dann kannst du es nämlich in der Blend Funktion erweitern:

    Blende(last, Bild, ...)


    Das ist der Fehler den du halt gemacht hast. Im Grunde verlangst du von der Bilddatei das es ein Clip ist, was es aber nicht ist.
    Genauso hast du den Fehler begangen das was AVIload liefert einfach zu überschreiben. Also du hättest im Endeffekt nix von gehabt. Hätteste nicht gesehen. Wäre verarbeitet worden, aber wär nix bei rausgekommen, weil du der Blend Funktion gesagt hast er solle die Datei noch mal laden.

    Und laden hätteste sie eh nicht können mit der Blend Funktion, da sie keine Laderoutienen hat.

    Dem Filter Blende musst du Clip Variablen geben. Die bekommste von einer Laderoutine.

    Hättest es auch so schreiben können:
    Blende(AVIload("Video.mp4", 1, 0, 0, -0, -0), ImageReader("Bild.png", 0, 5000, 25), ...

    Dann hätteste alles integriert. Kannst es aber auch übersichtlich machen und die Teile in Variablen stecken und dann angeben.
  • Hab es jetzt so:
    Jetzt kommt aber:
    Script error: Invalid arguments to function "Blende" (C:\User... , line 16)

    Spoiler anzeigen
    ### SagaraS Scriptmaker - Version 5.3 ###

    ### Lade Plugins und setze die globalen Variablen ###
    LoadPlugin("D:\Programme\MeGui\tools\ffms\ffms2.dll")
    Import("C:\Program Files (x86)\SagaraS Scriptmaker\Plugins\Blend.avsi")
    Global breite = 3200
    Global hoehe = 1800
    Global AR = 0

    ### Lade Videoquellen ###
    SetMTMode(3,2)
    AVIload("A:\League of Legends\Custom\Miau.mp4", 1, 0, 0, -0, -0)

    Bild = ImageReader("C:\Users\Stefan\Desktop\maeh.png", 0, last.framecount-1, last.framerate)

    Blende(last, Bild, true, 0, 1000, 0, 0, 0, 0, 1.0)

    ### Filter Verarbeitungszone ###

    ### Funktion für Video-Laderoutine ###

    Function AVIload (String file, int loading, int cl, int co, int cr, int cu) {
    (loading == 1) ? FFIndex(file) : nop()
    clip0 = (loading == 3) ? LWLibavVideoSource(file) : (loading == 2) ? Import(file).KillAudio() : (loading == 1) ? FFVideoSource(file, threads=1) : AVISource(file, false)
    rate1 = (Round(Float(clip0.framerate * 1000)) / 1000) / 2
    rate2 = Round(clip0.framerate) / 2
    rate = (rate1 == rate2) ? 1 : 1001
    ratefaktor = (rate == 1001) ? 1000 : 1
    clip1 = (rate == 1001) ? clip0.AssumeFPS(Round(clip0.Framerate) * 1000, rate) : clip0.AssumeFPS(round(clip0.framerate), rate)
    clip1 = (clip1.IsRGB32() == True) ? clip1.ConvertToRGB24() : clip1
    clip1 = (cl != 0) ? clip1.Crop(cl, co, cr, cu) : (co != 0) ? clip1.Crop(cl, co, cr, cu) : (cr != 0) ? clip1.Crop(cl, co, cr, cu) : (cu != 0) ? clip1.Crop(cl, co, cr, cu) : clip1
    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(matrix = "Rec709") : clip1.ConvertToRGB24(matrix = "Rec709") : clip1
    clip1 = (clip1.width == breite && clip1.height == hoehe) ? clip1 : (AR == 1) ? (((clip1.width * hoehe) / clip1.height > breite) ? Clip1.Spline36Resize(breite, ceil(float(Clip1.height * breite) / clip1.width)) : Clip1.Spline36Resize(ceil(float(clip1.width * hoehe) / clip1.height), hoehe)) : clip1.Spline36Resize(breite, hoehe)
    back = (clip1.width == breite && clip1.height == hoehe) ? clip1 : (AR == 1) ? (0 == 1) ? ImageReader("", 0, clip1.framecount, clip1.framerate).ChangeFPS(round(clip1.framerate) * ratefaktor, rate).Spline36Resize(breite, hoehe).ConvertToYV12(matrix = "Rec709", ChromaResample = "Spline36") : BlankClip(clip1.framecount, breite, hoehe, "YV12", round(Clip1.framerate) * ratefaktor, rate).KillAudio() : clip1
    Return (clip1.width == breite && clip1.height == hoehe) ? clip1 : (AR == 1) ? Overlay(back, clip1, (back.width - clip1.width) / 2, (back.height - clip1.height) / 2) : clip1
    }



    P.s. @Sagaras
    Ich weiß jetzt auch wo das Flacker vom Video herkam...
    Das war der Zeitraum wo der sichere Desktop an war.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von GelberDrache92 ()

  • GelberDrache92 schrieb:

    Blende(last, Bild, true, 0, 1000, 0, 0, 0, 0, 1.0)


    Fehler bei der Angabe. Sagt er dir ja auch das eines der Argumente ungültig ist in Zeile 16.

    Quellcode

    1. # ===============
    2. # Blendfunktionen
    3. # ===============
    4. # clip0 - Das Bild auf das gezeichnet wird
    5. # clip1 - Das Bild was gezeichnet werden soll
    6. # mask - Die Maske für Clip1 -> Default = White clip1 Blankclip in RGB24
    7. # sframe - Der Startframe wo das ganze anfangen soll -> Default = 0
    8. # eframe - Der Endframe wo das ganze aufhören soll -> Default = 40
    9. # fadeinframe - Die Framelänge die das Fadein benötigt -> Default = 1
    10. # fadeoutframe - Die Framelänge die das Fadeout benötigt -> Default = 1
    11. # x - Der x Wert für Clip1 in Overlay an welcher Breitenposition positioniert werden soll -> Default = 0
    12. # y - Der y Wert für Clip1 in Overlay an welcher Höhenposition positioniert werden soll -> Default = 0
    13. # opa - Transparentmaximum max=1.0 min=0.0 -> Default = 1.0
    14. Blende (clip clip0, clip clip1, clip "mask", int "sframe", int "eframe", int "fadeinframe", int "fadeoutframe", int "x", int "y", float "opa")
    Alles anzeigen


    Heißt laut der Reglung das deine Angabe wie folgt aussehen müsste:

    Blende(last, Bild, sframe = 0, eframe = 1000, x = 0, y = 0, opa = 1.0)

    Kannst es auch erweitern:
    Blende(last, Bild, sframe = 0, eframe = 1000, fadeinframe = 15, fadeoutframe = 15, x = 0, y = 0, opa = 1.0)

    Keine ArgumentNamen Angaben kannste machen wenn du alle Argumente korrekt ausfüllen tust.
    Dazu zählt auch die Angabe der Maske. Die Maske ist ein Clip und kein boolescher Wert wie du ihn mit True kenntlich gemacht hast.

    Die Maske bezieht sich darauf, wenn ein Clip über ein Alphakanal verfügt.

    Wenn du keinen Alphakanal hast für diesen Clip, kann man auch ein rein Weißes Clip mit gleichen Eigenschaften wie Clip1 (siehe Hilfe für die Blend Funktion) angeben.

    Als Beispiel für eine Alpha Maske:

    Quellcode

    1. ...
    2. Bild = ImageReader("Bild.png", 0, last.framecount-1, last.framerate, pixel_type="RGB32")
    3. Bildmaske = Bild.ShowAlpha(pixel_type="RGB32")
    4. Blende(last, Bild, Bildmaske, 0, 1000, 1, 1, 0, 0, 1.0)



    PS:
    fadeinframe und fadeoutframe immer > 0 angeben die Werte. Nicht 0.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Sagaras ()

  • Weil das getrennt wird dort schon um mehr performance bei der Vorschau zu bekommen. Es wird ja in dem Sinne nicht wie bei einer NLE die Vorschau via GPU berechnet, sondern via CPU.

    Da dies dann auch noch auf 32Bit aufbaut, dank AVISynth, kann das Abspielen eines solchen Skriptes je nach Filtervielfalt extrem ausbremsen. Damit aber der Ton nicht auch berechnet werden muss dabei muss er seperat extrahiert werden für um mehr performance beim Abspielen zu bekommen.

    Du wirst auch nur dann den Ton hören, wenn du ein Track ausgewählt hast oder gemischt hast und es extrahiert hast. Die Preview wird dich dann fragen ob du Ton dabei haben willst.

    Ob Gemischt oder Einzeln oder welcher Track, wählste in der Audio Option aus vorher.

    Die Audio Optionen sollten alle den eigentlichen Skript im SSM nicht ändern, da sie auf ein eigenen Skript beruhen.