AviSynth: Wie skaliere ich ein Video auf 480?

3498
Ian Boyd

Wie kann ich ein Video in AviSynth auf 480 Pixel hoch skalieren und dabei das Seitenverhältnis beibehalten? Nehmen Sie der Einfachheit halber die Größe der Bilineargröße an.

ich habe es versucht:

source = DirectShowSource("TheClip.avi") resized = BilinearResize(source, target_height=480) return resized 

Aber das gibt den Fehler

Skriptfehler: Ungültige Argumente für die Funktion "BilinearResize"


Hinweis : Der Grund, aus dem ich kein Angebot mache, widthist, dass ich keine Breite kenne . Das Skript wird von einem Medienserver verwendet, der jetzt die Verwendung von AviSynth erzwingt, um die Größenänderung durchzuführen . Ich weiß nicht , wie groß ein Video ist, das jemand abspielen möchte, aber ich weiß, dass ich es auf x480 skalieren muss.

Ich vermute, AviSynth kann so etwas tun:

resized=BilinearResize(source, source.width*480/source.height, 480) 

das scheitert aber auch:

Größe ändern: YUY2-Zielbreite muss gerade sein

Ich könnte weitermachen und versuchen, einen Weg zu AddBorders oder Crop zu finden, um die Breite mod4, mod8 oder mod16 zu erstellen . Oder ich könnte hier fragen, und vielleicht gibt es schon eine Möglichkeit, eine aspekterhaltende Skalierung durchzuführen.

2
Gibt es eine Möglichkeit, eine Quelle oder etwas in eine Quelle umzuwandeln (source.width * 480 / source.height)? soandos vor 13 Jahren 0
Ich bin mir ziemlich sicher, dass das Problem ist, dass die berechnete Breite etwa 691 x 480 ist. Dies steht im Konflikt mit YUY2, das einen Farbwert für jedes * Pixelpaar * speichert. und dieses Video ist ein Paar kurz (sollte 690x480 oder 691x480 sein) Ian Boyd vor 13 Jahren 0
Gibt es also eine runde Funktion? soandos vor 13 Jahren 0

1 Antwort auf die Frage

3
Peter.O

Ich bin ein bisschen verrostet mit avisynth-Skripting, aber ich denke, dass dies funktionieren sollte, um die Breite in einer Zielhöhe von 480 und einem gegebenen Modulo-Wert zu erhalten ... Ich konnte es nicht testen, da ich kein avisynth habe Eingerichtet ...

 srceH = source.height srceW = source.width AR = (float(srceW) / float(srceH)) targH = 480 targW = int(float(targH) * AR) coMod = 4 # The codec modulo requirement  targW = ((targW / coMod) * coMod) 
Sie haben die Einstellung der Aspektvariable verpasst. aber danach funktioniert es super, danke yoshco vor 12 Jahren 0
Danke * yoshco * ... Ja, ich hatte * AR * an einer Stelle und * Aspekt * an einer anderen ... In * AR * geändert. Peter.O vor 12 Jahren 0