Terug naar de blog
27 oktober 2026Sergei Solod10 min leestijd

AVIF-kwaliteit kiezen met SSIMULACRA2 zonder elke afbeelding te optimaliseren

Kalibreer een vaste AVIF-kwaliteitsinstelling met SSIMULACRA2 en visuele controles, in plaats van elke afbeelding steeds opnieuw te coderen. Leer hoe je slaagpercentages meet, bestandsgroottes vergelijkt en een praktische instelling kiest.

AVIFSSIMULACRA2BeeldcompressieSharpBeeldoptimalisatie

Een AVIF-kwaliteitsinstelling kiezen is eenvoudig als alleen de bestandsgrootte telt. Lastiger is bepalen hoeveel zichtbaar kwaliteitsverlies aanvaardbaar is. Een kwaliteitswaarde van 40 betekent niet dat de perceptuele kwaliteitsscore ook 40 is, en garandeert evenmin voor elke afbeelding hetzelfde resultaat. Verschillende bronafbeeldingen kunnen heel anders reageren op identieke encoderinstellingen.

SSIMULACRA2 helpt dat verschil te overbruggen door een gedecodeerde, gecomprimeerde afbeelding met een referentie te vergelijken. Maar als je voor elke afbeelding uitgebreid naar de juiste kwaliteit zoekt, kan een verder eenvoudig conversieproces veel rekenwerk vergen. Wanneer het doel een redelijke beeldkwaliteit voor het web is, en niet de maximaal haalbare optimalisatie van elk bestand, is er een eenvoudigere aanpak: kalibreer één AVIF-kwaliteitsinstelling met een representatieve steekproef, beoordeel de resultaten visueel en gebruik die instelling voor de rest van de verzameling.

AVIF-kwaliteit en SSIMULACRA2 zijn verschillende getallen

De optie quality die je aan een AVIF-encoder doorgeeft, stuurt de compressie aan. SSIMULACRA2 is daarentegen een meting van het daadwerkelijk gecodeerde resultaat. De schalen zijn niet onderling uitwisselbaar: AVIF quality: 40 houdt niet in dat SSIMULACRA2 gelijk is aan 40, 60 of welke andere vaste score dan ook.

Om een gecodeerde afbeelding te beoordelen, decodeer je die en vergelijk je het resultaat met de referentie:

ssimulacra2 reference.png encoded-decoded.png

Een hogere SSIMULACRA2-score wijst op een grotere perceptuele gelijkenis. De officiële documentatie beschrijft een score rond 50 als middelmatige kwaliteit en rond 70 als hoge kwaliteit. Een drempel van 60 kan een bruikbaar pragmatisch doel zijn, maar is een beleidskeuze, geen universele definitie van een aanvaardbare afbeelding. Controleer representatieve resultaten altijd op de grootte waarop ze werkelijk worden weergegeven.

Waarom uitgebreide optimalisatie per afbeelding duur wordt

Een strikte optimalisator kan een afbeelding meerdere keren met verschillende kwaliteitswaarden coderen, elke kandidaat met SSIMULACRA2 meten en vervolgens het kleinste resultaat bewaren dat aan de kwaliteitseis voldoet. Dat levert vaak efficiëntere compressie op: een eenvoudige afbeelding voldoet mogelijk al bij een lage kwaliteitsinstelling, terwijl een lastige afbeelding een hogere instelling nodig heeft.

Het nadeel is het aantal coderingspogingen. Als er N afbeeldingen zijn en er per afbeelding K kandidaatcoderingen nodig zijn om een aanvaardbare instelling te vinden, komt dat neer op ongeveer N × K coderingen, plus het decoderen en berekenen van scores. In de praktijk kan AVIF-codering met een hoge inspanning het grootste deel van de kosten bepalen; het berekenen van SSIMULACRA2 hoeft niet zelf het duurste onderdeel te zijn.

Door één kwaliteitsinstelling per map te kiezen, beperk je het zoekwerk, maar moet je nog steeds steekproeven nemen, meten en afzonderlijke instellingen voor verschillende groepen bijhouden. Voor verzamelingen met uniforme eisen aan de levering en enige tolerantie voor uitschieters is die extra complexiteit mogelijk niet de moeite waard.

StrategieKalibratiewerkBelangrijkste afweging
Adaptieve kwaliteit per afbeeldingMeerdere kandidaatcoderingen per afbeeldingFijnmazige controle, hoogste kalibratiekosten
Adaptieve kwaliteit per groepMeerdere kandidaatcoderingen voor de steekproef van elke groepMinder werk, maar meer configuratie en groepsafhankelijke resultaten
Eén vaste kwaliteitsinstellingKandidaatcoderingen voor een beperkte kalibratiesteekproefWeinig operationele complexiteit, met enkele te sterk of te weinig gecomprimeerde afbeeldingen

Het belangrijke verschil: gemiddelde score of slaagpercentage

