بازگشت به بلاگ
۵ آبان ۱۴۰۵Sergei Solod10 دقیقه مطالعه

چگونه با SSIMULACRA2 کیفیت AVIF را بدون بهینه‌سازی تک‌تک تصاویر انتخاب کنیم

به‌جای کدگذاری مکرر هر تصویر، یک تنظیم کیفیت ثابت برای AVIF را با SSIMULACRA2 و بررسی بصری کالیبره کنید. با روش اندازه‌گیری نرخ قبولی، مقایسهٔ حجم فایل‌ها و انتخاب یک تنظیم کاربردی آشنا شوید.

AVIFSSIMULACRA2فشرده‌سازی تصاویرSharpبهینه‌سازی تصاویر

اگر تنها دغدغه حجم فایل باشد، انتخاب تنظیم کیفیت AVIF کار ساده‌ای است. بخش دشوار، تعیین میزان افت کیفیت بصری قابل‌قبول است. مقدار کیفیت 40 نه به این معناست که امتیاز کیفیت ادراکی 40 خواهد بود و نه تضمین می‌کند که همهٔ تصاویر نتیجهٔ یکسانی داشته باشند. تصاویر ورودی مختلف ممکن است به تنظیمات کاملاً یکسان کدگذار، واکنش‌های بسیار متفاوتی نشان دهند.

SSIMULACRA2 با مقایسهٔ تصویر فشرده‌شده پس از رمزگشایی با تصویر مرجع، به پر کردن این فاصله کمک می‌کند. اما جست‌وجوی جامع برای یافتن کیفیت مناسب تک‌تک تصاویر می‌تواند یک فرایند تبدیل نسبتاً ساده را به حجم سنگینی از عملیات کدگذاری تبدیل کند. وقتی هدف، دستیابی به کیفیت مناسب برای تصاویر وب است، نه بهینه‌سازی کامل تک‌تک فایل‌ها، راه ساده‌تری وجود دارد: یک تنظیم کیفیت AVIF را روی نمونه‌ای نماینده کالیبره کنید، نتایج را بررسی کنید و همان تنظیم را برای بقیهٔ مجموعه به کار ببرید.

کیفیت AVIF و امتیاز SSIMULACRA2 دو عدد متفاوت‌اند

گزینهٔ quality که به کدگذار AVIF داده می‌شود، دستوری دربارهٔ فشرده‌سازی است. در مقابل، SSIMULACRA2 معیاری برای سنجش نتیجهٔ کدگذاری است. مقیاس این دو قابل‌جایگزینی نیست: مقدار quality: 40 در AVIF به این معنا نیست که SSIMULACRA2 برابر با 40 یا 60 یا هر امتیاز ثابت دیگری خواهد شد.

برای سنجش نتیجهٔ کدگذاری، تصویر را رمزگشایی و با مرجع مقایسه کنید:

ssimulacra2 reference.png encoded-decoded.png

امتیازهای بالاتر SSIMULACRA2 نشان‌دهندهٔ شباهت ادراکی بیشتر هستند. مستندات رسمی آن امتیاز حدود 50 را کیفیت متوسط و حدود 70 را کیفیت بالا توصیف می‌کنند. آستانهٔ 60 می‌تواند هدفی کاربردی باشد، اما انتخابی وابسته به سیاست کیفیت است، نه تعریفی جهان‌شمول از تصویر قابل‌قبول. همیشه نتایج نماینده را در اندازهٔ واقعی نمایش بررسی کنید.

چرا بهینه‌سازی جامع هر تصویر پرهزینه می‌شود؟

یک بهینه‌ساز سخت‌گیر می‌تواند تصویر را بارها با مقادیر کیفیت متفاوت کدگذاری کند، هر گزینه را با SSIMULACRA2 بسنجد و کوچک‌ترین خروجی قابل‌قبول را نگه دارد. این روش اغلب بهره‌وری فشرده‌سازی بیشتری به دست می‌دهد، زیرا یک تصویر ساده ممکن است با کیفیت پایین از آستانه عبور کند، درحالی‌که تصویری دشوار به کیفیت بالاتری نیاز دارد.

نقطه‌ضعف آن تعداد دفعات کدگذاری است. اگر N تصویر داشته باشیم و برای پیدا کردن تنظیم قابل‌قبول هر تصویر به K کدگذاری آزمایشی نیاز داشته باشد، تعداد عملیات کدگذاری در حدود N × K خواهد بود؛ علاوه بر رمزگشایی و محاسبهٔ امتیاز. در عمل، کدگذاری AVIF با تلاش محاسباتی زیاد می‌تواند بخش عمدهٔ هزینه را به خود اختصاص دهد؛ لزوماً محاسبهٔ خود معیار 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 از نظر حجم فایل نیز مشخص نشده بود.

نتیجه این نیست که کیفیت 39 یا 40 برای AVIF در همه‌جا مناسب است. نکته این است که یک تنظیم ثابت زمانی می‌تواند منطقی باشد که با توزیع کیفیتی که به‌صراحت انتخاب شده مطابقت داشته باشد. تغییر کدگذار، ترکیب تصاویر، مسیر پردازش رنگ یا آستانهٔ کیفیت ادراکی می‌تواند به نتیجهٔ متفاوتی منجر شود.

چگونه کیفیت AVIF را یک‌بار کالیبره کنیم؟

  1. نرخ شکست قابل‌قبول را انتخاب کنید. برای مثال، شرط بگذارید که تقریباً 90% تصاویر به امتیاز SSIMULACRA2 ≥ 60 برسند. تعیین کنید که این هدف انعطاف‌پذیر است یا الزامی سخت‌گیرانه برای انتشار.
  2. نمونه‌ای واقعاً نماینده بسازید. تصاویر با ابعاد و قالب‌های مبدأ مختلف، گرادیان‌ها، لبه‌های تیز، بافت‌ها و تصاویر کم‌جزئیات را در نمونه بگنجانید. از بار کاری واقعی به‌صورت تصادفی نمونه بگیرید و اگر در غیر این صورت یک دسته از قلم می‌افتد، از نمونه‌گیری طبقه‌بندی‌شده استفاده کنید. انتخاب فایل‌ها صرفاً براساس تعداد بایت فشرده به‌ازای هر پیکسل، روش ابتکاری مفیدی برای پوشش دامنهٔ متنوع است، نه تضمینی برای نمایندگی ادراکی نمونه.
  3. محدودهٔ کوچکی از کیفیت‌های کدگذار را آزمایش کنید. به‌جای امتحان کردن تمام مقیاس کیفیت، با چند گزینه در نزدیکی تنظیمی که از نظر بصری قابل‌قبول است شروع کنید. برای مثال، مقادیر نزدیک 38، 39، 40 و 42 را روی همان تصاویر امتحان کنید.
  4. مسیر کدگذاری را یکسان نگه دارید. وضوح، جهت تصویر، تبدیل رنگ، پیاده‌سازی کدگذار، میزان تلاش محاسباتی، نمونه‌برداری زیرمجموعه‌ای رنگ، عمق بیت و پیش‌پردازش را ثابت نگه دارید. اگر واترمارک اضافه می‌کنید، تصویر مرجع باید پیش از مقایسه با نتیجهٔ فشرده، همان واترمارک و همان تبدیل‌ها را داشته باشد.
  5. امتیاز و حجم را با هم ثبت کنید. برای هر گزینه، سهم تصاویری را که حداقل امتیاز 60 می‌گیرند، توزیع امتیازهای زیر آستانه و مجموع بایت‌های کدگذاری‌شده برای همان نمونه محاسبه کنید. صرفاً از روی عدد کیفیت دربارهٔ صرفه‌جویی در پهنای باند نتیجه‌گیری نکنید.
  6. موارد ناموفق را بررسی کنید. چهره‌ها، متن‌ها، خطوط نازک، گرادیان‌ها و جزئیات دیگری را که برای نحوهٔ نمایش موردنظر اهمیت دارند بررسی کنید. تصاویر را در اندازه‌های واقعی نمایش ببینید، نه فقط در مقایسه‌های بزرگ‌نمایی‌شده.
  7. کمترین کیفیت رضایت‌بخش را انتخاب و سپس اعتبارسنجی کنید. گزینهٔ انتخابی را روی یک نمونهٔ تصادفی مستقل که در انتخاب کیفیت نقشی نداشته است آزمایش کنید. اگر نرسیدن به هدف 90% هزینهٔ زیادی دارد، حاشیهٔ اطمینان در نظر بگیرید و عدم‌قطعیت نمونه‌گیری را جدی بگیرید. اگر شکست‌های گاه‌به‌گاه پذیرفتنی‌اند، مقدار تهاجمی‌تر نیز ممکن است منطقی باشد.

یک‌بار کالیبره کردن به معنای نادیده گرفتن تغییرات آینده نیست. وقتی ترکیب تصاویر ورودی، ابعاد تصاویر، نسخهٔ کدگذار، تبدیل‌های هنگام ارائه یا الزامات بصری تغییر می‌کنند، بررسی یک نمونهٔ کوچک را تکرار کنید.

مقایسه‌ای ساده با Sharp وSSIMULACRA2

این مثال ساده از کدگذار AVIF در Sharp برای ساخت دو خروجی آزمایشی از ورودی یکسان استفاده می‌کند. این قطعه‌کد صرفاً نمونه‌ای برای نمایش کالیبراسیون است و ادعا نمی‌کند که همهٔ پروژه‌ها باید از این گزینه‌های کدگذار یا مقادیر کیفیت استفاده کنند. پس از نصب sharp، آن را به‌صورت یک ماژول ES اجرا کنید.

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 همچنان می‌تواند از نظر محاسباتی پرهزینه باشد. استفاده از پروفایل کدگذاری با تلاش محاسباتی کمتر نیز گزینهٔ معتبری برای بهینه‌سازی است، به شرط آنکه دوباره کالیبره کنید؛ زیرا رابطهٔ بین مقدار کیفیت و امتیاز حاصل ممکن است با تغییر گزینه‌های کدگذار عوض شود.

قاعدهٔ کاربردی

از SSIMULACRA2 به‌عنوان ابزار کالیبراسیون استفاده کنید، نه لزوماً مرحله‌ای اجباری در فرایند تولید برای تک‌تک تصاویر. هدف کیفیت را براساس نحوهٔ واقعی مشاهدهٔ تصاویر انتخاب کنید، نمونه‌ای نماینده را با چند تنظیم نزدیک به هم کدگذاری کنید، هم امتیازهای ادراکی و هم تعداد بایت‌ها را مقایسه کنید، موارد ناموفق را ببینید و کمترین تنظیمی را انتخاب کنید که با میزان افت قابل‌تحمل شما سازگار است.

در یک کالیبراسیون اکتشافی، کیفیت AVIF در حدود 39–40 نقطهٔ توقف معقولی به نظر می‌رسید. این تصمیم براساس آستانه و میزان تحمل مشخصی گرفته شده بود، نه به‌عنوان تنظیمی جهان‌شمول یا نتیجهٔ بنچمارک تأییدشده روی کل مجموعه. درس قابل‌تعمیم ساده‌تر است: وقتی زمان و توان محاسباتی محدودند، یک کیفیت ثابت که با دقت اعتبارسنجی شده، اغلب از بهینه‌سازی بی‌پایان تک‌تک تصاویر کاربردی‌تر است.