BicubicResize(clip, int target_width, int target_height, float
"b", float "c")
BilinearResize(clip, int target_width, int target_height)
LanczosResize(clip, int target_width, int target_height)
PointResize(clip, int target_width, int target_height)
Bei allen dieses Filtern zum Grössenändern kann eine erweiterte Syntax verwendet werden, die vor dem Verkleinern bzw. Vergrössern das Bild abschneidet. Die gleiche Operation wird durch ein Crop vor dem Resize erreicht.
Crop(10,10,200,300).BilinearResize(100,150) ist das gleiche wie BilinearResize(100,150,10,10,200,300) |
BicubicResize(clip, int target_width, int target_height, float
"b", float "c", float "src_left", float "src_top",
float "src_width", float "src_height")
BilinearResize(clip, int target_width, int target_height, float
"src_left", float "src_top", float "src_width",
float "src_height")
LanczosResize(clip, int target_width, int target_height, float
"src_left", float "src_top", float "src_width", float "src_height")
PointResize(clip, int target_width, int target_height, float "src_left",
float "src_top", float "src_width", float "src_height")
Wichtig:: AviSynth hat (intern) völlig getrennte vertikale und horizontale
Filter zur Grössenänderung. Wenn in einer Richtung keine Änderung
notwendig ist, wird dieser Teil übersprungen.
Es wird zuerst die Richtung mit dem kleineren Verhältnis bearbeitet, damit
die bestmögliche Qualität erhalten wird und das Filter für die
zweite Richtung ein möglichst gutes Eingangsbild bekommt.
BilinearResize verwendet ein Standard-Bilinear-Filter, der fast identisch mit dem VirtualDub-Filter "precise bilinear" ist. Nur "fast" deshalb, da VirtualDub hier einen winzigen Skalierungsfehler macht, bei dem die oberste und unterste Zeile abgeschnitten oder verdoppelt werden, was aber nur bei bei einer Vergrösserung um 2 oder mehr auffällt.
Beispiele: # eine Video-Datei laden und die Grösse auf 240x180 ändern (egal wie gross sie vorher war) AVISource("video.avi").BilinearResize(240,180) # ein 720x480 (CCIR601)-Video laden und die Grösse auf 352x240 (VCD-NTSC) ändern, # wobei das korrekte Seitenverhältnis beibehalten wird AVISource("dv.avi").BilinearResize(352,240,8,0,704,480) # das rechte obere Filter eine 320x240-Videos rausschneiden und # auf den ganzen Frame vergrössern BilinearResize(320,240,160,0,160,120) |
BicubicResize ist ähnlich wie BilinearResize, es wird
aber eine zweifach kubische Mitchell-Netravali-Filter-Funktion eingesetzt..
Mit den Parametern b und c kann die Eigenschaft dieser Funktion
eingestellt werden, die Parameter werden auch manchmal als "blurring"
(verwischen) und "ringing" (Ringe zeichnen) bezeichnet.
Mit b = 0 und c = 0.75 ist das Filter genau gleich wie das VirtualDub-Filter "precise bicubic" (bis auf das genannte Skalierungsproblem). Der Standardwert ist b = 1/3 und c = 1/3, das sind die von Mitchell und Netravali empfohlenen Werte, die das subjektiv schönste Bild ergeben. Mit grösseren Werten von b und c können interessante Effekte entstehen, z.B. mit b = 0 und c = -5.
Beim Vergrössern eines Videos erhält man mit BicubicResize wesentlich bessere Ergebniss als mit BilinearResize. Beim Verkleinern kann BilinearResize gleich gut oder sogar besser sein. Ein bikubisches Filter erzeugt Bilder, die schöner aussehen, allerdings deswegen, da eine leichte Schärfung stattfindet und nicht wegen einer exakteren Abtastung. Scharfe Bilder schauen gut aus, solange man sie nicht komprimiert, dann können sie leicht hässlich werden. Besonders beim Encoden mit niedriger (knapper) Bitrate gibt BilinearResize meist bessere Ergebnisse..
Man muss
b + 2 * c = 1
setzen um ein numerisch genaues Filter zu erhalten.
Daher kann für b = 0 ein maximales c = 0.5 verwendet werden, das ist dann
ein Catmull-Rom-Spline und ein guter Wert für maximale Schärfe.
Mit Werten c>0.6 fängt das Filter an, Ring-Artefakte zu produzieren.
Es entsteht hier keine echte Schärfe mehr.
Für b dürfen keine negativen Werte verwendet werden.
LanczosResize ist eine Alternative für BicubicResize
mit hohen Werten von c von 0.6 ... 0.75 und erzeugt relativ starke Schärfung.
Es bietet eine höhere Qualität (weniger Artefakte) und gleichzeitig
ein scharfes Bild.
PointResize ist die denkbar einfachste Methode, die einen Punkt-Sampler
oder einen nächster-Nachbar-Algorithmus verwendet, was ein sehr geblocktes
Bild erzeugt. Dieses Filter sollte daher nur verwendet werden, wenn man absichtlich
eine "schlechte" Bildqualität erzeugen möchte oder klare
Pixel-Zeichnungen möchte.
Weiters kann es auch zum testweisen Vergrössern verwendet werden.