Bepaal voordat je een kwaliteitswaarde kiest wat ‘goed genoeg’ betekent. Twee doelen die op het eerste gezicht op elkaar lijken, leiden tot heel verschillende encoderinstellingen:

  • Doel voor de gemiddelde score: de gemiddelde SSIMULACRA2-score van de steekproef moet ongeveer 60 zijn.
  • Doel voor het slaagpercentage: ongeveer 90% van de afbeeldingen moet SSIMULACRA2 ≥ 60 halen; de overige afbeeldingen mogen eronder blijven.

Dat is niet hetzelfde. Bij het berekenen van het gemiddelde kan een hoge score voor een eenvoudige afbeelding een lage score voor een lastige afbeelding compenseren. Als bijvoorbeeld de helft van de afbeeldingen 75 scoort en de andere helft 55, is het gemiddelde 65, terwijl slechts de helft de drempel van 60 haalt.

Voor een algemene workflow met webafbeeldingen, waarbij de meeste afbeeldingen er aanvaardbaar moeten uitzien en een minderheid mag afwijken, is het slaagpercentage vaak nuttiger. Bereken:

pass_rate = count(scores >= 60) / count(all_scores)

Leg ook de verdeling van de niet-geslaagde resultaten vast en bekijk de afbeeldingen die er het slechtst uitzien. Een steekproef waarin 9% een score van 59 krijgt, verschilt wezenlijk van een steekproef waarin 9% slechts 30 scoort, ook al is het slaagpercentage gelijk.

Wat een echte kalibratie liet zien

Bij een verkennende AVIF-kalibratie koos een adaptieve procedure verschillende kwaliteitsinstellingen voor verschillende groepen afbeeldingen, grofweg van halverwege de 30 tot halverwege de 40. Dat was te verwachten: sommige groepen bevatten afbeeldingen die de gekozen SSIMULACRA2-drempel al bij een lage instelling bereikten, terwijl een paar lastige voorbeelden een aanzienlijk hogere encoderkwaliteit nodig hadden.

De adaptieve regel was echter strenger dan de werkelijke leveringseis. Het doel was om bijna alle geteste afbeeldingen in elke groep de drempel te laten halen, met slechts zeer beperkte ruimte voor een uitschieter. Dat beschermt lastige afbeeldingen, maar kan er ook toe leiden dat een hele groep een hogere kwaliteitsinstelling krijgt vanwege één uitzonderlijk voorbeeld.

Toen de metingen opnieuw werden bekeken vanuit een ander doel — ongeveer negen van de tien afbeeldingen met een SSIMULACRA2-score van 60 of hoger — leek één vaste AVIF-kwaliteit van ongeveer 39–40 een aannemelijk compromis. In die vergelijking wees 39 op kleinere uitvoerbestanden, terwijl 40 wat meer marge bood voor afbeeldingen dicht bij de drempel. Deze waarden kwamen voort uit de kalibratiegegevens en daaropvolgende analyse; een volledige conversie met een vaste kwaliteitsinstelling en een onafhankelijke validatie over de hele verzameling waren niet uitgevoerd. Hoeveel kleiner de bestanden met 39 precies zouden zijn dan met 40, was niet vastgesteld.

De les is niet dat AVIF-kwaliteit 39 of 40 overal werkt. Het punt is dat een vaste instelling redelijk kan zijn wanneer die aansluit op een expliciet gekozen verdeling van kwaliteitsscores. Een andere encoder, samenstelling van afbeeldingen, kleurverwerkingsketen of perceptuele drempel kan tot een andere uitkomst leiden.

AVIF-kwaliteit eenmalig kalibreren

  1. Kies een aanvaardbaar percentage dat niet slaagt. Je kunt bijvoorbeeld eisen dat ongeveer 90% van de afbeeldingen SSIMULACRA2 ≥ 60 haalt. Bepaal of dit een flexibel streefdoel is of een harde voorwaarde om de afbeeldingen vrij te geven.
  2. Stel een echt representatieve steekproef samen. Neem verschillende afmetingen, bronformaten, kleurverlopen, scherpe randen, texturen en afbeeldingen met weinig details op. Trek een willekeurige steekproef uit de werkelijke verzameling en gebruik stratificatie als een categorie anders buiten beeld zou blijven. Selecteren op alleen het aantal gecomprimeerde bytes per pixel is een bruikbare vuistregel om variatie af te dekken, maar garandeert geen perceptueel representatieve steekproef.
  3. Test een klein bereik aan encoderkwaliteiten. Begin met enkele kandidaten rond een instelling die visueel aanvaardbaar lijkt, in plaats van de hele kwaliteitsschaal te doorlopen. Test bijvoorbeeld de nabije waarden 38, 39, 40 en 42 op dezelfde afbeeldingen.
  4. Houd de coderingsketen identiek. Houd resolutie, oriëntatie, kleurconversie, encoderimplementatie, effort, chroma-subsampling, bitdiepte en voorbewerking constant. Als je een watermerk toepast, moet de referentieafbeelding vóór de vergelijking hetzelfde watermerk en dezelfde transformaties bevatten.
  5. Registreer score en bestandsgrootte samen. Bereken voor elke kandidaat welk deel van de afbeeldingen minstens 60 scoort, hoe de scores onder de drempel verdeeld zijn en hoeveel bytes alle gecodeerde bestanden van dezelfde steekproef samen innemen. Leid de bandbreedtebesparing niet uitsluitend af uit het kwaliteitsgetal.
  6. Bekijk de afbeeldingen die niet slagen. Let op gezichten, tekst, dunne lijnen, kleurverlopen en andere details die belangrijk zijn voor de beoogde weergave. Controleer op realistische weergaveformaten en niet alleen in sterk ingezoomde vergelijkingen.
  7. Kies de laagste geschikte kwaliteit en valideer die. Test de kandidaat op een afzonderlijke willekeurige controlegroep die geen invloed had op de keuze. Als het kostbaar zou zijn om het doel van 90% niet te halen, houd dan een veiligheidsmarge aan en neem de steekproefonzekerheid serieus. Als een incidentele misser aanvaardbaar is, kan een agressievere waarde redelijk zijn.

Eenmalig kalibreren betekent niet dat je latere veranderingen kunt negeren. Herhaal een kleine steekproefcontrole wanneer de samenstelling van de bronafbeeldingen, de afmetingen, de encoderversie, de transformaties bij levering of de visuele eisen veranderen.

Een eenvoudige vergelijking met Sharp en SSIMULACRA2

Dit vereenvoudigde voorbeeld gebruikt de AVIF-encoder van Sharp om twee kandidaten van dezelfde invoer te maken. Het is een illustratief kalibratiefragment, geen bewering dat ieder project deze encoderopties of kwaliteitswaarden zou moeten gebruiken. Voer het uit als ES-module nadat je sharp hebt geïnstalleerd.

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`);
}

Vergelijk vervolgens de gedecodeerde kandidaten met de voorbereide referentie:

ssimulacra2 reference.png candidate-q39.png
ssimulacra2 reference.png candidate-q40.png

Automatiseer dit voor een echte test voor alle afbeeldingen in de steekproef en verzamel van elke kandidaat de score en bestandsgrootte. Als je productieproces afbeeldingen schaalt, bijsnijdt, van overlays voorziet of anderszins transformeert, voer dan dezelfde bewerkingen uit op de referentie waarmee je vergelijkt. Anders meet SSIMULACRA2 deels de transformatie in plaats van het compressieverlies.

Zodra een globale kwaliteitsinstelling is gekozen, wordt de productiecodering een gewone AVIF-conversie in één doorgang. Je hoeft dan niet meer per afbeelding of map naar een kwaliteitswaarde te zoeken. Dat scheelt herhaalde proefcoderingen, maar niet de kosten van de ene codering die elke uitvoerafbeelding nog steeds nodig heeft.

Wanneer één AVIF-kwaliteitsinstelling niet de juiste keuze is

Een vaste instelling is een compromis, geen universeel optimum. Adaptieve codering blijft waardevol wanneer er contractuele minimumkwaliteitseisen per afbeelding gelden, zichtbare fouten onaanvaardbaar zijn, bronnen sterk uiteenlopen of het besparen van elke byte het extra rekenwerk en de complexere implementatie rechtvaardigt.

Wees vooral voorzichtig met gemengde soorten afbeeldingen. Foto's, vlakke illustraties, fijne tekst en eerder gecomprimeerde bronnen reageren niet noodzakelijk hetzelfde. Als één categorie herhaaldelijk niet door de acceptatietest komt, kunnen enkele formaat- of inhoudsafhankelijke profielen efficiënter zijn dan beide uitersten: één universele kwaliteitsinstelling of volledige optimalisatie per afbeelding.

Maak ook onderscheid tussen de snelheid van de encoder en die van de kalibratie. Eén kwaliteitsinstelling voorkomt herhaalde experimenten, maar alle afbeeldingen met een zeer hoge effort coderen kan nog steeds veel rekenkracht kosten. Een encoderprofiel met een lagere inspanning is een andere mogelijke optimalisatie, op voorwaarde dat je opnieuw kalibreert: de relatie tussen kwaliteitsinstelling en score kan veranderen door andere encoderopties.

De praktische vuistregel

Gebruik SSIMULACRA2 als kalibratie-instrument, niet noodzakelijk als verplichte productiestap voor iedere afbeelding. Kies een kwaliteitsdoel dat past bij de manier waarop de afbeeldingen daadwerkelijk worden bekeken, codeer een representatieve steekproef op een paar nabije instellingen, vergelijk zowel de perceptuele scores als de aantallen bytes, bekijk de afbeeldingen die niet slagen en leg de laagste instelling vast die binnen je fouttolerantie valt.

Bij één verkennende kalibratie leek een AVIF-kwaliteit rond 39–40 een verstandig punt om te stoppen. Dat was een beslissing op basis van een specifieke drempel en tolerantie, geen universele standaardinstelling of bevestigde benchmark voor de volledige verzameling. De bredere les is eenvoudiger: als tijd en rekenkracht beperkt zijn, is een zorgvuldig gevalideerde vaste kwaliteitsinstelling vaak praktischer dan elke afzonderlijke afbeelding eindeloos blijven optimaliseren.