AssumeFPS

AssumeFPS(clip, float fps, bool "sync_audio")
AssumeFPS(clip, int numerator [, int denominator], bool "sync_audio")

AssumeFPS ändert die Framerate, ohne die Frameanzahl zu ändern. Das Video wird also schneller bzw. langsamer abgespielt, es wird lediglich die Framerate verändert.

Parameter:
fpsGibt die neue Framerate als Dezimalzahl an.
numeratorGibt die neue Framerate als Ganzzahl. Die Framerate kann noch durch denominator verändert werden.
denominatorMan kann hiermit die Framerate noch ändern. Die tatsäliche Framerate ergibt sich nach Framerate = numerator / denominator.
sync_audioMit sync_audio=true wird auch die Samplingrate vom Ton entsprechend verändert, damit die Spieldauer vom Ton gleich der des Videos ist. Die Tonhöhe ändert sich dadurch.
Kann auch dazu eingesetzt werden, nur die Samplingrate des Tones zu ändern, wenn der Quellclip keine Videospur enthält.

Beispiele:
AssumeFPS(50.0)Beschleunigt ein PAL Video auf die doppelte Framerate
AssumeFPS(30000,1001)Ändert die Framerate auf 29,97 fps

Changelog:



ChangeFPS

ChangeFPS(clip, float fps [, bool linear])
ChangeFPS(clip, int numerator [, int denominator, bool linear])

Dieses Filter ändert die Framerate, indem Frames gelöscht oder dupliziert werden.

Parameter:
fpsGibt die neue Framerate als Dezimalzahl an.
numeratorGibt die neue Framerate als Ganzzahl. Die Framerate kann noch durch denominator verändert werden.
denominatorMan kann hiermit die Framerate noch ändern. Die tatsäliche Framerate ergibt sich nach Framerate = numerator / denominator.
linearHiermit fragt AviSynth die Frames linear nacheinander ab, wenn Frames übergangen werden. Standard ist true.

Beispiele:
ChangeFPS(29.97)Ändert die Framerate auf 29,97 fps
ChangeFPS(30000,1001)Alternative Syntax zum obigen Beispiel

Changelog:
v2.54Der optionale Parameter linear=true/false wurde hinzugefügt
v2.06Anstatt das Video zu beschneiden oder aufzugefüllen, um die Spieldauer und Abspielgeschwindigkeit (die Anzahl der Frames wird nicht verändert) zu erhalten, wird nun die Anzahl der Frames erhöht oder vermindert wie bei ConvertFPS.



ConvertFPS

ConvertFPS(clip, float new_rate, int "zone", int "vbi")

Benötigt als Quelle YUY2 oder RGB.

Der Filter versucht, die Framerate von clip zu new_rate zu konvertieren ohne das Weglassen oder Dublizieren von Frames. Dadurch wird eine weiche Konvertierung, ähnlich der von Konverter-Hardware, erzielt. Das Ergebnis wird (fast) die gleiche Filmlänge haben wie clip, aber die Anzahl der Frames wird geändert entsprechend dem Verhältnis aus Quell- und Ziel-Framerate.

Der Filter hat zwei Modi. Falls das optimale Argument zone nicht angegeben ist, werden angrenzende Frames gemischt, wobei diese Mischung mit dem zeitlichen Abstand der beiden Frames zum Zielframe gewichtet wird ("Mischen" Modus). Wenn zone angegeben ist, wird immer von einem Frame zum nächsten umgeschaltet, wenn der neue Zielframe beginnt ("Schalten" Modus), das heißt irgendwo in der Mitte des Zielframes. Dabei wird angenommen, dass das Bild auf einem TV betrachtet wird (nicht auf einem PC!)und jeder Frame von oben nach unten abgetastet wird. Der Parameter zone gibt die Breite der Übergangsregion an, in der die zwei Frames gemischt werden (um scharfkantige Übergänge zu vermeiden).

Der Modus "Mischen" erzeugt eine leichte Unschärfe bei Bewegungen, was ein typisches Artefakt bei Framerate-Umwandlungen ist (kann auch bei kommerziellen Videos oder TV-Programmen beobachtet werden). Bei interlaced Material muss der Filter auf die einzelnen Felder angewendet werden, nicht auf die interlaced Frames (siehe Beispiel).

Der Modus "Schalten" ist ein Versuch, diese Unschärfe zu vermeiden, allerdings kann ein leichtes Flackern und Bewegungsartefakte entstehen. Besonders Schwenks sind anfällig dafür, da die einzelnen Frames bei Szenen mit Bewegung gebogene oder unterbrochene senkrechte Linien zeigen. Auch Szenenwechsel können in der Mitte des Frames sichtbar werden. Trotzdem sieht das Ergebnis weniger unscharf aus.

Kein Modus ist also perfekt. Welcher der bessere ist, hängt vom eigenen Geschmack und dem verwendeten Filmmaterial ab. Der "Schalten" Modus ist wahrscheinlich nur brauchbar, wenn man sich das Ergebnis auf einem Fernseher und nicht auf dem PC ansieht.

Aufwendigere Framerate-Konvertierungen verwenden Algorithmen zur Bewegungsinterpolation, die schwierig zu erstellen sind, aber dann wesentlich bessere Ergebnisse liefern.

Filmmaterial sollte nicht mehrfach mit diesem Filter umgewandelt werden. Es kommt schnell zu Unschärfen bei mehrfacher Anwendung.

Der Ton wird nicht verändert, er bleibt synchron, die Länge des Tones kann sich ganz leicht von der Videolänge nach der Umwandlung unterscheiden, da das Ergebnis ja eine ganzzahlige Anzahl von Frames haben muss. Dieser Effekt wirkt sich stärker aus bei kurzen Clips, der entstehende Längenunterschied kann aber ignoriert werden.

Parameter:
new_rate Die Ziel-Framerate (Ganz- oder Dezimalzahl). Im Modus "Mischen" muss new_rate mindestens 2/3 der Quell-Framerate sein. Ansonsten wird ein Fehler ausgegeben. Für stärkeres Herabsetzen der Famerate muss man den Modus "Schalten" verwenden.
zone (Optional) Wenn angegeben, wird der Filter im Modus "Schalten" betrieben, der Wert ist eine Ganzzahl größer 0. Falls er dennoch auf 0 steht, wird ein Extrem-"Schalten" durchgeführt, d.h. es wird augenblicklich der nächste Frame vor dem Schalten genommen. Ist der Wert gröszlig;er als 0, gibt er die Höhe der Zone an, in der die Frames ineinander übergeblendet werden. Ein Wert von 80 ergibt gute Ergebnisse bei Vollbild (480/576 Linien). Der Wert von zone muss kleiner oder gleich der Anzahl der Linien des Ziel-Frames sein, die der Dauer eines Quell-Frames entsprechen. Das sind normalerweise 5/6 oder 6/5 von der Ziel-Framehöhe, also einige hundert Linien. Ein Fehler wird erzeugt, wenn ein zu großer Wert gewählt wird.
vbi (Optional) Im Modus "Schalten" wird damit eine Korrektur für die vertikale Austastlücke angegeben. Der Wert gibt die Höhe beim Zielframe in Zeilen an, typische Werte sind vbi=49 bei PAL und vbi=45 bei NTSC (der Wert ist nicht kritisch). Wird ignoriert im "Mischen" Modus.

Beispiel NTSC->PAL Umwandlung:

AVISource("NTSC_clip.avi")        # Clip laden
Bob()                             # Felder trennen und auf volle Höhe bringen
BicubicResize(768,576)            # Größe auf PAL (quadratische Pixel) anpassen
                                    (für CCIR muss 720,576 verwendet werden)
ConvertFPS(50)                    # Feldrate auf PAL wandeln, Modus "Mischen"
SeparateFields.SelectEvery(4,0,3) # Bob rückgängig machen, "Even Field First".
                                    SelectEvery(4,1,2) für "Odd Field first"
Weave                             # zurückwandeln von Feldern in Frames

Dieses Beispiel funtioniert auch bei frame-basiertem NTSC-Material und telecine-Film.
Bei Filmmaterial ist aber das Ergebnis bei einem inverse-telecine Filter und einer Anpassung der Framerate von 23.976 auf 25fps besser.

Changelog:
v1.0b7Erstes Release