Frage von baum:Hallo, gibt es eine Möglichkeit, in VirtualDub ein Videoclip in einen anderen zu importieren, also: das eine Video (720 x 576px) soll an Stelle x,y von Zeit a bis Zeit b ein anderes Video beinhalten. Das ganze soll dann so ein bischen aussehen, wie die Szenen in "nicht auflegen".
Danke
Peter
Antwort von Stefan:
Nein, in VD geht das nicht oder nur extrem aufwändig. VD ist nämlich nur dafür ausgelegt, einen Eingabestrom (Quellvideo) in einen Ausgabestrom (Zielvideo) zu schaffen.
Wenn Du unbedingt Freeware einsetzen möchstest, kannst Du AVISYNTH (
www.avisynth.org ) für diese Aufgabe nehmen. Damit geht es.
Viel Glück
Der dicke Stefan
Antwort von bau:
Hallo Stefan,
danke für den Tip. Ich habe es probiert und habe einige Dinge mit Avisynth und VD auch geschafft, doch die Sache mit dem Layer habe ich nicht hinbekommen.
Layer (base_clip, overlay_clip, string "op", int "level", int "x", int "y", int "threshold", bool "use_chroma")
Ich habe es z.B. so probiert, klappt aber nicht:
Layer("d:\base_clip.avi","d:\overlay_clip.avi","brighten","50","20","20","","")
Die beiden avi-Dateien existieren an dem angegebenen Pfad. Ich kenne mich aber fast gar nicht mit diesem Programmier- und Skriptzeugs aus und habe sicher Fehler gemacht. Könntest du (oder jemand anderer) sagen, wie ich die Syntax setzen muss?
Danke im Voraus
Peter
Antwort von Stefan:
Die Layer-Funktion habe ich noch nie ausprobiert. Bei
http://www.avisynth.org/Layer+Deutsch steht etwas an Hilfe.
Möglicherweise hast Du einfach das Avisource() vergessen.
clip1 = AviSource("Clip_1.avi")
clip2 = AviSource("Clip_2.avi")
Layer(clip1, clip2, ... und so weiter ...)
Die Mixerei für die verschiedenen Farbräume scheint kompliziert zu sein. In einem Standbild-Einblend-Skript von katjarella wird die Layer-Funktion verwendet. Vielleicht hilft Dir das beim Testen:
http://forum.gleitz.info/showthread.php ... einblenden
Andererseits wird die Picture-in-Picture (PIP) Funktion öfters in den Avisynth-Foren diskutiert. Dort wird der Effekt meist mit der Overlay-Funktion gemacht:
http://forum.doom9.org/search.php?searchid=277723
Viel Glück
Der dicke Stefan
Antwort von baum:
Prima, jetzt hats geklappt. Der Tip mit Avisource() war goldrichtig.
clip1 = AviSource("d:\base_clip.avi")
clip2 = AviSource("d:\overlay_clip.avi")
Layer( clip1, clip2, "add", 255, 5, 170, 50,TRUE)
Ich musste allerdings mit vd die Farbtiefe auf YUY2 ändern. Das Ergebnis ist super, nur kann ich mein fertiges Video nicht mehr aufs MiniDV-Band zurück spielen. Gibts da ne Möglichkeit?
Danke.
Peter
Antwort von Stefan:
Bestimmt. Du musst das Video irgendwie ins DV Format bringen.
Das bedeutet von der Grösse her 720x576. Das wird derzeit durch die Abmessungen des base_clip.avi definiert. Wenn die anders sind, musst Du die Grösse anpassen (Croppen oder Resizen).
Und Du musst ein AVI erzeugen, welches mit dem DV-Codec komprimiert ist. Dazu kannst Du das Skript in VirtualDub als Quelle öffnen und nach Einstellung der Videokompression "DV-Codec" als AVI speichern. Dann dieses DV AVI mit einem DV Captureprogramm (WinDV, CaptureFlux etc.) auf die Kamera übertragen.
Ein Haken könnte für Dich der DV-Codec bei VirtualDub sein. Du brauchst einen VFW DV Codec. Beispielsweise den von Panasonic. Näheres dazu steht in der Schlashcam-Hilfe.
Noch nicht steht dort, dass es eine neue Open Source DV Codec Entwicklung aus Good Old Germany gibt, den
Cedocida DV Codec.
Diskussion und Hinweis auf Download -
http://forum.doom9.org/showthread.php?t ... ge=1&pp=20
Entwicklung und Sourcecode -
http://www-user.rhrk.uni-kl.de/~dittric ... index.html
Der Cedocida DV Codec müsste ebenfalls mit VD funktionieren, der Autor Andreas Dittrich ist in der VD Szene kein unbekannter Filterentwickler, aber ich hatte noch nicht die Muse das auszuprobieren.
Die Farbtiefe kannst Du übrigens auch direkt im Avisynth-Skript ändern. Möglicherweise erspart Dir das eine Vorbearbeitung mit VD und "von Hand". In Avisynth gibt es mehrere Funktionen zum Konvertieren von Farbräumen z.B. auch ConvertToYUY2(clip, bool "interlaced")
http://www.avisynth.org/Convert+Deutsch
clip1 = ConvertToYUY2(Avisource("d:\base_clip.avi"), interlaced=true)
würde den einen Clip einlesen und gleich nach YUY2 wandeln. Rückwandelfunktionen gibt es ebenfalls.
Viel Glück
Der dicke Stefan
Antwort von baum:
Auch das hat geklappt. Mit dem Codec lassen sich die avis wunderbar umwandeln und dann auf NiniDV ausspulen. Auch diese automatisierte Farbtiefenwandlung 'funzt'.
Nochmals Danke für die Infos
Peter
Antwort von Stefan:
Auch Dir Danke! Dafür daß Du Rückmeldung gibst.
Der dicke Stefan
Antwort von Anonymous:
Jetzt hat sich doch noch einmal ein Problem ergeben.
nach dem Konvertieren mit dem DV-Codec (Panasonic und Cedocida) sieht die erzeugte Datei in VirtualDub super aus, im MediaPlayer oder in PowerDVD aber weist sie grauslige Artefakte auf.
Versuchsweise habe die Datei auf Band ausgespielt und wieder in den PC reingespielt: gleiches Ergebnis: in VD 1a, in den anderen miese Qualität.
Mit meinen bescheidenem Kenntnisstand vermute ich, dass die Player nicht den richtigen codec verwenden. Wie kann ich sie dazu bringen, die avi sauber darzustellen?
Peter
Antwort von Stefan:
Kannst Du ein Bildschirmfoto von der Ausgabe im Mediaplayer oder in PowerDVD machen und hier zeigen? Bilder kannst Du bei Imageshack.us ablegen.
Nachtrag: Wie bzw. mit welchem Programm hast Du das DV Video vom Rechner zur Kamera und zurück überspielt? Treten die Probleme auch auf, wenn Du z.B. WinDV, CaptureFlux oder ScenalyzerLive (Trial reicht) benutzt?
Viel Glück
Der dicke Stefan
Antwort von baum:
Jetzt wollte ich screenshots machen und siehe da: die screenshots (mit camtasia gemacht) werden alle schwarz. Nur der Screenshot von VirtualDub wird korrekt.
Überspielt und zurückgespielt habe ich mit WinDV.
Antwort von Stefan:
Hmm.
# Schwarze Screenshots mit Camtasia
Camtasia schafft es anscheinend nicht das DirectShow Overlay richtig aufzunehmen. Das ist schade, hängt aber nicht mit Deinem Problem zusammen.
# Zerfretzelte Wiedergbe mit Mediaplayer oder PowerDVD
Ich habe versucht das nachzustellen, aber das ist mir nicht gelungen. Mit WinDV konnte ich nicht auf die Kamera zurückspielen, weil die Kamera nicht gefunden wird, egal.
Stattdessen habe ich ScenalyzerLive (Trial mit Logo, egal) genommen und ein DV AVI Typ-2 aufgenommen. Vor und nach der Übertragung spielen mein Mediaplayer (v6.4) und PowerDVD die AVIs ohne Fehler ab.
Zum tieferen Verständnis des Problems - VD benutzt zum Abspielen sicher den nachinstallierten DV Codec.
Der MP und das PowerDVD benutzen entweder auch diesen DV Codec (IMHO unwahrscheinlich) oder den Microsoft DV Codec (wahrscheinlicher).
Du kannst prüfen, ob es eine neuere Version des Microsoft DV Codecs gibt. Vielleicht hat sich bei der Installation der DV Karte eine ältere Version eingeschmuggelt.
Prüfe die Versionen/Daten der Dateien MSYUV.DLL QDV.DLL und QUARTZ.DLL im Windows-Systemverzeichnis sowie die Versionsnummer von DirectX. Du kannst die Versionsnummern auch schön mit dem Tool GSPOT herausfinden.
Alternativ kannst auch ausprobieren, den nachinstallierten DV Codec (Panasonic) zeitweise abzuschalten. dazu kannst Du das Tool VCSWAP verwenden.
Viel Glück
Der dicke Stefan
Antwort von baum:
Jetzt ist der Film fertig und zu sehen (bzw. herunter zu laden) unter
http://www.global-cam.de
Besondren Dank an 'der dicke Stefan' für die Hilfe und die Tipps.
Peter
Antwort von video07:
Hallo Peter und Stefan,
Ich versuche diesselbe Funktion, nämlich zwei clips zu verschmelzen(pip Fkt) zu machen.Leider gelingt es mir nicht. Was mache ich falsch, dass mir der Fehlercode "Layer only suipport YUV2 Format" 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
Antwort von Stefan:
Ändere dein Skript mal so ab, dass die Variablen clip1 und clip2 auch auf die konvertierten Clips zeigen.
# beide zu YUV2 konvertieren
clip1 = ConvertToYUY2(clip1)
clip2 = ConvertToYUY2(clip2)
Im Detail kann ich mir den Fall heute abend ansehen.
Viel Glück
Der dicke Stefan
Antwort von video07:
Hallo Stefan,
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.
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 deine Hilfe
Antwort von Stefan:
Der Schlüssel zum Zusammenfügen ist der
trim Befehl.
Der Conditionalfilter ist für etwas anderes: Aktion aufgrund des BildINHALTS (nicht der Framenummer) durchführen.
Dein Beispiel ist nicht optimal, weil ich nicht weiss, wie dein Übergang aussehen soll.
Durch das Overlay in deinem Beispiel stanzt du nur den Clip2 versetzt in den Clip1 rein.
Und der Übergang ist mit nur 5 Frames sehr sehr kurz. Es blitzt kurz auf und das war's.
Mit diesen Randbedingungen sieht das Skript so aus:
# Script
# clips definieren
clip1=AviSource("pie.avi")
clip2=AviSource("geschenk.avi")
# beide zu YUV2 konvertieren
clip1=ConvertToYUY2(clip1)
clip2=ConvertToYUY2(clip2)
# Mischung
clip3 = Overlay(clip1, clip2, mode="blend",x=244, y=18,opacity=1.0)
# Zusammenkopieren
# erst 20 Frames aus pie.avi ab Frame 0
# dann 5 Frames Überlagerung pie+geschenk ab Frame 20-1 (Zählweise ab 0...)
# dann Rest von pie.avi
clip4=clip1.trim(0,20)+clip3.trim(20-1,5)+clip1.trim(20+5-1,0)
# Ausgeben
return clip4
Viel Glück
Der dicke Stefan
ADD: Sorry, beim Ausprobieren habe ich die Pfade zu den Clips entfernt. Die musst du ggf. wieder ergänzen.
Antwort von video07:
Hallo Stefan,
Danke für die Antworten bis jetzt. Könnte ich es auch mit ApplyRange machen?
Ich habe das damit schon hingekriegt. Jedoch wird nur das jeweils letzte ausgegeben. Ich möchte aber, dass auf meinen Clip1, Clip2 und 3 drauf sind als overlay.
Meine Idee ist es zwei animierte Flaggen, die ich zuvor mit Camtasia aufgenommen habe mittels overlay auf das Gebäude, neben die Amerikanische Flagge zu positionieren.(vgl Bilder am Ende). Danach möchte ich ungefähr 20 clips ohne Ton per Mpeg2Source als Overlay auf einen Vorhang legen(noch nicht bebildert).Irgendwo habe ich gelesen, dass ApplyRange den Prozessor ziemlich auslastet, wenn man es mehrmals verwendet. Deshalb dachte ich an ConditionalFilter, oder ist das falsch? Jedenfalls würde ich meinen Prozessor sogar anstrengen mit ApplyRange, wenn man mehrere Overlays machen könnte.
Ich habe es bereits mit zwei verschiedenen Clips probiert, er will immer nur den letzten Overlay anzeigen, was mache ich falsch?
#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
So soll es werden!
Antwort von Stefan:
Oh, mit ApplyRange habe ich noch nie was gemacht. Müsste ich erst Doku lesen und rumspielen.
Ich habe es bereits mit zwei verschiedenen Clips probiert, er will immer nur den letzten Overlay anzeigen, was mache ich falsch?
Das hängt wahrscheinlich an deiner Skiptprogrammierung. Die Funktionen geben immer den erzeugten Clip zurück und der kann dann in folgenden Kommandos weiterverarbeitet werden.
Also zum Einblenden von Clip2, Clip3, Clip4 in Clip1 würde man mit einer fiktiven Einblendefunktion (hier z.B. Overlay oder ApplyRange anpassen) so vorgehen:
ClipMix = Einblendefunktion(Clip1, Clip2) # erste
ClipMix = Einblendefunktion(ClipMix, Clip3) # zweite
ClipMix = Einblendefunktion(ClipMix, Clip4) # dritte Einblendung
# sonstige Bearbeitungen mit ClipMix...
# ... Resultat ausgeben bzw. an Aufrufer durchreichen
return ClipMix
Viel Glück
Der dicke Stefan
Antwort von video07 zu Gast:
Danke für deine Hilfe bis jetzt.Nun habe ich ein anderes Problem: Die Flaggen "folgen" dem Hauptvideo(Bilder im Anhang),sie wechseln ihre Position. Wie kann ich also avisynth sagen, die Flaggen sollen 20 frames(oder wiviel ich eingestellt habe) an der selben fixen Position wehen?
Mein skript sieht so aus:
#Script
# clips definieren
#clip1 ist american pie!
clip1=AviSource("C:\Media\projekt\pie.avi").ConvertToYUY2().trim(210,398)
#clip2 ist die EU Flagge!
clip2=AviSource("C:\Media\projekt\Flaggen.avi").trim(0,205).Reverse().ConvertToRGB32().BilinearResize(163,299)
#clip3 ist die Ru Flagge!
clip3=AviSource("C:\Media\projekt\Flaggen.avi").trim(8409,8714).Reverse().ConvertToRGB32().BilinearResize(163,299)
Ich hätte noch eine ganz kurze Frage: wie setzt man Chromakey ein. Ich möchte also beispielsweise ein avi ohne blau Farbe im Hintergrund(Spinne avi).Das heisst ich möchte sowas wie den Greenbox effekt künstlich erzeugen indem ich definiere, die Blaue farbe soll auf transparent gesetzt werden.
Würde soetwas die Arbeit tun?
Colorkeymask("blue",1)
Anhang:
http://www.rapidshare.ru/478653
Antwort von video07:
Update: ich habe es jetzt wenigstens geschafft, dass die blau Farbe zu schwarz wechsel mit dem Befehl:
#blaue Maske
maskclip=ColorKeyMask(clip5,$0f0fb4,60,)
Aber ich möchte die Blau Farbe weg haben!
Noch einen schönen Abend
Anhang:
Antwort von Stefan:
Ich verstehe nichts mehr.
"Die Flaggen folgen dem Hauptvideo..." und "Spinne.avi..." sind böhmische Dörfer für mich.
Die Inserts mit den Flaggen setzt du an einer Bildschirmposition ein. Wie kann die dem Hauptvideo folgen? Sie kann doch nur an dem Platz bleiben und der Bildinhalt vom Hauptvideo kann sich darunter wegbewegen (Bsp. Schwenk im Hauptvideo).
Um solch ein Auseinanderlaufen hinzubiegen, bist du mit Avisynth an der Grenze. In einem richtigen Schnittprogramm mit Composing-Eigenschaften würde man Die Position der Flaggen nicht statisch an einer Stelle machen, sondern der Bewegung des Hintergrundvideos anpassen.
Als Notbehelf könnte ich mir nur vorstellen, das Hintergrundvideo zur Zeit des Flaggeneinblendens statisch zu halten, indem z.B. statt dem realen Video während der Szene ein Standbild benutzt wird.
Das Ausmaskieren des blauen Hintergrunds habe ich auch noch nie gemacht. Als Ausgangspunkt für Experimente würde ich mir folgendes ansehen.
Aus dem Video mit dem blauen Hintergrund würde ich eine Maske machen. D.h. alles was blau ist soll in der Maske schwarz sein und alles andere soll weiss sein. Mit dieser Maske kann man dann einstellen, wie transparent das überlagerte Bild in das Hauptvideo eingesetzt wird: weisse Stellen sind im Überlagerungsbild nicht transparent, schwarze Stellen sind voll transparent.
Mit dem ColorKeyMask() bist du eigentlich auf dem richtigen Weg, du musst das noch in den Befehl einarbeiten, der die Überblendung dann macht.
#Script
#clips definieren
#clip1 ist american pie!
clip1=AviSource("C:\Media\projekt\pie.avi").ConvertToYUY2().trim(210,398)
#
#blaue Maske
maskclip1=ResetMask(clip1) # erst alles opak
maskclip1=ColorKeyMask(clip1,$0f0fb4,60,) # dann blaue Stellen transparent
clip1teiltransparent=Mask(clip1, maskclip1)
#
#Wenn die Üblerblendung dann mit Layer gemacht würde...
ClipMix=Einblendefunktion(hauptvideo, clip1teiltransparent)
return ClipMix
Viel Glück
Der dicke Stefan
Antwort von video07:
...Viele Dank für deine Hilfe,
Ich habe mein Projekt schon fast fertig...
Wenn du willst kann ich mein fertiges Projekt (wird aber da es "DVD Qualität" hat um die 5 GB groß sein hochladen, damit du es dir anschauen kannst.
Noch einen schönen Abend,
video07