ตัวเลือก“ sameq” หรือ“ same_quant” ใน FFmpeg คืออะไร มันหมายถึง "คุณภาพเดียวกัน" หรือไม่?


29

บ่อยครั้งที่ฉันเห็นคำสั่ง FFmpeg โดยใช้sameqตัวเลือกตัวอย่างเช่น

ffmpeg -i input.mp4 -sameq output.avi

สิ่งนี้หมายความว่า? มันหมายถึง "คุณภาพเดียวกัน" หรือไม่? ถ้าไม่ฉันควรใช้อะไรแทน

คำตอบ:


57

sameq ไม่ได้หมายความว่า "คุณภาพเดียวกัน"

แหล่งข้อมูลมากมายบนเว็บส่งเสริมการใช้sameqหรือsame_quantตัวเลือก แต่โดยพื้นฐานแล้วพวกเขาคิดผิด การใช้sameqไม่ได้ให้ผลลัพธ์ที่มีคุณภาพเช่นเดียวกับอินพุต
อย่าใช้มันเลยทีเดียว

แหล่งที่มาของความสับสนเป็นเอกสารที่เขียนไม่ดีซึ่งบ่งบอกว่าการใช้ตัวเลือกนี้จะให้คุณภาพเดียวกัน โชคดีที่ตัวเลือกถูกลบแล้ว

นี่คือสิ่ง ที่เอกสาร FFmpegพูดว่า:

โปรดทราบว่านี่ไม่ใช่คุณภาพเดียวกัน อย่าใช้ตัวเลือกนี้เว้นแต่คุณจะรู้ว่าคุณต้องการ

ในความเป็นจริงผู้พัฒนา FFmpeg ได้เปลี่ยนชื่อจากsameqเป็นsame_quantเพียงเพื่อให้แน่ใจและจากนั้นลบsameq/same_quantทั้งหมด; หมายความว่าตัวเลือกนี้ไม่มีอยู่ใน FFmpeg ล่าสุด แต่บทความนี้ยังคงมีประโยชน์สำหรับผู้ที่ใช้ FFmpeg รุ่นเก่า


การบีบอัดวิดีโอทำงานอย่างไร

ตอนนี้เราได้เคลียร์สิ่งนี้แล้วมาดูรายละเอียดทางเทคนิคกัน

เพื่อให้เข้าใจว่าทำไมมันไม่ทำงานอย่างน่าเชื่อถือเราจำเป็นต้องเข้าใจแนวคิดของ "คุณภาพ" หมายถึงตัวเข้ารหัสวิดีโอทั่วไปและสิ่งที่มีผลต่อคุณภาพ ทำไมวิดีโอหนึ่งถึงดูดีกว่าวิดีโออื่นเมื่อบีบอัดด้วยอัตราบิตที่ต่างกัน อะไรทำให้เกิดการสูญเสียการแปลงและทำไมวิดีโอเล็กกว่าต้นฉบับหลังจากเข้ารหัส

เมื่อคุณเข้ารหัสวิดีโอข้อมูลอินพุตของคุณจะถูกแปลงเป็นมิติที่แตกต่างกันโดยใช้การแปลงทางคณิตศาสตร์กับบล็อกพิกเซลก่อน การแปลงนี้ส่วนใหญ่เป็นการแปลงแบบไม่ต่อเนื่องโคไซน์ผลิตเมทริกซ์ของตัวเลขที่อธิบายสมมุติว่าเขตข้อมูลขนาด 8 × 8 พิกเซลในวิดีโอ

ดังนั้น 8 × 8 พิกเซลของคุณและเมทริกซ์ที่เกี่ยวข้องในขั้นต้นจะมีลักษณะเช่นนี้: 1

รูปภาพต้นฉบับ  

แต่นี่เป็นข้อมูลที่มากเกินไป! หากเราต้องการบีบอัดวิดีโอเราสามารถกำจัดตัวเลขไปทางขวาล่างได้ ฉันจะไม่อธิบายว่าทำไมสิ่งนี้ถึงเกิดขึ้นจริง แต่สมมุติว่าตัวเลขในมุมบนซ้ายมีความสำคัญมากกว่าเมื่ออธิบายบล็อกดังกล่าว ความคิดทั้งหมดของการเปลี่ยนแปลงโดยทั่วไปคือการวางสิ่งสำคัญไว้ด้านบน

หากต้องการลบตัวเลขที่ด้านล่างขวาเราสามารถทำให้เป็นศูนย์ได้ หากบางสิ่งบางอย่างคือ "ไม่มีอะไร" หรือเพียงแค่ทำซ้ำเป็น0s เราจะไม่ต้องเก็บมันและวิธีการที่เราจะประหยัดพื้นที่ ในทางคณิตศาสตร์เราต้องทำการหาปริมาณเมทริกซ์แรกนี้โดยใช้เมทริกซ์อื่นซึ่งเป็น

สิ่งนี้จะส่งผลให้เมทริกซ์ที่ตอนนี้มีจำนวนน้อยกว่ามากและเป็นศูนย์จำนวนมาก:

รูปภาพที่บีบอัด  

ผลลัพธ์ของสิ่งนี้คือเราเปลี่ยนเมทริกซ์คุณภาพสูงตัวแรกที่มีตัวเลขจำนวนมากให้กลายเป็นเมทริกซ์ที่ยังคงคล้ายกับพิกเซล 8 × 8 เหมือนเดิม แต่มีคุณภาพน้อยกว่าเพราะมันมีจำนวนน้อยกว่าที่จะอธิบายพิกเซลเหล่านั้น หากคุณเปรียบเทียบบล็อกด้วยสายตาพวกเขาจะคล้ายกัน แต่ไม่เหมือนเดิมอีกต่อไป

