การเลือกค่าคุณภาพสำหรับ AVIF ไม่ใช่เรื่องยากหากสนใจแค่ขนาดไฟล์ ส่วนที่ยากคือการตัดสินใจว่ายอมรับความเสื่อมของภาพที่มองเห็นได้มากน้อยเพียงใด การตั้งค่าคุณภาพเป็น 40 ไม่ได้หมายความว่าคะแนนคุณภาพตามการรับรู้จะเท่ากับ 40 และไม่ได้รับประกันว่าภาพทุกภาพจะได้ผลเหมือนกัน ภาพต้นฉบับต่างประเภทกันอาจตอบสนองต่อการตั้งค่าตัวเข้ารหัสเดียวกันแตกต่างกันมาก
SSIMULACRA2 ช่วยประเมินช่องว่างนี้ด้วยการเปรียบเทียบภาพที่ถอดรหัสจากไฟล์บีบอัดกับภาพอ้างอิง แต่การค้นหาค่าคุณภาพอย่างละเอียดสำหรับภาพทุกภาพอาจเปลี่ยนกระบวนการแปลงภาพที่เดิมไม่ซับซ้อนให้กลายเป็นงานเข้ารหัสที่ใช้ทรัพยากรสูง หากเป้าหมายคือให้ภาพบนเว็บมีคุณภาพเหมาะสม ไม่ใช่ปรับไฟล์แต่ละไฟล์ให้เหมาะสมที่สุดทุกด้าน ก็มีวิธีที่ง่ายกว่า นั่นคือ ปรับเทียบค่าคุณภาพ AVIF เพียงค่าเดียวจากตัวอย่างที่เป็นตัวแทนของภาพทั้งหมด ตรวจดูผลด้วยสายตา แล้วใช้ค่านั้นกับภาพส่วนที่เหลือ
ค่าคุณภาพ AVIF กับคะแนน SSIMULACRA2 เป็นคนละอย่างกัน
ตัวเลือก quality ที่ส่งให้ตัวเข้ารหัส AVIF เป็นคำสั่งเกี่ยวกับการบีบอัด ส่วน SSIMULACRA2 เป็นการวัดผลลัพธ์หลังเข้ารหัส สเกลของทั้งสองอย่างใช้แทนกันไม่ได้ การตั้ง AVIF เป็น quality: 40 ไม่ได้หมายความว่าคะแนน SSIMULACRA2 จะเป็น 40, 60 หรือค่าอื่นที่ตายตัว
หากต้องการวัดผลของการเข้ารหัส ให้ถอดรหัสไฟล์นั้นแล้วเปรียบเทียบกับภาพอ้างอิง:
ssimulacra2 reference.png encoded-decoded.png
คะแนน SSIMULACRA2 ที่สูงกว่าหมายถึงความคล้ายคลึงกันทางการรับรู้ที่มากกว่า เอกสารทางการอธิบายว่าคะแนนราว 50 อยู่ในระดับคุณภาพปานกลาง และราว 70 อยู่ในระดับคุณภาพสูง การใช้เกณฑ์ 60 อาจเป็นเป้าหมายที่เหมาะสมในทางปฏิบัติ แต่เป็นเกณฑ์ที่เลือกใช้ตามนโยบาย ไม่ใช่นิยามสากลของภาพที่ยอมรับได้ ควรตรวจดูภาพตัวอย่างที่เป็นตัวแทนของงานจริง ณ ขนาดที่จะแสดงผลเสมอ
ทำไมการหาค่าที่เหมาะสมทีละภาพอย่างละเอียดจึงมีต้นทุนสูง
ระบบเพิ่มประสิทธิภาพที่เข้มงวดสามารถเข้ารหัสภาพเดิมซ้ำหลายครั้งด้วยค่าคุณภาพต่างกัน วัดผลแต่ละตัวเลือกด้วย SSIMULACRA2 แล้วเก็บไฟล์ที่เล็กที่สุดซึ่งยังผ่านเกณฑ์ วิธีนี้มักทำให้การบีบอัดมีประสิทธิภาพมากขึ้น เพราะภาพที่บีบอัดได้ง่ายอาจผ่านเกณฑ์ตั้งแต่ใช้ค่าคุณภาพต่ำ ขณะที่ภาพที่จัดการยากต้องใช้ค่าที่สูงกว่า
ข้อเสียคือจำนวนครั้งที่ต้องเข้ารหัส หากมีภาพ N ภาพ และแต่ละภาพต้องทดลองเข้ารหัส K ครั้งจึงจะพบค่าที่ผ่านเกณฑ์ จำนวนครั้งของการเข้ารหัสจะอยู่ในระดับ N × K และยังมีขั้นตอนถอดรหัสกับให้คะแนนเพิ่มเติมอีก ในทางปฏิบัติ การเข้ารหัส AVIF ด้วยค่า effort สูงอาจเป็นต้นทุนหลัก ส่วนการคำนวณคะแนน SSIMULACRA2 เองไม่จำเป็นต้องเป็นขั้นตอนที่แพงที่สุด
การเลือกค่าคุณภาพหนึ่งค่าต่อโฟลเดอร์ช่วยลดงานค้นหาได้ แต่ก็ยังต้องสุ่มตัวอย่าง วัดผล และดูแลค่าตั้งแยกตามกลุ่ม สำหรับชุดภาพที่มีข้อกำหนดคุณภาพในการนำไปใช้เหมือนกันและยอมรับภาพที่ผิดไปจากเกณฑ์ได้บ้าง ความซับซ้อนที่เพิ่มขึ้นนี้อาจไม่คุ้มค่า
| กลยุทธ์ | งานปรับเทียบ | ข้อแลกเปลี่ยนหลัก |
|---|---|---|
| ปรับค่าคุณภาพแยกตามภาพ | ทดลองเข้ารหัสหลายค่าต่อภาพ | ควบคุมได้ละเอียด แต่มีต้นทุนการปรับเทียบสูงสุด |
| ปรับค่าคุณภาพแยกตามกลุ่ม | ทดลองเข้ารหัสหลายค่ากับตัวอย่างของแต่ละกลุ่ม | งานน้อยลง แต่มีการตั้งค่าเพิ่ม และผลลัพธ์ขึ้นอยู่กับแต่ละกลุ่ม |
| ใช้ค่าคุณภาพคงที่ค่าเดียว | ทดลองเข้ารหัสเฉพาะชุดตัวอย่างปรับเทียบขนาดจำกัด | จัดการได้ง่าย แต่ยอมรับว่าบางภาพอาจถูกบีบอัดมากหรือน้อยเกินไป |
ความแตกต่างสำคัญระหว่างคะแนนเฉลี่ยกับอัตราที่ผ่านเกณฑ์
ก่อนเลือกค่าคุณภาพ ต้องกำหนดก่อนว่า “ดีพอ” หมายถึงอะไร เป้าหมายสองแบบที่ดูคล้ายกันต่อไปนี้อาจนำไปสู่การตั้งค่าตัวเข้ารหัสที่แตกต่างกันมาก:
- เป้าหมายด้านคะแนนเฉลี่ย: คะแนน SSIMULACRA2 เฉลี่ยของชุดตัวอย่างควรอยู่ที่ประมาณ 60
- เป้าหมายด้านอัตราผ่านเกณฑ์: ภาพประมาณ 90% ควรได้คะแนน SSIMULACRA2 ≥ 60 ส่วนที่เหลืออาจต่ำกว่าเกณฑ์นี้ได้
สองเป้าหมายนี้ไม่เท่ากัน เมื่อคำนวณค่าเฉลี่ย คะแนนสูงของภาพที่เข้ารหัสได้ง่ายสามารถชดเชยคะแนนต่ำของภาพที่ยากกว่าได้ ตัวอย่างเช่น หากภาพครึ่งหนึ่งได้ 75 คะแนนและอีกครึ่งได้ 55 คะแนน ค่าเฉลี่ยจะเป็น 65 แต่มีเพียงครึ่งเดียวที่ผ่านเกณฑ์ 60
สำหรับกระบวนการจัดการภาพบนเว็บทั่วไป ที่ต้องการให้ภาพส่วนใหญ่ดูดีพอและยอมรับภาพที่ไม่ผ่านเกณฑ์ได้ส่วนน้อย เป้าหมายด้านอัตราผ่านเกณฑ์มักมีประโยชน์กว่า โดยคำนวณได้ดังนี้:
pass_rate = count(scores >= 60) / count(all_scores)
ควรบันทึกการกระจายคะแนนของภาพที่ไม่ผ่านเกณฑ์ และตรวจดูภาพที่มีปัญหาทางสายตามากที่สุดด้วย ชุดตัวอย่างที่มีภาพ 9% ได้ 59 คะแนน ต่างจากชุดที่มีภาพ 9% ได้เพียง 30 คะแนนอย่างมีนัยสำคัญ แม้อัตราผ่านเกณฑ์จะเท่ากันก็ตาม
การปรับเทียบจริงครั้งหนึ่งพบอะไรบ้าง
ในการทดลองปรับเทียบ AVIF เบื้องต้น กระบวนการปรับค่าอัตโนมัติเลือกค่าคุณภาพต่างกันตามกลุ่มภาพ โดยครอบคลุมตั้งแต่ช่วงกลางของเลข 30 ไปจนถึงช่วงกลางของเลข 40 ผลนี้เป็นไปตามที่คาด เพราะบางกลุ่มมีภาพที่ผ่านเกณฑ์ SSIMULACRA2 ที่เลือกไว้ตั้งแต่ค่าคุณภาพต่ำ ขณะที่ตัวอย่างบางภาพซึ่งจัดการยากต้องใช้ค่าคุณภาพการเข้ารหัสสูงกว่ามาก
อย่างไรก็ตาม กฎการปรับค่าอัตโนมัติเข้มงวดกว่าความต้องการนำภาพไปใช้งานจริง โดยพยายามให้ภาพทดสอบเกือบทั้งหมดในแต่ละกลุ่มผ่านเกณฑ์ และยอมให้มีภาพผิดเกณฑ์ได้เพียงเล็กน้อยมาก วิธีนี้ช่วยรักษาคุณภาพของภาพที่จัดการยาก แต่ก็อาจทำให้ต้องเพิ่มค่าคุณภาพให้ทั้งกลุ่มเพียงเพราะมีตัวอย่างที่แตกต่างออกไปหนึ่งภาพ
เมื่อกลับมาพิจารณาค่าที่วัดได้โดยใช้เป้าหมายอีกแบบหนึ่ง คือให้ภาพประมาณเก้าจากสิบภาพมีคะแนน SSIMULACRA2 ตั้งแต่ 60 ขึ้นไป การใช้ค่าคุณภาพ AVIF คงที่ประมาณ 39–40 จึงดูเป็นทางเลือกประนีประนอมที่สมเหตุสมผล ในการเปรียบเทียบนั้น ค่า 39 เน้นให้ไฟล์เล็กกว่า ส่วน 40 เผื่อระยะปลอดภัยให้ภาพที่มีคะแนนใกล้เกณฑ์มากกว่า ตัวเลขเหล่านี้ได้มาจากข้อมูลการปรับเทียบและการวิเคราะห์เพิ่มเติม โดยขณะนั้นยังไม่ได้แปลงภาพทั้งหมดด้วยค่าคงที่ และยังไม่ได้ตรวจสอบความถูกต้องอย่างเป็นอิสระกับคลังภาพทั้งชุด อีกทั้งยังไม่ได้ยืนยันว่าค่า 39 ช่วยลดขนาดไฟล์ได้เท่าใดเมื่อเทียบกับ 40
บทเรียนที่ได้ไม่ใช่ว่าค่าคุณภาพ AVIF 39 หรือ 40 ใช้ได้กับทุกกรณี แต่คือการใช้ค่าคงที่อาจเหมาะสมได้เมื่อสอดคล้องกับเป้าหมายการกระจายคุณภาพที่กำหนดไว้อย่างชัดเจน หากเปลี่ยนตัวเข้ารหัส องค์ประกอบของชุดภาพ กระบวนการจัดการสี หรือเกณฑ์คุณภาพตามการรับรู้ คำตอบก็อาจเปลี่ยนไป
วิธีปรับเทียบค่าคุณภาพ AVIF เพียงครั้งเดียว
- กำหนดสัดส่วนภาพที่ไม่ผ่านเกณฑ์ซึ่งยอมรับได้ ตัวอย่างเช่น กำหนดให้ภาพประมาณ 90% มีคะแนน SSIMULACRA2 ≥ 60 และตัดสินใจด้วยว่าเป้าหมายนี้ยืดหยุ่นได้หรือเป็นข้อกำหนดเคร่งครัดก่อนเผยแพร่
- สร้างชุดตัวอย่างที่เป็นตัวแทนของงานจริง ใส่ภาพที่มีขนาด รูปแบบไฟล์ต้นฉบับ การไล่ระดับสี ขอบคมชัด พื้นผิว และรายละเอียดน้อยในลักษณะต่าง ๆ สุ่มภาพจากงานจริงและใช้การสุ่มแบบแบ่งชั้นหากมีโอกาสพลาดภาพบางประเภท การคัดเลือกตามจำนวนไบต์ที่บีบอัดแล้วต่อพิกเซลเป็นแนวทางคร่าว ๆ ที่ช่วยให้ครอบคลุมหลายลักษณะ แต่ไม่ได้รับประกันว่าตัวอย่างจะเป็นตัวแทนในแง่คุณภาพตามการรับรู้
- ทดสอบค่าคุณภาพในช่วงแคบ ๆ เริ่มจากค่าที่ดูยอมรับได้ด้วยสายตาแล้วทดลองค่าที่อยู่ใกล้กันเพียงไม่กี่ค่า แทนที่จะไล่ลองทั้งช่วง ตัวอย่างเช่น ทดสอบ 38, 39, 40 และ 42 กับภาพชุดเดียวกัน
- รักษากระบวนการเข้ารหัสให้เหมือนกันทุกครั้ง คงความละเอียด การหมุนภาพ การแปลงสี ตัวเข้ารหัสที่ใช้ ค่า
effortการลดความละเอียดข้อมูลสี ความลึกบิต และการประมวลผลก่อนเข้ารหัสไว้เหมือนเดิม หากใส่ลายน้ำ ภาพอ้างอิงต้องมีลายน้ำและผ่านการแปลงแบบเดียวกันก่อนนำมาเปรียบเทียบ - บันทึกทั้งคะแนนและขนาดไฟล์ สำหรับแต่ละค่าที่ทดลอง ให้คำนวณสัดส่วนภาพที่ได้อย่างน้อย 60 คะแนน การกระจายคะแนนของภาพที่ต่ำกว่าเกณฑ์ และจำนวนไบต์รวมของไฟล์ที่เข้ารหัสจากชุดตัวอย่างเดียวกัน อย่าอนุมานปริมาณแบนด์วิดท์ที่ประหยัดได้จากตัวเลขค่าคุณภาพเพียงอย่างเดียว
- ตรวจดูภาพที่ไม่ผ่านเกณฑ์ พิจารณาใบหน้า ตัวอักษร เส้นบาง การไล่ระดับสี และรายละเอียดอื่นที่สำคัญต่อการแสดงผลตามต้องการ ตรวจดูด้วยขนาดแสดงผลที่ใกล้เคียงการใช้งานจริง ไม่ใช่ดูแต่ภาพขยาย
- เลือกค่าต่ำสุดที่ผ่านเงื่อนไข แล้วตรวจสอบอีกครั้ง นำค่าที่เลือกไปทดสอบกับชุดตัวอย่างสุ่มแยกต่างหากซึ่งไม่ได้ใช้ตอนเลือกค่า หากการพลาดเป้าหมาย 90% มีต้นทุนสูง ควรเผื่อระยะปลอดภัยและคำนึงถึงความไม่แน่นอนจากการสุ่มตัวอย่างอย่างจริงจัง แต่หากยอมรับภาพที่ไม่ผ่านเกณฑ์เป็นครั้งคราวได้ การเลือกค่าที่เน้นการบีบอัดมากกว่าอาจสมเหตุสมผล
การปรับเทียบเพียงครั้งเดียวไม่ได้หมายความว่าจะไม่ต้องสนใจการเปลี่ยนแปลงในอนาคต ควรสุ่มตรวจสอบชุดเล็กอีกครั้งเมื่อประเภทของภาพต้นฉบับ ขนาดภาพ เวอร์ชันตัวเข้ารหัส การแปลงภาพก่อนส่งมอบ หรือข้อกำหนดด้านการมองเห็นเปลี่ยนไป
ตัวอย่างเปรียบเทียบอย่างง่ายด้วย Sharp และ SSIMULACRA2
ตัวอย่างอย่างย่อนี้ใช้ตัวเข้ารหัส AVIF ของ Sharp สร้างผลลัพธ์สองแบบจากไฟล์ต้นฉบับเดียวกัน เป็นเพียงโค้ดสาธิตการปรับเทียบ ไม่ได้อ้างว่าทุกโครงการควรใช้ตัวเลือกตัวเข้ารหัสหรือค่าคุณภาพตามตัวอย่าง หลังติดตั้ง sharp ให้รันโค้ดในรูปแบบ ES module
import sharp from 'sharp';
const source = 'sample.png';
const encoding = {
effort: 9,
chromaSubsampling: '4:4:4',
bitdepth: 8,
tune: 'iq',
lossless: false
};
// Use the same orientation and color conversion in both paths.
await sharp(source)
.rotate()
.toColourspace('srgb')
.png()
.toFile('reference.png');
for (const quality of [39, 40]) {
const encoded = `candidate-q${quality}.avif`;
await sharp(source)
.rotate()
.toColourspace('srgb')
.avif({ ...encoding, quality })
.toFile(encoded);
await sharp(encoded)
.png()
.toFile(`candidate-q${quality}.png`);
}
จากนั้นเปรียบเทียบภาพตัวเลือกที่ถอดรหัสแล้วกับภาพอ้างอิงที่เตรียมไว้:
ssimulacra2 reference.png candidate-q39.png
ssimulacra2 reference.png candidate-q40.png
สำหรับการทดสอบจริง ควรทำกระบวนการนี้โดยอัตโนมัติกับภาพทุกภาพในชุดตัวอย่าง และรวบรวมทั้งคะแนนกับขนาดไฟล์ของแต่ละตัวเลือก หากกระบวนการผลิตจริงมีการปรับขนาด ครอบตัด ซ้อนองค์ประกอบ หรือแปลงภาพด้วยวิธีอื่น ต้องทำแบบเดียวกันกับภาพอ้างอิงด้วย ไม่เช่นนั้น SSIMULACRA2 จะวัดความแตกต่างที่เกิดจากการแปลงภาพบางส่วน แทนที่จะวัดเฉพาะการสูญเสียจากการบีบอัด
เมื่อเลือกค่าคุณภาพกลางที่จะใช้กับทุกภาพแล้ว การเข้ารหัสเพื่อใช้งานจริงก็เหลือเพียงการแปลงเป็น AVIF แบบครั้งเดียว ไม่ต้องค้นหาค่าคุณภาพใหม่ให้ภาพแต่ละภาพหรือแต่ละโฟลเดอร์ วิธีนี้ตัดงานทดลองเข้ารหัสซ้ำออกไป แต่ไม่ได้ทำให้ต้นทุนการเข้ารหัสหนึ่งครั้งต่อภาพผลลัพธ์หายไป
เมื่อใดที่การใช้ค่าคุณภาพ AVIF ค่าเดียวไม่เหมาะสม
ค่าคุณภาพคงที่เป็นการเลือกแลกข้อดีข้อเสีย ไม่ใช่ค่าที่เหมาะสมที่สุดสำหรับทุกกรณี การเข้ารหัสแบบปรับตามภาพยังมีประโยชน์เมื่อมีข้อกำหนดขั้นต่ำด้านคุณภาพของภาพแต่ละภาพตามสัญญา ไม่สามารถยอมรับข้อบกพร่องที่มองเห็นได้ ภาพต้นฉบับแตกต่างกันอย่างมาก หรือผลประหยัดจากการรีดขนาดไฟล์ทุกไบต์คุ้มกับทรัพยากรประมวลผลและความซับซ้อนในการพัฒนาที่เพิ่มขึ้น
ต้องระวังเป็นพิเศษเมื่อมีภาพหลายประเภทปะปนกัน ภาพถ่าย ภาพกราฟิกพื้นที่สีเรียบ ตัวหนังสือขนาดเล็ก และภาพที่เคยถูกบีบอัดมาแล้ว ไม่จำเป็นต้องตอบสนองต่อการตั้งค่าเดียวกันเหมือนกัน หากภาพประเภทหนึ่งไม่ผ่านเกณฑ์ยอมรับซ้ำ ๆ การกำหนดชุดค่าตั้งจำนวนน้อยแยกตามรูปแบบไฟล์หรือเนื้อหาอาจมีประสิทธิภาพกว่าทั้งสองทางสุดโต่ง คือใช้ค่าคุณภาพเดียวกับทุกภาพ หรือปรับละเอียดแยกทีละภาพทั้งหมด
ควรแยกความเร็วในการเข้ารหัสออกจากความเร็วในการปรับเทียบด้วย การใช้ค่าคุณภาพเดียวช่วยเลี่ยงการทดลองซ้ำ แต่หากยังเข้ารหัสทุกภาพด้วยค่า effort สูงมาก ก็อาจสิ้นเปลืองทรัพยากรประมวลผลอยู่ดี การใช้โปรไฟล์ตัวเข้ารหัสที่มี effort ต่ำลงเป็นอีกทางเลือกที่สมเหตุสมผล แต่ต้องปรับเทียบใหม่ เพราะความสัมพันธ์ระหว่างค่าคุณภาพกับคะแนนอาจเปลี่ยนไปตามตัวเลือกของตัวเข้ารหัส
หลักปฏิบัติที่นำไปใช้ได้จริง
ใช้ SSIMULACRA2 เป็นเครื่องมือสำหรับปรับเทียบ ไม่จำเป็นต้องเป็นขั้นตอนบังคับในการประมวลผลภาพทุกภาพจริง ๆ เลือกเป้าหมายคุณภาพที่สอดคล้องกับวิธีที่ผู้ใช้จะดูภาพ เข้ารหัสชุดตัวอย่างที่เป็นตัวแทนด้วยค่าที่ใกล้เคียงกันไม่กี่ค่า เปรียบเทียบทั้งคะแนนคุณภาพตามการรับรู้และจำนวนไบต์ ตรวจสอบภาพที่ไม่ผ่านเกณฑ์ แล้วกำหนดค่าต่ำสุดที่ยังอยู่ภายในขอบเขตความคลาดเคลื่อนที่ยอมรับได้
ในการปรับเทียบเชิงสำรวจครั้งหนึ่ง ค่าคุณภาพ AVIF ประมาณ 39–40 ดูเป็นจุดที่เหมาะจะหยุดค้นหา แต่นั่นเป็นการตัดสินใจภายใต้เกณฑ์และระดับการยอมรับเฉพาะกรณี ไม่ใช่ค่ามาตรฐานที่ใช้ได้ทั่วไปหรือผลทดสอบประสิทธิภาพที่ยืนยันจากคลังภาพทั้งหมด บทเรียนที่นำไปใช้ได้กว้างกว่านั้นเรียบง่ายกว่า คือ เมื่อเวลาและทรัพยากรประมวลผลมีจำกัด ค่าคุณภาพคงที่ซึ่งผ่านการตรวจสอบอย่างรอบคอบมักใช้งานได้จริงมากกว่าการพยายามปรับภาพแต่ละภาพอย่างไม่สิ้นสุด