Anlässlich der Aufrüstung meines Rechners habe ich mir jetzt mal die Zeit genommen, etwas tiefer in AviSynth (samt MVTools und Yadif) und VirtualDubMod einzusteigen. Dabei ist ein Script entstanden, mit dessen Ergebnissen ich schon recht zufrieden bin, und das ich zur Diskussion stellen will.
Ziel des Scripts ist, wie schon im letzten Thread erläutert, die Änderung der Framerate durch möglichst saubere Zwischenbildberechnung.
Mein Hauptanliegen ist das Wandeln meiner 1080/50i-Videos nach 1080/60i oder 720/60p als Blu-ray für die amerikanische Verwandtschaft, aber natürlich kann man das Script auch für andere Wandlungen, Zeitlupen, Bewegungsglättung etc. verwenden.
Ein gewisses Problem bleibt der Zeitaufwand. So, wie das Script jetzt ist, benötigt es auf meinem neuen i5-System das 12,8-Fache der Spielzeit an Berechnungszeit. Das ist nicht gerade ideal, aber für meinen gelegentlichen Bedarf tragbar.
Ich hatte noch mit anderen Einstellungen aus der MVTools-Anleitung experimentiert, die angeblich noch feinere Ergebnisse versprechen, aber dann stieg der Zeitaufwand auf das 28,2-Fache. Dabei konnte ich die Qualitätsverbesserung nicht mal eindeutig verifizieren; manche Details wurden zwar feiner aufgelöst, aber an einigen Stellen wurde das Ergebnis sogar schlechter.
Da mein Ausgangsmaterial halbbildbasiert (interlaced) ist und MVTools für die Zwischenbildberechnung Vollbilder braucht, habe ich noch das Yadif-Plugin eingebunden, um ein "SmartBobbing" voranzuschalten. Wer mit p-Formaten filmt, kann das natürlich weglassen.
Das Ergebnis hat auf jeden Fall Vollbilder. Ich habe mir gespart, mittels AviSynth auch noch ein Interlacing oder eine Reduktion auf 720er-Auflösung (eins von beiden ist nötig, wenn man auf Blu-ray brennen will) einzubauen, weil das mein Schnittprogramm selber kann.
Hier nun also das Script (mit Erläuterungen):
Code: Alles auswählen
# Umrechnung von HD-Video in andere Frameraten - Script von beiti
# Das Script Benötigt die AviSynth-PlugIns MVTools2
# und (falls das Ausgangsvideo interlaced ist) Yadif
# ---------------------------------------------------------------
# Import einer AVI-Dateiei; alternativ z. B. DirectShowSource-Befehl
# für andere Formate (nicht getestet)
# In Klammern und Anführungszeichen muss statt XXXXX der
# vollständige Pfad zum Ausgangsvideo stehen
# z. B. AVISource ("E:\videos\ausgangsvideoclip.avi")
AVISource("XXXXX\ausgangsvideoclip.avi")
# Folgende drei Zeilen bewirken ein Smart-Bobbing
# (z. B. aus 50 Halbbildern werden 50 Vollbilder ohne Zeilenflimmern)
# Dieser Schritt ist nur für Interlaced-Ausgangsvideo nötig -
# sonst bitte löschen oder # vor jede Zeile stellen
# Statt XXXXX muss der vollständige Pfad zu yadif.dll stehen.
# Falls andere Halbbilddominanz, lautet zweite Zeile: AssumeBFF
Load_Stdcall_plugin("XXXXX\yadif.dll")
AssumeTFF
Yadif(Mode=1)
# Laden des MVTools2-PlugIn. Für XXXXX bitte den Pfad zum PlugIn einsetzen.
# Die Zeile kann wegfallen, wenn mvtools2.dll direkt im PlugIn-Ordner
# von AviSynth steht
LoadPlugin("XXXXX\mvtools2.dll")
# Erstellung temporärer Clips: Super-Clip und Vektoren-Clips
# (nötig für spätere Berechnungen)
superclip = MSuper(pel=2)
vektorclip_rueckw = MAnalyse(superclip, overlap=0, isb = true, search=4)
vektorclip_vorw = MAnalyse(superclip, overlap=0, isb = false, search=4)
# Berechnung der Zwischenbilder
# Für NTSC-basierte "krumme" Frameraten gilt
# num=[glatte Framerate]*1000 und den=1001
# (z. B. num=24000 und den=1001 entspricht 23,97 fps)
# Für glatte Frameraten (PAL-basiert, 24,00 oder 30,00 fps) gilt
# num=[framerate] und den=1
# (z. B. num=25 und den=1)
# Hier voreingestellt sind 59,94 fps für NTSC-basierte Formate
MFlowFps(superclip, vektorclip_rueckw, vektorclip_vorw, num=60000, den=1001)
Code: Alles auswählen
AVISource("XXXXX\ausgangsvideoclip.avi")
Load_Stdcall_plugin("XXXXX\yadif.dll")
AssumeTFF
Yadif(Mode=1)
LoadPlugin("XXXXX\mvtools2.dll")
superclip = MSuper(pel=2)
vektorclip_rueckw = MAnalyse(superclip, overlap=0, isb = true, search=4)
vektorclip_vorw = MAnalyse(superclip, overlap=0, isb = false, search=4)
MFlowFps(superclip, vektorclip_rueckw, vektorclip_vorw, num=60000, den=1001)
Das Endprodukt ist passend für amerikanische Blu-rays nun auf 1080/60i getrimmt:
Testclip Frame-interpoliert mittels AviSynth, Yadif, MVTools
Und hier zum Vergleich eine Wandlung mit den Bordmitteln von Edius:
Testclip mittels Frameblending in Edius normgewandelt
Falls jemand als Vergleich das Original sehen möchte:
Originalclip in 1080/50i
Die Frameblending-Variante aus Edius zeigt deutliches Ruckeln, sobald sich im Bild etwas schneller bewegt. Außerdem kommt sie mir etwas weniger scharf vor.
Die AviSynth-Variante läuft weitgehend flüssig, und die Interpolations-Artefakte sind beim normalen Anschauen selbst mit dem Wissen, wo sie stecken, kaum auszumachen. Natürlich kann ich nicht ausschließen, dass es andere/kritischere Videos gibt, die Artefakte hervorrufen würden. Wer hiermit Erfahrungen hat, möge dies kundtun (oder gleich mein Script an eigenem Material testen).
Hier noch der Vollständigkeit halber zwei Beispiele für typische Artefakte, die man beim einzelbildweisen Durchschalten erkennen kann (es sind jeweils 100-%-Crops aus dem Video):