การใช้ CRF และการตั้งค่าบิตเรตสูงสุดด้วย x264 ใน FFmpeg


3

ฉันพยายามแปลงรหัสวิดีโอเป็น H.264 / MP4 ฉันใช้crf = 20ตัวเลือก แต่ตามข้อกำหนดฉันก็ต้องการ จำกัด บิตเรตสูงสุดเป็น 3 MBit / s

ฉันพยายามที่จะโกงแม้ว่ามันจะเป็นx264optsแบบนี้

-x264opts crf=20:vbv-bufsize=14000:vbv-maxrate=3000:keyint=40

นั่นเป็นวิธีที่ถูกต้องในการทำสิ่งนี้หรือไม่? สิ่งนี้สามารถทำได้หรือฉันติดอยู่กับการใช้บิตเรต contant และไม่มี CRF?

คำตอบ:


4

ใช้-maxrateและ-bufsizeบังคับ VBV (Video Buffer Verifier) ​​เพื่อ จำกัด บิตเรตผลลัพธ์:

ffmpeg -i input.file -c:v libx264 -crf 20 -maxrate 3M -bufsize 6M output.mp4

3M = 3 mbit / s คุณสามารถใช้ 3000k (สำหรับ 3000 kbit / s) ตั้งค่าขนาดบัฟเฟอร์ตามจำนวนที่คุณคาดหวังว่าไคลเอ็นต์ของคุณจะสามารถบัฟเฟอร์ได้

ดูคู่มือนี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ x264 กับ FFmpeg (แม้ว่าจะไม่ได้กล่าวถึงการเข้ารหัส VBV)


@ mark4o ฉันแน่ใจว่ามันใช้งานไม่ได้ ฉันทดสอบ CRF ต่ำและได้รับบิตเรตสูงกว่า-maxrateเสมอ -maxrateใช้เมื่อ-bufsizeตั้งค่าแล้วเท่านั้น ในกรณีนั้น x264 ใช้การเข้ารหัส VBV และ จำกัด บิตเรตอย่างถูกต้อง
slhck

ขนาดบัฟเฟอร์ของไคลเอนต์คือ 2MB = 14,000 kbits นั่นคือเหตุผลที่ฉันเลือกค่านั้น ดูเหมือนว่า crf จะแทนที่ข้อ จำกัด บิตเรตสูงสุด นอกจากนี้ยังมีความสัมพันธ์ระหว่าง maxbitrate ที่ดีที่สุดและ bufsize ถ้าใช้การเข้ารหัส vbv หรือไม่
ฤาษี

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