Det er tid til at erstatte GIF med AV1-video.

Det er tid til at erstatte GIF med AV1-video.

Nu er det 2019, og vi må træffe en beslutning om GIF (nej, det handler ikke om denne beslutning! Her vil vi aldrig blive enige! — her drejer det sig om udtalen på engelsk, hvilket ikke er relevant for os — bem. fra oversætteren.). GIF'er optager en enorm mængde plads (som regel flere megabyte!), hvilket, hvis du er webudvikler, fuldstændig strider imod dine ønsker! Som webudvikler vil du minimere de ting, som brugerne skal downloade, for at siden kan indlæses hurtigt. Af samme grund minimerer du JavaScript, optimerer PNG, JPEG og nogle gange konverterer JPEG til WebP. Men hvad skal der så ske med den gamle GIF?

Hvor vi er på vej hen, får vi ikke brug for GIF'er!

Hvis dit mål er at forbedre indlæsningstiden for hjemmesiden, så skal du skILLE dig af med GIF! Men hvordan laver du så animerede billeder? Svaret er video. Og i de fleste tilfælde vil du få bedre kvalitet og en pladsbesparelse på 50-90%! I livet har de fleste ting både fordele og ulemper. Når du erstatter GIF med video, er der sjældent ulemper at finde.

Væk med alle GIF'er!

Heldigvis har det været normalt at erstatte GIF med video de seneste år, så alle nødvendige værktøjer er allerede tilgængelige. I dette indlæg vil jeg ikke finde på hjulet igen, men blot forbedre de eksisterende løsninger lidt. Så her er essensen:

  1. Tag GIF'en og konverter den til video
  2. Koden videoen med H.264 eller VP9, dvs. komprimere den og pakke den i en MP4 eller WebM container
  3. Erstat <img> med animeret GIF til til en video
  4. Aktiver autoplay uden lyd og loop, så du opnår GIF-effekten

Google har god dokumentation, der beskriver processen.

Nu er det 2019

Nu er det 2019. Fremskridtene bevæger sig fremad, og vi må ikke falde bagud. Indtil nu har vi haft to kodeksmuligheder, der er bredt understøttet i alle browsere og videokodningsværktøjer:

  1. H.264 — introduceret i 2003 og den mest anvendte i dag
  2. VP9 — introduceret i 2013 og opnået næsten 50% bedre kompression sammenlignet med H.264, selvom som der skrives her ikke alt og ikke altid er så rosenrødt

Bemærk: selvom H.265-standarden er den næste version af H.264 og kan konkurrere med VP9, overvejer jeg ikke den på grund af svag browserunderstøttelse, hvilket vises på siden https://caniuse.com/#feat=hevc. Licensomkostninger er den primære grund til, at H.265 ikke er blevet så udbredt som H.264, og derfor arbejder Alliance of Open Media-konsortiet med en royaltyfri codec — AV1.

Husk, at vores mål er at reducere enorme GIF'er til den mindst mulige størrelse for at fremskynde indlæsningen. Det ville være underligt i 2019, hvis vi ikke havde et nyt standard til videokomprimering i vores værktøjskasse. Men vi har det, og det hedder AV1. Med AV1 kan du opnå en forbedring af komprimeringen på cirka 30% sammenlignet med VP9. Fantastisk! 🙂

AV1 har været tilgængelig siden 2019!

På desktop

For nylig blev understøttelse af AV1-dekodning tilføjet i desktopversionerne af Google Chrome 70 og Mozilla Firefox 65. Lige nu er understøttelsen i Firefox ustabil og kan forårsage nedbrud, men det burde ændre sig med tilføjelsen af dekoderen dav1d allerede i Firefox 67 (er frigivet, og understøttelse er blevet — red. anm.). For detaljer om den nye version, læs — dav1d 0.3.0 udgave: endnu hurtigere!

På smartphones

For smartphones er der i øjeblikket ikke hardwareunderstøttelse på grund af manglende passende dekodere. Softwaredekodning er mulig, men det vil medføre ekstra batteriforbrug. De første mobile SOC'er med hardwareunderstøttelse af AV1 vil komme i 2020.

Og her sidder læserne og tænker: "Hvis mobiltelefoner ikke understøtter det ordentligt endnu, hvorfor så bruge AV1?"

AV1 er en relativt ny codec, og vi er kun lige begyndt at tilpasse os den. Tænk på denne artikel som en arbejdsfase — "mens du forbereder dig, går folk ind i det". Understøttelse på desktop alene vil allerede fremskynde websider for en del af publikum. Og gamle codecs kan anvendes som fallback, når AV1 ikke understøttes på den målretter enhed. Men efterhånden som brugerne skifter til enheder, der understøtter AV1, vil alt allerede være klar. For at opnå dette skal vi skabe et video-tag, som vist nedenfor, der gør det muligt for browseren at vælge det foretrukne format — AV1 ->> VP9 ->> H.264. Men hvis brugerens enhed eller browser er så gammel, at de slet ikke understøtter video (hvilket er meget usandsynligt med H264), så vil de blot se en GIF.

<video style="display:block; margin: 0 auto;" autoplay loop muted playsinline poster="RollingCredits.jpg">
  <source src="media/RollingCredits.av1.mp4" type="video/mp4">
  <source src="media/RollingCredits.vp9.webm" type="video/webm">
  <source src="media/RollingCredits.x264.mp4" type="video/mp4">
  <img src="media/RollingCredits.gif">
</video>

Oprettelse af AV1

Det er ikke svært at lave video i AV1. Download den nyeste ffmpeg-build til dit system herfra. og og brug kommandoerne nedenfor. Vi bruger 2 gennemgange for at nå den ønskede bitrate. For dette vil vi køre ffmpeg to gange. Første gang gemmer vi resultatet i en ikke-eksisterende fil. Dette vil skabe en log, som vi får brug for til den anden kørsel af ffmpeg.

# Linux or Mac
## Проход 1
ffmpeg -i input.mp4 -c:v libaom-av1 -b:v 200k -filter:v scale=720:-1 -strict experimental -cpu-used 1 -tile-columns 2 -row-mt 1 -threads 8 -pass 1 -f mp4 /dev/null && 
## Проход 2
ffmpeg -i input.mp4 -pix_fmt yuv420p -movflags faststart -c:v libaom-av1 -b:v 200k -filter:v scale=720:-1 -strict experimental -cpu-used 1 -tile-columns 2 -row-mt 1 -threads 8 -pass 2 output.mp4

# Windows
## Проход 1
ffmpeg.exe -i input.mp4 -c:v libaom-av1 -b:v 200k -filter:v scale=720:-1 -strict experimental -cpu-used 1 -tile-columns 2 -row-mt 1 -threads 8 -pass 1 -f mp4 NUL && ^
## Проход 2
ffmpeg.exe -i input.mp4 -pix_fmt yuv420p -movflags faststart -c:v libaom-av1 -b:v 200k -filter:v scale=720:-1 -strict experimental -cpu-used 1 -tile-columns 2 -row-mt 1 -threads 8 -pass 2 output.mp4

Her er en forklaring af indstillingerne:

-i - Indgangsfilen.

-pix_fmt - Den valgte 4:2:0 format for farveinformation i videoen. Der findes mange andre mulige formater, men 4:2:0 er mest kompatibelt.

-c:v - Hvilken codec der skal bruges, i vores tilfælde - AV1.<br />
-b:v – Den gennemsnitlige bitrate, vi ønsker at opnå.

-filter:v scale - ffmpeg's skaleringsfilter bruges til at reducere videoens opløsning. Vi angiver X:-1, hvilket fortæller ffmpeg at reducere bredden til X, mens aspekforholdet bevares.

-strict experimental - Skal angives, da AV1 er en relativt ny codec.

-cpu-used - Dårligt navngivet parameter, der faktisk bruges til at vælge kvalitetsniveauet for videoen. Mulige værdier 0-4. Jo lavere værdi, jo bedre kvalitet og dermed længere tid til kodning.

-tile-columns - For at bruge flere tråde. Angiver til AV1 at opdele videoen i separate søjler, der kan kodes uafhængigt for bedre CPU-udnyttelse.

-row-mt – Ligesom den tidligere parameter, men opdeler også i rækker inden i søjlerne.

-threads - Antallet af tråde.

-pass - Hvilket gennemløb der udføres nu.

-f - Anvendes kun ved første gennemløb. Angiver formatet for outputfilen, dvs. MP4 i vores tilfælde.

-movflags faststart - Aktiverer hurtig start af videoen ved at flytte nogle data til begyndelsen af filen. Dette gør det muligt at starte afspilningen, før filen er helt indlæst.

Oprettelse af GIF

Til at oprette GIF brugte jeg den nedenstående kommando. For at reducere størrelsen skalerede jeg GIF'en til 720px i bredde og 12 fps i stedet for den originale video på 24 fps.

./ffmpeg -i /mnt/c/Users/kasing/Desktop/ToS.mov -ss 00:08:08 -t 12
-filter_complex "[0:v] fps=12,scale=720:-1" -y scene2.gif

Test Results

Det er bedre at se én gang end at læse hundrede gange, ikke? Lad os sikre os, at AV1 er det rigtige valg for vores formål. Jeg tog den gratis video Tears Of Steel, som kan findes her https://mango.blender.org/, og konverterede den ved hjælp af omtrent ens bitrate for kodekerne AV1, VP9, H.264. Resultaterne er nedenfor, så du kan sammenligne dem selv.

Bemærkning 1: Hvis filen nedenfor ikke indlæses, kan det være tid til at opdatere din browser. Jeg ville anbefale en Chromium-baseret browser som Chrome, Vivaldi, Brave eller Opera. Her er den seneste information om AV1-support https://caniuse.com/#feat=av1

Bemærkning 2: For Firefox 66 på Linux skal du aktivere flaget media.av1.enabled til værdien true i about:config

Bemærkning 3: Jeg har besluttet ikke at inkludere almindelige GIF'er nedenfor på grund af deres store størrelse og mængden af data, der kunne være nødvendig for at indlæse denne side! (Hvilket ville være ironisk, da denne side handler om at reducere datamængden på siden :)). Men du kan se de endelige GIF'er her https://github.com/singhkays/its-time-replace-gifs-with-av1-video/blob/master/GIFs

Oversætterens note: Habr tillader ikke at aktivere automatisk afspilning og gentage filen, så kvaliteten kan kun vurderes. Du kan se, hvordan "animerede billeder" vil se ud live i den originale artikel.

Scene 1 @ 200 Kbps

Der er meget bevægelse her, hvilket er særligt følsomt ved lave bitrater. Det er straks tydeligt, hvor dårlig H.264 er ved denne bitrate, kvadratene er tydeligt synlige. VP9 forbedrer situationen lidt, men kvadratene er stadig synlige. AV1 vinder klart og leverer en åbenlyst bedre billede.

H.264

VP9

AV1

Scene 2 @ 200 Kbps

Der er meget gennemskinneligt CGI-indhold her. Resultaterne er ikke så forskellige, som de var sidste gang, men generelt ser AV1 bedre ud.

H.264

VP9

AV1

Scene 3 @ 100 Kbps

I denne scene skruer vi bitraten ned til 100 Kbps, og resultaterne stemmer overens. AV1 holder føringen, selv ved lave bitrater!

H.264

VP9

AV1

Kirsebær på toppen

For at afslutte artiklen med en fornemmelse af den mængde trafik, der er sparet i forhold til GIF — den samlede størrelse af alle de ovenstående videoer… 1.62 MB!! Rigtigt. Hvorfor i alverden 1.708.032 byte! Til sammenligning, her er størrelsen for GIF- og AV1-videoerne for hver af scenerne.

GIF
AV1

Scene 1
11,7 MB
0,33 MB

Scene 2
7,27 MB
0,18 MB

Scene 3
5,62 MB
0,088 MB

Bare fantastisk! Er det ikke?

Bemærk: Filstørrelserne for VP9 og H264 er ikke angivet, da de næsten ikke adskiller sig fra AV1 på grund af brugen af samme bitrate. Det ville være overflødigt at tilføje endnu to kolonner med ens størrelser, kun for at understrege, at disse codecs leverer meget bedre kvalitet end GIF med betydeligt mindre filstørrelser.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster