AviSynth: วิธีปรับขนาดวิดีโอเป็น 480 โดยรักษาอัตราส่วนภาพ


3

ฉันจะปรับขนาดวิดีโอเป็น 480 พิกเซลสูงใน AviSynth ในขณะที่ยังคงอัตราส่วนไว้ได้อย่างไร สมมติว่า Bilinear มีขนาดที่เล็กลง

ฉันได้ลองแล้ว:

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

แต่นั่นทำให้เกิดข้อผิดพลาด

ข้อผิดพลาดของสคริปต์: อาร์กิวเมนต์ไม่ถูกต้องในการทำงาน "BilinearResize"


หมายเหตุ : เหตุผลที่ฉันไม่ได้ระบุwidthคือเพราะฉันไม่ทราบความกว้าง สคริปต์จะถูกใช้โดยเซิร์ฟเวอร์สื่อว่าตอนนี้บังคับใช้AviSynthเพื่อดำเนินการปรับขนาด ฉันไม่ทราบขนาดของวิดีโอที่ทุกคนอาจเลือกที่จะเล่น - แต่ฉันรู้ว่าฉันต้องการให้ปรับขนาดเป็น x480

ฉันคิดว่า AviSynth สามารถทำสิ่งที่ชอบ:

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

แต่นั่นก็ล้มเหลวด้วย:

ปรับขนาด: ความกว้างปลายทาง YUY2 จะต้องเท่ากัน

ฉันจะเก็บไปพยายามที่จะหาวิธีการที่จะAddBordersหรือพืชเพื่อให้ความกว้างmod4, mod8 หรือ mod16 หรือฉันสามารถถามที่นี่และอาจมีวิธีการปรับขนาดการรักษาภาพ


มีวิธีการส่ง (source.width * 480 / source.height) ไปยัง int หรืออะไรบางอย่างหรือไม่?
soandos

ฉันค่อนข้างแน่ใจว่าปัญหาคือความกว้างที่คำนวณได้คือ 691x480 สิ่งนี้ขัดแย้งกับ YUY2 ซึ่งเก็บค่าสีหนึ่งค่าสำหรับพิกเซลแต่ละคู่ และวิดีโอนี้สั้นหนึ่งคู่ (ควรเป็น 690x480 หรือ 691x480)
Ian Boyd

ดังนั้นจึงมีฟังก์ชั่นรอบ?
soandos

คำตอบ:


4

ฉันเป็นสนิมเล็กน้อยกับสคริปต์ avisynth แต่ฉันคิดว่ามันควรจะได้รับความกว้างตามความสูงเป้าหมายที่ 480 และค่าโมดูโลที่กำหนด ... ฉันไม่สามารถทดสอบได้เพราะฉันไม่มี avisynth ติดตั้งแล้ว ...

 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)

คุณพลาดการตั้งค่าตัวแปรภาพ แต่หลังจากนั้นก็ใช้งานได้ดีขอบคุณ
yoshco

ขอบคุณyoshco ... ใช่ฉันมีARในที่เดียวและด้านในอีก ... เปลี่ยนAR
Peter.O
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.