บ่อยครั้งที่ฉันเห็นคำสั่ง FFmpeg โดยใช้sameq
ตัวเลือกตัวอย่างเช่น
ffmpeg -i input.mp4 -sameq output.avi
สิ่งนี้หมายความว่า? มันหมายถึง "คุณภาพเดียวกัน" หรือไม่? ถ้าไม่ฉันควรใช้อะไรแทน
บ่อยครั้งที่ฉันเห็นคำสั่ง FFmpeg โดยใช้sameq
ตัวเลือกตัวอย่างเช่น
ffmpeg -i input.mp4 -sameq output.avi
สิ่งนี้หมายความว่า? มันหมายถึง "คุณภาพเดียวกัน" หรือไม่? ถ้าไม่ฉันควรใช้อะไรแทน
คำตอบ:
sameq
ไม่ได้หมายความว่า "คุณภาพเดียวกัน"แหล่งข้อมูลมากมายบนเว็บส่งเสริมการใช้sameq
หรือsame_quant
ตัวเลือก แต่โดยพื้นฐานแล้วพวกเขาคิดผิด การใช้sameq
ไม่ได้ให้ผลลัพธ์ที่มีคุณภาพเช่นเดียวกับอินพุต
อย่าใช้มันเลยทีเดียว
แหล่งที่มาของความสับสนเป็นเอกสารที่เขียนไม่ดีซึ่งบ่งบอกว่าการใช้ตัวเลือกนี้จะให้คุณภาพเดียวกัน โชคดีที่ตัวเลือกถูกลบแล้ว
นี่คือสิ่ง ที่เอกสาร FFmpegพูดว่า:
โปรดทราบว่านี่ไม่ใช่คุณภาพเดียวกัน อย่าใช้ตัวเลือกนี้เว้นแต่คุณจะรู้ว่าคุณต้องการ
ในความเป็นจริงผู้พัฒนา FFmpeg ได้เปลี่ยนชื่อจากsameq
เป็นsame_quant
เพียงเพื่อให้แน่ใจและจากนั้นลบsameq
/same_quant
ทั้งหมด; หมายความว่าตัวเลือกนี้ไม่มีอยู่ใน FFmpeg ล่าสุด แต่บทความนี้ยังคงมีประโยชน์สำหรับผู้ที่ใช้ FFmpeg รุ่นเก่า
ตอนนี้เราได้เคลียร์สิ่งนี้แล้วมาดูรายละเอียดทางเทคนิคกัน
เพื่อให้เข้าใจว่าทำไมมันไม่ทำงานอย่างน่าเชื่อถือเราจำเป็นต้องเข้าใจแนวคิดของ "คุณภาพ" หมายถึงตัวเข้ารหัสวิดีโอทั่วไปและสิ่งที่มีผลต่อคุณภาพ ทำไมวิดีโอหนึ่งถึงดูดีกว่าวิดีโออื่นเมื่อบีบอัดด้วยอัตราบิตที่ต่างกัน อะไรทำให้เกิดการสูญเสียการแปลงและทำไมวิดีโอเล็กกว่าต้นฉบับหลังจากเข้ารหัส
เมื่อคุณเข้ารหัสวิดีโอข้อมูลอินพุตของคุณจะถูกแปลงเป็นมิติที่แตกต่างกันโดยใช้การแปลงทางคณิตศาสตร์กับบล็อกพิกเซลก่อน การแปลงนี้ส่วนใหญ่เป็นการแปลงแบบไม่ต่อเนื่องโคไซน์ผลิตเมทริกซ์ของตัวเลขที่อธิบายสมมุติว่าเขตข้อมูลขนาด 8 × 8 พิกเซลในวิดีโอ
ดังนั้น 8 × 8 พิกเซลของคุณและเมทริกซ์ที่เกี่ยวข้องในขั้นต้นจะมีลักษณะเช่นนี้: 1
แต่นี่เป็นข้อมูลที่มากเกินไป! หากเราต้องการบีบอัดวิดีโอเราสามารถกำจัดตัวเลขไปทางขวาล่างได้ ฉันจะไม่อธิบายว่าทำไมสิ่งนี้ถึงเกิดขึ้นจริง แต่สมมุติว่าตัวเลขในมุมบนซ้ายมีความสำคัญมากกว่าเมื่ออธิบายบล็อกดังกล่าว ความคิดทั้งหมดของการเปลี่ยนแปลงโดยทั่วไปคือการวางสิ่งสำคัญไว้ด้านบน
หากต้องการลบตัวเลขที่ด้านล่างขวาเราสามารถทำให้เป็นศูนย์ได้ หากบางสิ่งบางอย่างคือ "ไม่มีอะไร" หรือเพียงแค่ทำซ้ำเป็น0
s เราจะไม่ต้องเก็บมันและวิธีการที่เราจะประหยัดพื้นที่ ในทางคณิตศาสตร์เราต้องทำการหาปริมาณเมทริกซ์แรกนี้โดยใช้เมทริกซ์อื่นซึ่งเป็น
สิ่งนี้จะส่งผลให้เมทริกซ์ที่ตอนนี้มีจำนวนน้อยกว่ามากและเป็นศูนย์จำนวนมาก:
ผลลัพธ์ของสิ่งนี้คือเราเปลี่ยนเมทริกซ์คุณภาพสูงตัวแรกที่มีตัวเลขจำนวนมากให้กลายเป็นเมทริกซ์ที่ยังคงคล้ายกับพิกเซล 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