นี่เมทริกซ์ quantization กำหนดคุณภาพ นี้เป็นสิ่งสำคัญ. เราสามารถใช้เมทริกซ์เชิงปริมาณที่แตกต่างกันสำหรับคุณภาพที่แตกต่างกัน เมทริกซ์เชิงปริมาณบางตัวทำให้เมทริกซ์ดั้งเดิมเกือบเหมือนเดิม ยิ่งเราเอาตัวเลขออกมากเท่าไหร่คุณภาพก็จะยิ่งแย่ลงเท่านั้น แต่ยิ่งเราบีบอัดวิดีโอได้มากเท่าไหร่เพราะเราสามารถ "โยน" เลขศูนย์ออกที่นี่ได้

สิ่งนี้เกี่ยวข้องกับsameqอะไร?

สมมติว่าคุณเข้ารหัสวิดีโอและคุณต้องการตั้งค่าคุณภาพที่แน่นอน ตามที่เราได้เรียนรู้แล้วการฝึกอบรมการหาปริมาณที่แตกต่างกันนำไปสู่คุณภาพที่แตกต่างกันดังนั้นเมื่อเราบอกให้เครื่องเข้ารหัสของเราใช้คุณภาพxมันจะเลือกเมทริกซ์yการทำให้เป็นควอนตัมที่เหมาะสมเพื่อให้ได้คุณภาพนั้น ผลลัพธ์คือวิดีโอที่ถูกบีบอัดโดยใช้yเมทริกซ์ 2

และนี่คือส่วนที่น่าสนใจ: sameqหมายถึง "quantizer เดียวกัน" ไม่ "คุณภาพเดียวกัน" หากคุณมี FFmpeg เวอร์ชันที่ไม่เป็นปัจจุบันคุณยังสามารถหามันได้ในffmpeg --help:

ffmpeg --help 2>&1 | grep sameq

ดังนั้นเมื่อคุณใช้วิดีโอที่แปลงแล้วและเข้ารหัสอีกครั้งและคุณใช้sameqตัวเลือก FFmpeg จะพูดเลือกการฝึกอบรมควอนตัม quantization เดียวกับที่ใช้สำหรับวิดีโออินพุต

วิธีนี้ค่อนข้างใช้ได้เมื่อคุณใช้ตัวแปลงสัญญาณเดียวกันสำหรับอินพุตและเอาต์พุตเช่นเมื่อแปลงจากวิดีโอ XviD เป็นวิดีโอ XviD แต่คุณจะจบลงด้วยคุณภาพที่แย่ลง 3นี่เป็นการเข้ารหัสสิ่งที่เข้ารหัสไว้แล้วจะทำให้มีข้อมูลมากขึ้น ในตัวอย่างข้างต้นเราจะสร้างเลขศูนย์ในเมทริกซ์ของเรามากขึ้นและผลลัพธ์จะแย่ลง

มันไม่สามารถทำงานกับโคเดกของวิดีโอต่าง ๆ ได้เลย สมมติว่าคุณกำลังแปลงวิดีโอที่เข้ารหัส XviD ด้วย x264 4สำหรับตัวแปลงสัญญาณทั้งสองนี้เมทริกซ์เชิงปริมาณที่ใช้ภายในมีความแตกต่างกัน - พวกเขาไม่มีสัมประสิทธิ์เดียวกัน ดังนั้นตัวเลือกนี้ไม่สมเหตุสมผลเลย! น่าเสียดายที่ FFmpeg ยังให้คุณใช้งานได้

บรรทัดล่าง: โปรดอย่าใช้ตัวเลือกนั้นเว้นแต่คุณจะรู้ว่ากำลังทำอะไรอยู่ หากคุณต้องการเข้ารหัสวิดีโอด้วยตัวแปลงสัญญาณที่แตกต่างกัน แต่รักษาคุณภาพไว้คุณจะต้องทำการทดสอบและตั้งค่าด้วยตัวคุณเอง ดูว่าผลลัพธ์นั้นน่าพึงพอใจหรือไม่และหากไม่ให้ตั้งค่าคุณภาพที่สูงขึ้น นั่นเป็นเรื่องเกี่ยวกับเท่าที่คุณสามารถทำได้

สุดท้ายถ้าคุณต้องการอ่านวิธีรักษาคุณภาพของคุณเมื่อทำการเข้ารหัสใหม่ให้ตรวจสอบโพสต์เหล่านี้:


1) เมทริกซ์ไม่ตรงกับภาพที่นี่จริง ๆ นี่เป็นเพียงตัวอย่าง
2) ที่จริงวันนี้มากที่สุดกระบวนการเข้ารหัสไม่ได้ใช้เพียงหนึ่งเมทริกซ์ เมื่อคุณตั้งค่าอัตราบิตที่แน่นอนตัวเข้ารหัสจะใช้เมทริกซ์ต่างกันเพื่อรับอัตราบิตเฉลี่ยต่อวินาที ในทำนองเดียวกันเมื่อตั้งค่าคุณภาพที่แน่นอนตัวเข้ารหัสที่ทันสมัยจะใช้เมทริกซ์ที่แตกต่างกันขึ้นอยู่กับเนื้อหา นี่เป็นเพราะเนื้อหาบางส่วนนั้น "บีบอัดได้ง่ายกว่า" และมีปริมาณน้อยกว่าเพื่อให้ได้ปัจจัยการบีบอัดที่เท่ากัน
3) ตัวอย่าง: ffmpeg -i input.avi -sameq -c:v libxvid output.avi. ห้ามใช้สิ่งนี้ โปรด.
4) ตัวอย่าง: ffmpeg -i input.avi -sameq -c:v libx264 output.mp4. อย่าใช้สิ่งนี้เช่นกัน ฉันจริงจัง


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