Nadszedł czas, aby zastąpić GIF-y wideo AV1

Nadszedł czas, aby zastąpić GIF-y wideo AV1

Jest teraz rok 2019 i musimy podjąć decyzję dotyczącą GIF-ów (nie, nie o tę decyzję chodzi! Tu nigdy się nie dogadamy! — chodzi o wymowę w języku angielskim, dla nas to nieaktualne — przyp. tłum.). GIF-y zajmują ogromną ilość miejsca (zazwyczaj kilka megabajtów!), co, jeśli jesteś deweloperem webowym, całkowicie kłóci się z twoimi pragnieniami! Jako deweloper webowy chcesz minimalizować rzeczy, które użytkownicy muszą pobrać, aby strona ładowała się szybko. Z tego samego powodu minimalizujesz JavaScript, optymalizujesz PNG, JPEG, a czasami konwertujesz JPEG do WebP. Ale co zrobić ze starym GIF-em?

Tam, gdzie zmierzamy, GIF-y nie będą potrzebne!

Jeśli twoim celem jest poprawa prędkości ładowania strony, należy pozbyć się GIF-ów! Ale jak wtedy robić animowane obrazki? Odpowiedź — wideo. A w większości przypadków uzyskasz lepszą jakość i oszczędność miejsca o 50-90%! W życiu większość rzeczy ma swoje plusy i minusy. Zastępując GIF-y wideo, rzadko znajdziesz jakiekolwiek minusy.

Niech żyje koniec GIF-ów!

Na szczęście, zastąpienie GIF-ów wideo stało się powszechną praktyką w ostatnich latach, więc wszystkie potrzebne narzędzia są już dostępne. W tym poście nie zamierzam wymyślać koła na nowo, a jedynie nieco poprawić istniejące rozwiązania. Oto w skrócie:

  1. Weź GIF-a i przekształć go w wideo
  2. Skoduj wideo za pomocą H.264 lub VP9, tj. skompresuj je i zapakuj w kontener MP4 lub WebM
  3. Zastąp <img> animowany GIF na film
  4. Włącz automatyczne odtwarzanie bez dźwięku i zapętl, aby uzyskać efekt GIF-a

Google ma dobrą dokumentację opisującą ten proces.

Jest teraz rok 2019

Jest teraz rok 2019. Postęp idzie naprzód, a my musimy za nim podążać. Do tej pory mieliśmy dwa kodeki, które są szeroko wspierane we wszystkich przeglądarkach i narzędziach do kodowania wideo:

  1. H.264 — wprowadzony w 2003 roku i najpowszechniej używany dzisiaj
  2. VP9 — wprowadzony w 2013 roku i osiągający poprawę kompresji o prawie 50% w porównaniu do H.264, chociaż jak piszą tutaj nie wszystko i nie zawsze jest tak różowo

Uwaga: choć standard H.265 — następna wersja H.264 może konkurować z VP9, nie rozważam go ze względu na słabe wsparcie przeglądarek, co zostało pokazane na stronie https://caniuse.com/#feat=hevcKoszty licencjonowania są głównym powodem, dla którego H.265 nie stał się tak powszechny jak H.264, oraz powodem, dla którego konsorcjum Alliance of Open Media pracuje nad kodekiem bez opłat – z AV1.

Pamiętaj, że naszym celem jest zmniejszenie ogromnych plików GIF do możliwie najmniejszego rozmiaru, aby przyspieszyć ładowanie. To byłby dziwny 2019 rok, gdybyśmy nie mieli nowego standardu kompresji wideo. Jest i nazywa się AV1. Z AV1 można osiągnąć około 30% poprawy kompresji w porównaniu do VP9.Cudownie! 🙂

AV1 jest dostępny od 2019 roku!

Na komputerach stacjonarnych

Ostatnio wsparcie dla dekodowania wideo AV1 zostało dodane do wersji desktopowych Google Chrome 70 Mozilla Firefox 65.Obecnie wsparcie w Firefoxie jest niestabilne i może powodować awarie, ale sytuacja powinna poprawić się wraz z dodaniem dekodera dav1d już w Firefoxie 67, (który już wyszedł, a wsparcie się pojawiło. — przyp. tłum.)Szczegóły dotyczące nowej wersji znajdziesz w artykule — wydanie dav1d 0.3.0: jeszcze szybsze!

Na smartfonach

Dla smartfonów wsparcie sprzętowe obecnie nie jest dostępne z powodu braku odpowiednich dekoderów. Można zrobić dekodowanie programowe, co jednak zwiększy zużycie baterii. Pierwsze mobilne SOC z wsparciem dla sprzętowego dekodowania AV1 pojawią się w 2020 roku.

I tutaj czytelnicy artykułu myślą: „więc jeśli na telefonach mobilnych wsparcie jest słabe, czemu mielibyśmy używać AV1?”

AV1 to stosunkowo nowy kodek i jesteśmy na początku jego adaptacji. Myślcie o tym artykule jak o etapie „podczas gdy gotujesz, ludzie się dostosowują”. Wsparcie na komputerach stacjonarnych samo w sobie przyspieszy strony dla części użytkowników. Stare kodeki można użyć jako alternatywny scenariusz, gdy urządzenie docelowe nie obsługuje AV1. Z czasem, gdy użytkownicy przejdą na urządzenia z wsparciem dla AV1, wszystko już będzie gotowe. Aby to osiągnąć, musimy stworzyć tag wideo, jak pokazano poniżej, który pozwoli przeglądarkom wybierać preferowany format — AV1 ->> VP9 ->> H.264. A jeśli użytkownik ma naprawdę stare urządzenie lub przeglądarkę, która w ogóle nie obsługuje wideo (co jest mało prawdopodobne przy H264),to po prostu zobaczy 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>

Tworzenie AV1

Stworzenie wideo w AV1 nie jest trudne. Pobierz najnowszą wersję ffmpeg dla swojego systemu stąd. Użyj poniższych poleceń. Używamy 2 przejść, aby osiągnąć docelową przepływność. Dlatego wykonamy ffmpeg dwa razy. Po raz pierwszy zapiszemy wynik w nieistniejącym pliku. To stworzy dziennik, który będzie potrzebny do drugiego uruchomienia 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

Oto szczegółowe opisy parametrów:

-i - Plik wejściowy.

-pix_fmt - Używany format 4:2:0 do wyboru informacji o kolorze w wideo. Istnieje wiele innych możliwych formatów, ale 4:2:0 jest najbardziej kompatybilny.

-c:v - Jaki kodek użyć, w naszym przypadku - AV1.<br />
-b:v – Średni bitrate, który chcemy osiągnąć.

-filter:v scale - Filtr skali ffmpeg jest używany do zmniejszenia rozdzielczości wideo. Ustawiamy X:-1, co mówi ffmpeg, aby zmniejszył szerokość do X, zachowując proporcje.

-strict experimental - Należy to określić, ponieważ AV1 jest dość nowym kodekiem.

-cpu-used - Źle nazwany parametr, który tak naprawdę jest używany do wyboru poziomu jakości wideo. Możliwe wartości to 0-4. Im mniejsza wartość, tym lepsza jakość, a co za tym idzie, dłuższy czas kodowania.

-tile-columns - Do użycia z wieloma wątkami. Informuje AV1, aby podzielił wideo na oddzielne kolumny, które mogą być kodowane niezależnie dla lepszego wykorzystania CPU.

-row-mt – To samo, co poprzedni parametr, ale dzieli również na wiersze w kolumnach.

-threads - Liczba wątków.

-pass - Która passa jest obecnie wykonywana.

-f - Używane tylko podczas pierwszego przejścia. Określa format pliku wyjściowego, czyli MP4 w naszym przypadku.

-movflags faststart - Włączamy szybki start wideo, przenosząc część danych na początek pliku. To pozwoli rozpocząć odtwarzanie jeszcze przed pełnym załadowaniem pliku.

Tworzenie GIF-u

Aby stworzyć GIF, użyłem poniższego polecenia. Aby zmniejszyć rozmiar, przeskalowałem GIF do 720px szerokości i 12 fps w porównaniu do oryginalnego wideo 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

Wyniki testów

Lepiej raz zobaczyć, niż sto razy przeczytać, prawda? Upewnijmy się, że AV1 to odpowiedni wybór dla naszych potrzeb. Wziąłem darmowe wideo Tears Of Steel, dostępne tutaj https://mango.blender.org/, a następnie przekonwertowałem je, używając zbliżonej przepływności dla kodeków AV1, VP9, H.264. Wyniki poniżej, więc możesz je porównać samodzielnie.

Uwaga 1: Jeśli poniższy plik się nie ładuje, może nadszedł czas na zaktualizowanie przeglądarki. Poleciłbym przeglądarkę opartą na Chromium, na przykład Chrome, Vivaldi, Brave lub Opera. Oto najnowsze informacje o wsparciu AV1 https://caniuse.com/#feat=av1

Uwaga 2: Aby Firefox 66 na Linuxie działał, musisz włączyć flagę media.av1.enabled na wartość true do about:config

Uwaga 3: Zdecydowałem się nie zamieszczać zwykłych GIF-ów poniżej z uwagi na ich dużą wagę i ilość danych, które mogłyby być potrzebne do załadowania tej strony! (Co byłoby ironiczne, skoro ta strona dotyczy redukowania objętości danych na stronie :)). Ale możesz obejrzeć finalne GIF-y tutaj https://github.com/singhkays/its-time-replace-gifs-with-av1-video/blob/master/GIFs

Uwaga tłumacza: Habr nie pozwala na automatyczne odtwarzanie i powtarzanie pliku, więc można ocenić tylko jakość. Możesz zobaczyć, jak będą wyglądać 'animowane obrazy' na żywo w oryginalnym artykule.

Scena 1 @ 200 Kbps

Jest tu dużo ruchu, co jest szczególnie widoczne przy niskich przepływnościach. Od razu widać, jak słaby jest H.264 przy tej przepływności — od razu widoczne są kwadraty. VP9 nieco poprawia sytuację, ale kwadraty są wciąż widoczne. AV1 wyraźnie wygrywa, oferując wyraźnie lepszy obraz.

H.264

VP9

AV1

Scena 2 @ 200 Kbps

Jest tu dużo półprzezroczystych treści CGI. Wyniki już nie różnią się tak bardzo, jak poprzednio, ale ogólnie AV1 wygląda lepiej.

H.264

VP9

AV1

Scena 3 @ 100 Kbps

W tej scenie obniżamy przepływność do 100 Kbps i wyniki to potwierdzają. AV1 utrzymuje przewagę również przy niskich przepływnościach!

H.264

VP9

AV1

Wisienka na torcie

Aby zakończyć artykuł, odczuwając ilość zaoszczędzonego ruchu w porównaniu z GIF-em — łączny rozmiar wszystkich filmów powyżej… 1.62 MB!! Dokładnie. Jakieś przeklęte 1,708,032 bajtów! Dla porównania, oto rozmiar wideo GIF i AV1 dla każdej ze scen

GIF
AV1

Scena 1
11.7 MB
0.33 MB

Scena 2
7.27 MB
0.18 MB

Scena 3
5.62 MB
0.088 MB

Po prostu niesamowicie! Nieprawdaż?

Uwaga: Rozmiary plików VP9 i H264 nie zostały podane, ponieważ praktycznie nie różnią się od AV1 z powodu używania tego samego bitrate'u. Byłoby zbędne dodawanie jeszcze dwóch kolumn z identycznymi rozmiarami, aby podkreślić, że te kodeki oferują znacznie lepszą jakość niż GIF przy znacznie mniejszych rozmiarach plików.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster