AssumeFPS

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

Dieses Filter ändert die Frame-Rate ohne die Frame-Anzahl zu ändern, das Video wird also schneller bzw. langsamer abgespielt, es wird lediglich der Framerate-Wert verändert.
Wenn sync_audio = true gesetzt wird, wird auch die Sample-Rate vom Audio entsprechend verändert, damit die Spieldauer vom Audio gleich dem Video ist. Die Tonhöhe ändert sich dadurch.

Das kann z.B. verwendet werden, um ein 24fps-Video (Kinofilm) auf 25fps (PAL) zu bringen, ohne zusätzliche Frames einfügen zu müssen (die kleine Erhöhung der Tonlage ist kaum hörbar).


ChangeFPS

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

Dieses Filter ändert die Frame-Rate, indem Frames gelöscht oder dupliziert werden, dadurch ändert sich auch die Gesamtanzahl der Frames, die Spielzeit bleibt aber gleich.


ConvertFPS [yuy2]

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

new_rate: die Ziel-Frame-Rate (Ganz- oder Dezimalzahl). Im Modus "Mischen" muss new_rate mindestens 2/3 der Quell-Frame-Rate sein, das Auslassen von Frames zu verhindern. Für stärkeres Herabsetzen der Fame-Rate muss man den Modus "Schalten" verwenden.

zone: wenn angegeben, wird der Filter im Modus "Schalten" betrieben, der Wert ist eine Ganzzahl grösser 0. Der Wert gibt 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 gleich der Anzahl der Linien des Zielframes 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 grosser Wert gewählt wird.

vbi: 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).

Dieses Filter konvertiert die Frame-Rate vom clip zu einer neuen Rate new_rate, ohne Frames (völlig) auszulassen oder (neue) einzufügen, was ähnlich gute Ergebnisse wie mit Standalone-Konvertierungsgeräten ergibt. Das Ergbenis hat (fast) die gleiche Spielzeit wie das Quell-Clip, die Gesamtanzahl ändert sich entsprechen dem Verhältnis der Quell- und Ziel-Frame-Raten.

Das Filter hat zwei Betriebsarten. Wenn das optional Argument zone nicht angegeben ist, werden benachbarte Frames gemischt, wobei diese Mischung mit dem zeitlichen Abstand der beiden Frames zum Zielframe gewichtet wird (der Modus "Mischen"). Wenn zone angegeben ist, wird immer von einem Frame zum nächsten umgeschaltet, wenn der neue Zielframe beginnt (der Modus "Schalten"), das heisst 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 scharfekantige Übergänge zu vermeiden).

Der Modus "Mischen" erzeugt Blend Mode erzeugt eine leichte Unschärfe bei Bewegungen, was ein typischer Artefakt bei Frame-Rate-Umwandlungen ist (kann auch bei kommerziellen Videos oder TV-Programmen beobachtet werden). Bei Interlaced-Material muss das Filter auf die einzelnen Fields 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 Filmaterial ab.

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

Filmaterial sollte nicht mehrfach mit diesem Filter umgewandelt werden.

Das Audio wird nicht verändert, es bleibt synchron, die Länge des Audio kann sich ganz leicht von der Video-Länge nach der Umwandlung unterscheiden, da das Ergebnis ja eine ganzzahlige Anzahl von Frames haben muss. Dieser Effekt wird stärker ausgeprägt bei kurzen Clips, der entstehende Längenunterschied kann aber ignoriert werden.

Beispiel NTSC->PAL Umwandlung:
AVISource("NTSC_clip.avi")             # Clip laden
Bob()                                  # Fields trennen und auf volle Höhe bringen
BicubicResize(768,576)                 # Grösse auf PAL (quadratische Pixel) anpassen (für CCIR muss 720,576 verwendet werden)
ConvertFPS(50)                         # Field Rate 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 Fields auf Frames
Dieses Beispiel funtioniert auch bei frame-basiertem NTSC-Material, auch bei telecine-Film.
Bei Film-Material ist das Ergebnis bei einem inverse-telecine Filter und
einer Anpassung der Framerate von 23.976 auf 25fps ist das Ergebnis allerdings besser.