Време е да заменим GIF с AV1 видео

Време е да заменим GIF с AV1 видео

Сега е 2019 година и е време да вземем решение относно GIF (не, не става въпрос за това решение! Тук никога няма да се договорим! — тук става дума за произношението на английски, за нас това не е актуално — бел. прев.). GIF файловете заемат огромно количество място (обикновено по няколко мегабайта!), което, ако сте уеб разработчик, напълно противоречи на вашите желания! Като уеб разработчик, вие искате да минимизирате нещата, които потребителите трябва да изтеглят, за да заредите сайта бързо. По същата причина минимизирате JavaScript, оптимизирате PNG, JPEG, а понякога и конвертирате JPEG в WebP. Но какво да правим със стария GIF?

Там, където отиваме, GIF файлове не са под ръка!

Ако вашата цел е да подобрите скоростта на зареждане на сайта, трябва да се избавите от GIF! Но как да правите анимирани картинки? Отговорът е видео. И в повечето случаи, ще получите по-добро качество и спестяване на пространство от 50-90%! В живота повечето неща имат своите плюсове и минуси. Когато заменяте GIF с видео, рядко ще намерите минуси.

Долу с всички GIF!

За щастие, заменянето на GIF с видео е обичайна практика през последните години, така че всички необходими инструменти вече са налични. В този пост, няма да откривам отново колелото, а просто ще подобря съществуващите решения. И така, ето какво трябва да направите:

  1. Вземете GIF и го конвертирайте в видео
  2. Кодирайте видеото с H.264 или VP9, т.е. компресирайте го и го опаковайте в MP4 или WebM контейнер
  3. Заменете <img> с анимирания GIF на с клип
  4. Активирайте автоматичното възпроизвеждане без звук и зацикляйте, за да постигнете ефекта на GIF

Google има добра документация, описваща процеса.

Сега е 2019 година

Сега е 2019 година. Напредъкът върви напред и ние трябва да не изостава. До сега имаме два кодека, които широко се поддържат от всички браузъри и инструменти за кодиране на видео:

  1. H.264 — появил се през 2003 и най-широко използван днес
  2. VP9 — появил се през 2013 и постигнал почти 50% подобрение в компресията в сравнение с H.264, макар че както се пише тук не всичко и не винаги е толкова розово

Бележка: въпреки че стандартът H.265 е следващата версия на H.264 и може да се конкурира с VP9, не го разглеждам поради слабата поддръжка от браузърите, както е показано на страницата. https://caniuse.com/#feat=hevc. Разходите за лицензиране – главната причина, поради която Н.265 не стана толкова разпространен, колкото H.264 и поради която консорциумът Alliance of Open Media работи с кодека без такси – с AV1.

Не забравяйте, че нашата цел е да намалим огромните GIF файлове до най-малкия възможен размер, за да ускорим зареждането. Би било странна 2019 година, ако нямаше нов стандарт за компресия на видео. Но той съществува и се нарича AV1. С AV1 можем да постигнем около 30% подобрение в компресията в сравнение с VP9. Чудесно! 🙂

AV1 е на разположение от 2019 година!

На компютрите

Наскоро поддръжката за декодиране на AV1 видео беше добавена в десктоп версиите на Google Chrome 70 и Mozilla Firefox 65. В момента поддръжката в Firefox е нестабилна и може да причинява сривове, но нещата би трябвало да се променят с добавянето на декодера dav1d вече в Firefox 67 (вече е наличен, а поддръжката е активна. — забележка на преводача)За подробности относно новата версия прочетете – dav1d 0.3.0 рилийз: още по-бърз!

На смартфоните

За смартфони апаратната поддръжка в момента липсва поради отсъствието на съответни декодери. Може да се осъществи софтуерно декодиране, но това ще увеличи разхода на батерията. Първите мобилни SOC с поддръжка за хардуерно декодиране на AV1 ще се появят през 2020 година.

И тук читателите на статията си казват: „Така че, ако мобилните устройства все още не поддържат, защо да използваме AV1?“

AV1 е сравнително нов кодек, и ние сме в самото начало на неговата адаптация. Мислете за тази статия като за етап „докато готвите, народът също ще дойде“. Поддръжката на десктопите сама по себе си вече ще ускори сайтовете за част от аудиторията. А старите кодеци могат да се използват като резервна опция, когато на целевото устройство AV1 не се поддържа. Но с преминаването на потребителите към устройства с поддръжка на AV1, всичко ще е готово. За да постигнем това, ни трябва видео таг, както е показано по-долу, който позволява на браузъра да избира предпочитания формат – AV1 ->> VP9 ->> H.264. А ако потребителят разполага с много старо устройство или браузър, който изобщо не поддържа видео (което е малко вероятно с H264), той просто ще види 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>

Създаване на AV1

