กลับไปที่บล็อก
27 ตุลาคม 2569Sergei Solod25 นาทีในการอ่าน

วิธีเลือกค่าคุณภาพ AVIF ด้วย SSIMULACRA2 โดยไม่ต้องปรับภาพทีละภาพ

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

AVIFSSIMULACRA2การบีบอัดภาพSharpการปรับภาพให้เหมาะสม

การเลือกค่าคุณภาพสำหรับ 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 เพียงครั้งเดียว

  1. กำหนดสัดส่วนภาพที่ไม่ผ่านเกณฑ์ซึ่งยอมรับได้ ตัวอย่างเช่น กำหนดให้ภาพประมาณ 90% มีคะแนน SSIMULACRA2 ≥ 60 และตัดสินใจด้วยว่าเป้าหมายนี้ยืดหยุ่นได้หรือเป็นข้อกำหนดเคร่งครัดก่อนเผยแพร่
  2. สร้างชุดตัวอย่างที่เป็นตัวแทนของงานจริง ใส่ภาพที่มีขนาด รูปแบบไฟล์ต้นฉบับ การไล่ระดับสี ขอบคมชัด พื้นผิว และรายละเอียดน้อยในลักษณะต่าง ๆ สุ่มภาพจากงานจริงและใช้การสุ่มแบบแบ่งชั้นหากมีโอกาสพลาดภาพบางประเภท การคัดเลือกตามจำนวนไบต์ที่บีบอัดแล้วต่อพิกเซลเป็นแนวทางคร่าว ๆ ที่ช่วยให้ครอบคลุมหลายลักษณะ แต่ไม่ได้รับประกันว่าตัวอย่างจะเป็นตัวแทนในแง่คุณภาพตามการรับรู้
  3. ทดสอบค่าคุณภาพในช่วงแคบ ๆ เริ่มจากค่าที่ดูยอมรับได้ด้วยสายตาแล้วทดลองค่าที่อยู่ใกล้กันเพียงไม่กี่ค่า แทนที่จะไล่ลองทั้งช่วง ตัวอย่างเช่น ทดสอบ 38, 39, 40 และ 42 กับภาพชุดเดียวกัน
  4. รักษากระบวนการเข้ารหัสให้เหมือนกันทุกครั้ง คงความละเอียด การหมุนภาพ การแปลงสี ตัวเข้ารหัสที่ใช้ ค่า effort การลดความละเอียดข้อมูลสี ความลึกบิต และการประมวลผลก่อนเข้ารหัสไว้เหมือนเดิม หากใส่ลายน้ำ ภาพอ้างอิงต้องมีลายน้ำและผ่านการแปลงแบบเดียวกันก่อนนำมาเปรียบเทียบ
  5. บันทึกทั้งคะแนนและขนาดไฟล์ สำหรับแต่ละค่าที่ทดลอง ให้คำนวณสัดส่วนภาพที่ได้อย่างน้อย 60 คะแนน การกระจายคะแนนของภาพที่ต่ำกว่าเกณฑ์ และจำนวนไบต์รวมของไฟล์ที่เข้ารหัสจากชุดตัวอย่างเดียวกัน อย่าอนุมานปริมาณแบนด์วิดท์ที่ประหยัดได้จากตัวเลขค่าคุณภาพเพียงอย่างเดียว
  6. ตรวจดูภาพที่ไม่ผ่านเกณฑ์ พิจารณาใบหน้า ตัวอักษร เส้นบาง การไล่ระดับสี และรายละเอียดอื่นที่สำคัญต่อการแสดงผลตามต้องการ ตรวจดูด้วยขนาดแสดงผลที่ใกล้เคียงการใช้งานจริง ไม่ใช่ดูแต่ภาพขยาย
  7. เลือกค่าต่ำสุดที่ผ่านเงื่อนไข แล้วตรวจสอบอีกครั้ง นำค่าที่เลือกไปทดสอบกับชุดตัวอย่างสุ่มแยกต่างหากซึ่งไม่ได้ใช้ตอนเลือกค่า หากการพลาดเป้าหมาย 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 ดูเป็นจุดที่เหมาะจะหยุดค้นหา แต่นั่นเป็นการตัดสินใจภายใต้เกณฑ์และระดับการยอมรับเฉพาะกรณี ไม่ใช่ค่ามาตรฐานที่ใช้ได้ทั่วไปหรือผลทดสอบประสิทธิภาพที่ยืนยันจากคลังภาพทั้งหมด บทเรียนที่นำไปใช้ได้กว้างกว่านั้นเรียบง่ายกว่า คือ เมื่อเวลาและทรัพยากรประมวลผลมีจำกัด ค่าคุณภาพคงที่ซึ่งผ่านการตรวจสอบอย่างรอบคอบมักใช้งานได้จริงมากกว่าการพยายามปรับภาพแต่ละภาพอย่างไม่สิ้นสุด