avisynth layer Problem

  • Hallo Leute,

    Ich versuche die Funktion, zwei clips zu verschmelzen(also pip) mit avisynth zu machen.Leider gelingt es mir nicht. Was mache ich falsch, dass mir der Fehlercode "Layer only support YUV2 Format" unterläuft?
    Hier ist mein Quellcode:

    #Script
    # clips definieren
    clip1=DirectShowSource("C:\Media\projekt\pie.avi")
    clip2=DirectShowSource("C:\Media\projekt\geschenk.avi")

    # beide zu YUV2 konvertieren
    ConvertToYUY2(clip1)
    ConvertToYUY2(clip2)

    # zusammenschmelzen
    Layer( clip1, clip2, "add", 255, 5, 170, 50,TRUE)


    Könnt Ihr mir bitte helfen?
    Danke,
    Georg

  • Code
    #Script# clips definierenclip1=DirectShowSource("C:\Media\projekt\pie.avi")clip2=DirectShowSource("C:\Media\projekt\geschenk.avi")# beide zu YUV2 konvertierenclip1=ConvertToYUY2(clip1) clip2=ConvertToYUY2(clip2) # zusammenschmelzenLayer( clip1, clip2, "add", 255, 5, 170, 50,TRUE)

    aber besser:

  • Kleiner Tipp:

    Lies in der Dokumentation, die im Installer von AviSynth mitgeliefert wird, noch mal den Abschnitt zur impliziten Clip-Variablen "last".

    AviSynth-Funktionen sind Funktionen und geben einen Wert zurück - meist einen "clip". Bei dir im Abschnitt "beide zu YUV2 konvertieren" willst du zwar die Konvertierfunktion auf die Source-Clips anwenden, aber das konvertierte Ergebnis verarbeitest du nicht weiter, es geht verloren.

    Und noch einmal, weil ich es ja "noch nie" erwähnt habe: DirectShowSource ist immer dier allerletzte Ausweg, wenn sonst nichts anderes hilft!

  • Danke katjarella und LigH!

    Ich habe mein Problem durch euch erkannt. Könnte man irgendwie weniger Zeilen schreiben(als das von mir unten)?

    ich stelle mir da vor so 20-30 Stück vobs zu schneiden. Wenn es geht würde ich Sie nicht von Frame zu Frame schneiden sondern von x min zu x min. Es ist etwas umständlich für zwanzig Dateien in vd zu laden und die Frames nachzuschauen. Die Vob-Dateien kann ich mir in vlc anschauen und die Zeiten notieren.Oder gäbe es eine andere bessere Lösung?

    Ich habe deshalb DirectShowSource verwendet, weil das keine avis sind sondern mpeg2 oder kann man mit AviSource auch mpeg2 laden?.

    Also würde folgendes gehen?

    # alle clips erst mal laden
    clip3=AviSource("C:\mein Film")
    clip4=AviSource("C:\mein Film1")
    clip5=AviSource("C:\mein Film2")
    clip6=AviSource("C:\mein Film3")
    # usw...

    #jetzt schneiden
    teil1=clip3.trim(120,230)
    teil2=clip4.trim(120,210)
    teil3=clip5.trim(120,250)
    # usw...

    Also noch einen schönen Abend bzw. gute Nacht!
    video07

  • Warum nicht gleich von Anfang an ordentlich fragen?

    Für MPEG2-Quellen braucht man natürlich nicht AviSource, sondern MPEG2Source. Die Forumsuche wird dir zeigen, welches Plugin man dafür benötigt, und welches Hilfsprogramm man dafür verwendet.

    Du hättest lediglich das Problemchen, dass du zwar das Video schneiden kannst, aber das Audio nicht parallel dazu einlesen kannst. MPEG2Source verarbeitet nur das Video alleine. Für den Ton hättest du zwei Möglichkeiten:

    a) NicAC3Source -- wird decodiert, muss also wieder encodiert werden, z.B. zu MP3

    b) Das Material vorher zurechtschneiden (m2v und ac3 parallel: Cuttermaran / MPEG2Schnitt)

    Wenn deine 20-30 Filme allerdings jedes Mal Tonspuren mit unterschiedlichen Daten haben, wird es noch komplizierter.

  • Hallo LigH und katjarella,

    wie wende ich overlay nur von frame 20 bis frame 25 an? Dasb heißt ich möchte, dass overlay von frame 20 bis 25.

    Bis jetzt haben meine Entwürfe mit Conditionalfilter nicht geklappt. Ich denke Ovberlay ist dafür besser geeignet. Übrigens habe ich mir überlegt, dass ich die vobs per Hand mit vd schneide(über job list), ich möchte nämlich eine clip DVD erstellen und brenne das Material eh auf DVD.
    Hier ist mein Code:

    #Script
    # clips definieren
    clip1=AviSource("C:\Media\projekt\pie.avi")
    clip2=AviSource("C:\Media\projekt\geschenk.avi")

    # beide zu YUV2 konvertieren
    clip1=ConvertToYUY2(clip1)
    clip2=ConvertToYUY2(clip2)

    # zusammenschmelzen
    Layer( clip1, clip2, "add",255, 244, 0, 165, TRUE)
    ConditionalFilter(clip1,clip2,clip2,"Overlay","equals","50")
    ConditionalFilter(clip1,clip2,clip2,"Overlay","equals","95")
    ConditionalFilter(clip1,clip2,clip2,"BlankClip()","lessthan","50")
    Overlay(clip1, clip2,mode="blend",x=244, y=18,opacity=1.0)

    Danke für eure Hilfe

  • Versuch's doch mal mit ApplyRange

    PHP
    clip1 = AviSource("C:\Media\projekt\pie.avi", pixel_type="YUY2") # statt zu konvertieren gleich in YUY2 anfordernclip2 = AviSource("C:\Media\projekt\geschenk.avi", pixel_type="YUY2") # statt zu konvertieren gleich in YUY2 anfordern# Keine Gewähr! Testen, ob das klappt. Wenn nicht, dann einfach verketten:# clipX = AviSource(Datei).ConvertToYUY2()# Wenn das Material interlaced sein sollte, müssten wir darüber auch noch mal reden....ApplyRange(clip1, 20, 25, "Overlay", clip2, mode="blend", x=244, y=18, opacity=1.0)

    Irgend etwas stimmt aber wohl zwischendurch nicht bei dir. Du hast anscheinend immer noch nicht verstanden, was eine Funktion ist, und wo die Variable "last" ins Spiel kommt.

    Was passiert denn in deinem Abschnitt "zusammenschmelzen"? Schreiben wir das mal ausführlich:

    PHP
    # zusammenschmelzenlast = Layer(clip1, clip2, "add", 255, 244, 0, 165, true)# dieses Zwischenergebnis geht verlorenlast = ConditionalFilter(clip1,clip2,clip2,"Overlay","equals","50")# dieses Zwischenergebnis geht verlorenlast = ConditionalFilter(clip1,clip2,clip2,"Overlay","equals","95")# dieses Zwischenergebnis geht verlorenlast = ConditionalFilter(clip1,clip2,clip2,"BlankClip()","lessthan","50")# dieses Zwischenergebnis geht verlorenlast = Overlay(clip1, clip2, mode="blend", x=244, y=18, opacity=1.0)# dieses Zwischenergebnis wird ausgegebenreturn last

    4 von 5 deiner letzten Zeilen sind also nutzlos, und wurden durch den Optimizer in AviSynth sicherlich ignoriert, da sie nicht am Endergebnis teilhaben.

    PHP
    # zusammenschmelzen
    # Layer(clip1, clip2, "add", 255, 244, 0, 165, true)
    # ConditionalFilter(clip1,clip2,clip2,"Overlay","equals","50")
    # ConditionalFilter(clip1,clip2,clip2,"Overlay","equals","95")
    # ConditionalFilter(clip1,clip2,clip2,"BlankClip()","lessthan","50")
    Overlay(clip1, clip2, mode="blend", x=244, y=18, opacity=1.0)


    Ein Computer macht genau das, was man ihm sagt; das ist aber nicht immer das, was man von ihm wollte... also: Was wolltest du eigentlich?

  • Hallo Katjarella und LigH,

    Ich habe mit ApplyRange experimintiert: komischerweise will dieser nichts von mode="blend" und x und y wissen. Wenn man dies also ohne mode und "x" und "y" schreibt klappt es bei mir.

    Meine generelle Idee war es einpaar meiner Lieblingsszenen von DVD zu rippen und daraus eine DVD der Art WWW-die witzigsten Werbespots der Welt(http://www.sat1.de/comedy_show/www/) zum Verschenken zu machen.

    Also habe ich mit DVD Decrypter in File mode die entsprechenden vobs auf Festplatte gerippt. Da ich später die Dateien sowieso ins mpeg2 Format konvertieren muss um sie auf DVD zu brennen, habe ich entschieden diese gleich als vobs zu belassen.

    Jetzt wäre meine erste Frage mit welchem Tool ich die Vobs einfach zurechtschneiden kann, am besten in batch mode. Mit cutterman scheint es mir ein wenig zu Zeitaufwendig. Wenn es kein Tool zum direkten editieren gibt, wäre vd um einiges schneller mit der Aufgabe fertig, selbst wenn ich dann bei authoren der DVD wieder in mpeg2 convertieren müsste.

    Ich möchte nun dem Gebäude von "American Pie"(vgl. fertigentwurf) die europäische und die russische Flagge aufsetzen.Diese beiden Flaggen sollen neben der amerikanischen wehen.

    Dafür habe ich mit Camtasia diese zwei Flaggen in eine Datei namens Falggen aufgezeichnet.Da die Flaggen(,<img src="http://img217.imageshack.us/img217/962/fertigerentwurfky2.jpg" alt="Image Hosted by ImageShack.us"/>) rückwärts besser liefen habe ich Reverse eingebaut und mit trim habe ich gesagt von wo bis wo die einzelne Flagge ist. Irgendwie will avisynth immer nur eine Flagge anzeigen, obwohl die andere an einer ganz anderen Position ist.

    Ich könnte mir vorstellen, dass man es mit Animate machen kann aber wie? Eine weitere Fragestellung ist wie ich den wolkigen Hintergrund entfernen kann, so dass nur die Flagge allein übrig bleibt.Man müsste doch sagen können man will eine bestimmte Farbe entfernen. Mit einem einfachen beschneiden geht es nicht, da die Flagge im Wind flattert und ihre Position ändert. Ein weiteres kleineres Problem ist, dass ich den Text "Europäische Gemeinschaft" und den anderen Text nicht gebrauchen kann und ihn wegschneiden bzw. überdecken möchte.

    Mein Code sieht dazu wie folgt aus:

    #Script
    # clips definieren
    clip1=AviSource("C:\Media\projekt\pie.avi")
    clip2=AviSource("C:\Media\projekt\Flaggen.avi").trim(0,205).Reverse()
    clip3=AviSource("C:\Media\projekt\Flaggen.avi").trim(8409,8714).Reverse()
    #beide zu YUY2 konvertieren
    clip1=ConvertToYUY2(clip1)
    clip2=ConvertToYUY2(clip2)

    # zusammenschmelzen
    #Overlay(clip1, clip2,mode="blend",x=244, y=18,opacity=1.0)
    #ApplyRange(clip1,20,30,"Overlay",clip2,244,58)
    ApplyRange(clip1,50,60,"Overlay",clip3,450,-16)


    Danke für die Antwort,
    video07

  • Hallo video07, Du gehst die Sache falsch an.

    Erstmal zum schneiden von VOBs. Es ist nicht OHNE Probleme Möglich, aus einer DVDStruktur einzelne Scenen herauszuschneiden. Und erst nicht im Batchbetrieb. Du kannst aber, mit Hilfe von DVDShrink im ReAuthorModus und Start/Ende, Deine Scenen Grob ausschneiden, die Du aber hinter Trotzdem bearbeiten mußt. Weil es nicht Framegenau ist und die Audio spuren immer ein anderes Delay haben.

    Wenn Du aber TMPGEnc MPEGEditor v2 hast, kannst Du dort Deine DVD einlesen, dann die Scene Framegenaurausschneiden und als getrennes Video/Audio ausgeben. Wenn Du aber mehrere Audiospuren ( ENG/DEU/RUS) hast, mußt Du dann mehrmals alles machen :(

    -------------------------------------------------------

    Zu den Flaggen und dem Hintergrund. Sicherlich ist es möglich in Tage langer Handarbeit, den Hintergrund herrauszuschneiden, aber da würde ich doch Lieber mir so eins 30Tage AnimationsSoftware herunterladen, wo man Flaggen erstellen kann welches es als 32Bit AVI (inc AlphaMaske) erzeugt.

    -------------------------------------------------------

    Da Du so oder so alles dann in eine DVDStruktur wie bauen mußt, würde ich jetzt mal garnicht mit Komplexen AVIsynth anfangen. Wandel Deine Flaggen AVIs in reines MPEG2 Video um (Konstante Bitrate CBR und ~10-20MB/s). Dann nimmst Du DVDLab Pro und erstellst damit Dein WunschMenü dort kannst Du Deine Flaggen dort aufs Menü schieben und das ganze Animiert als AVI/MPEG ausgeben lassen.

    -------------------------------------------------------

    Trotzdem ist natürlich alles auch in AVISynth Realisierbar, brauche dafür aber ein wenig zeit und Musse. Denn ich stelle mir sicherlich, das ganze etwas anders vor als Du. Besonders die Sache mit Frame 20-25. Denn das würde ja heißen, das die Flaggen nur 1sec zu sehen sind und wehen? Das ist zu kurz.

    Ein Menü im Loop sollte schon so 20-40sec laufen sonst springt ein DVDPlayer zu viel hin und her :(

    Script wie gesagt später...

  • Zugegeben, ich weiß nicht mit Sicherheit, ob Bereichsfunktionen die Parameter "benannt" weitergeben können; der Nachteil, wenn es nicht geht, wäre allerdings, dass man dann alle Parameter von vorn an ohne Ausnahme und in der richtigen Reihenfolge angeben muss... So wird's dann wohl sein.

  • Hallo LigH und Katjarella,

    Ich habe mal den Progrmmierern der Bildschrimschoner meiner Flaggen geschrieben und um die Files ohne den backround gebeten. Ich hoffe ich kriege die Flaggen ohne die Wolken. Bei dem Script habe ich "last" nicht benutzt, das war der ApplyRange Fehler. Gibt es eine elegantere Lösung bzw. eine einfachere als mehrmals ApplyRange zu benutzen(vgl. Bild im Anhang)? Also die russische Flagge, da könnte ich doch die blaue Farbe durch Transparenz ersetzen, oder? Dann müsste ich mit ColorkeyMask arbeiten denke ich. Genauso könnte ich statt der EU Flagge einfach ein Deutschlandflagge nehmen und blau wegmachen?

    Irgendwie scheint die syntax von Colorkeymask falsch zu sein.
    Mein Skript bzw. der Ausschnitt mit der Ru Flagge:
    clip3=AviSource("C:\Media\projekt\Flaggen.avi").trim(8409,8714).Reverse().ConvertToRGB32()

    #die blau Farbe wird wegradiert!
    maskclip=ColorKeyMask(clip5,$0f0fb4,60)

    dies gibt aber nur den Effekt, dass blau zu schwarzer Farbe wird aber eben nicht transparent

    Ist keying evtl nötig? Dazu habe ich diesen Link http://www.cinegobs.com/index.php?page=CineGobs%20Keyer gefunden aber ich weiss nicht genau was diese Software tun soll.

    Ich habe eine Software namens VideRedo ausgegraben und kann damit vobs per Batch operation schneiden, leider nur mit einer Tonspur, aber es klappt ausnahmslos.

    die Kollage des fertigen Menüs, links sind die einzelnen Filmausschnitte exemplarisch(erst sichtbar wenn die Farbe blau wegradiert wird)
    [Blockierte Grafik: http://img403.imageshack.us/img403/4818/spinnesyh5.jpg]
    [Blockierte Grafik: http://img410.imageshack.us/img410/3470/spinnebbm6.jpg]


    Noch einen Schönen Abend,
    video07

Jetzt mitmachen!

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