Създаването на видео в AV1 не е трудно. Свалете последната версия на ffmpeg за вашата система оттук. и използвайте долу посочените команди. Използваме 2 прохода, за да постигнем целевия битрейт. За целта ще стартираме ffmpeg два пъти. Първият път записваме резултата в несъществуващ файл. Това ще създаде журнал, който ще е нужен за второто стартиране на 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

Ето разшифровка на параметрите:

-i - Входен файл.

-pix_fmt - Използваният формат 4:2:0 за избор на информация за цветност в видеото. Има много други възможни формати, но 4:2:0 е най-съвместим.

-c:v - Кой кодек да се използва, в нашия случай - AV1.<br />
-b:v – Средният битрейт, който искаме да постигнем.

-filter:v scale - Филтърът за мащабиране ffmpeg се използва за намаляване на разрешението на видеото. Настройваме X:-1, което казва на ffmpeg да намали ширината до X, запазвайки съотношението на страните.

-strict experimental - Трябва да се укаже, тъй като AV1 е доста нов кодек.

-cpu-used - Ужасно наименуван параметър, който всъщност се използва за избор на ниво на качество на видеото. Възможните стойности са 0-4. Колкото по-малко е значението, толкова по-добро е качеството и съответно повече време отнема кодиране.

-tile-columns - За използване на няколко нишки. Казва на AV1 да раздели видеото на отделни колони, които могат да бъдат кодирани независимо за по-добро използване на процесора.

-row-mt – Същото като предишния параметър, но също така разделя на редове вътре в колоните.

-threads - Брой на нишките.

-pass - Кой проход изпълняваме в момента.

-f - Използва се само при първия проход. Указва формата на изходния файл, т.е. MP4 в нашия случай.

-movflags faststart - Включваме бърз старт на видеото, преместваме част от данните в началото на файла. Това ще позволи възпроизвеждане преди пълно зареждане на файла.

Създаване на GIF

За да създам GIF, използвах командата по-долу. За да намаля размера, мащабирах GIF до 720px ширина и 12 fps вместо оригиналното видео с 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

Резултати от тестовете

По-добре е веднъж да видиш, отколкото сто пъти да прочетеш, нали? Нека се уверим, че AV1 е правилният избор за нашите цели. Взех безплатното видео Tears Of Steel, налично тук https://mango.blender.org/, и го конвертирах, използвайки приблизително еднакъв битрейт за кодеците AV1, VP9, H.264. Резултатите са долу, за да можете да ги сравните сами.

Забележка 1: Ако долния файл не се зарежда, може би е време да обновите браузъра си. Аз бих препоръчал браузер на основата на Chromium, например, Chrome, Vivaldi, Brave или Opera. Ето последната информация относно поддръжката на AV1 https://caniuse.com/#feat=av1

Забележка 2: За Firefox 66 в Linux, трябва да активирате флага media.av1.enabled на стойността истинно в about:config

Забележка 3: Реших да не включвам обикновените GIF-ове по-долу поради голямото им размер и обема на данни, който би могъл да е нужен за зареждането на тази страница! (Какво би било иронично, защото тази страница е за намаляване на обема на данни на страницата :)). Но можете да видите завършените GIF-ове тук https://github.com/singhkays/its-time-replace-gifs-with-av1-video/blob/master/GIFs

Забележка на преводача: Хабр не позволява автоматично възпроизвеждане и циклично възпроизвеждане на файла, така че ще можем да оценим само качеството. Можете да видите как ще изглеждат "анимираните картинки" на живо в оригиналната статия,.

Сцена 1 @ 200 Kbps

Тук има много движение, което е особено чувствително при ниски битрейти. Веднага става ясно колко лош е H.264 на този битрейт и квадратите веднага са видими. VP9 леко подобрява ситуацията, но квадратите все още са видими. AV1 очевидно печели, показвайки явно по-добра картина.

H.264

VP9

AV1

Сцена 2 @ 200 Kbps

Тук има много полупрозрачно CGI съдържание. Резултатите вече не се различават толкова, колкото преди, но като цяло AV1 изглежда по-добре.

H.264

VP9

AV1

Сцена 3 @ 100 Kbps

В тази сцена намаляваме битрейта до 100 Kbps и резултатите съответстват. AV1 запазва лидерството си и при ниски битрейти!

H.264

VP9

AV1

Вишенката на тортата

За да завършим статията, усетете количеството спестени данни в сравнение с GIF - общият размер на всички видеа е над... 1.62 MB!! Правилно. Някакви проклети 1,708,032 байта! За сравнение, ето размерите на видео GIF и AV1 за всяка от сцените

GIF
AV1

Сцена 1
11.7 MB
0.33 MB

Сцена 2
7.27 MB
0.18 MB

Сцена 3
5.62 MB
0.088 MB

Просто невероятно! Нали?

Бележка: Размерите на файловете VP9 и H264 не са посочени, тъй като практически не се различават от AV1 заради използването на същия битрейт. Би било излишно да се добавят още два стълбца с идентични размери, само за да подчертаем, че тези кодеци предоставят много по-добро качество от GIF при значително по-малки размери на файловете.

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster