W tej sekcji znajdziesz rekomendacje dotyczące kodowania VP9 w przypadku różnych popularnych profili:

  • Wysoce zoptymalizowane filmy na potrzeby internetu i urządzeń mobilnych (VOD)
  • Dystrybucja treści premium (VOD)
  • Sport, animacje, treści 10-bitowe (VOD)
  • kodowanie transmisji na żywo.
  • WebRTC

Wprowadzenie

Podczas kodowania filmu należy wziąć pod uwagę kilka kwestii:

  • Czy tworzysz jedną wersję multimediów, czy wiele wersji o różnych szybkościach transmisji bitów i rozdzielczościach?
  • Czy tworzysz transmisję wideo na żywo czy pliki wideo na żądanie?
  • Jakiego rodzaju media kodujesz – czy zawierają dużo ruchu? Szczegóły? Animacja?
  • Czy kodujesz treści pod kątem maksymalnej jakości (np. treści premium) czy szybkości (np. konferencje internetowe)?

Ta sekcja zaczyna się od ustawień podstawowego pliku wideo na żądanie, a następnie zawiera rekomendacje dotyczące wszystkich tych pytań.

Ustawienia podstawowe

Szybkość transmisji bitów kodowania

Podane niżej szybkości transmisji bitów są sugerowane jako wartości podstawowe w przypadku dystrybucji w internecie i na urządzeniach mobilnych. Te sugestie minimalizują szybkość transmisji, zachowując jakość wideo odpowiednią do dystrybucji w internecie i na urządzeniach mobilnych. Można je traktować jako rekomendację „niskiej” szybkości transmisji, która nadal zapewnia rozsądną jakość.

Sugerowane docelowe szybkości transmisji

Rozmiar/liczba klatek Średnia szybkość transmisji bitów (VOD, kb/s) Śr. szybkość transmisji bitów (na żywo, kb/s)
320x240p przy 24,25,30 kl./s 150 250
640x360p przy 24,25,30 kl./s 276 386
640x480p przy 24,25,30 kl./s 512 (LQ), 750 (MQ) 720 (LQ), 1024 (MQ)
1280x720p przy 24,25,30 kl./s 1024 1440
1280x720p przy 50,60 kl./s 1800 2500
1920 x 1080p przy 24,25,30 kl./s 1800 2500
1920 x 1080p przy 50,60 kl./s 3000 4200
2560x1440p przy 24,25,30 kl./s 6000 8400
2560x1440p przy 50,60 kl./s 9000 12600
3840x2160p @ 24,25,30 12000 16800
3840x2160p @ 50,60 18000 25200

Ilustracja 2a. Docelowe szybkości transmisji

Ustawienia kodowania VOD

Ustawienia większości typów treści

W przypadku większości typów treści zalecamy korzystanie z trybu ograniczonej jakości (CQ) z limitami przepływności. Większość filmów zawiera mieszankę scen z dużą ilością ruchu (np. sekwencje akcji) i scen z mniejszą liczbą szczegółów (np. rozmowy). Tryb CQ pozwala koderowi zachować rozsądną jakość podczas dłuższych, łatwiejszych scen (bez marnowania bitów), a jednocześnie przydzielać więcej bitów do trudnych sekwencji.

Zalecamy też dopuszczenie zakresu szybkości transmisji bitów od 50% do 150% wartości docelowej, używając wartości jakości wskazanych na wykresie poniżej. Ten tryb wymaga kodowania dwuprzebiegowego. W przypadku rozdzielczości HD i wyższych zalecamy używanie szybszych ustawień, jak wskazano poniżej.

Ustawienia kodera w przypadku kodowania CQ

Wysokość ramy Jakość docelowa (CQ) Tryb kodowania
240 37 TWO_PASS_MEDIUM
360 36 TWO_PASS_MEDIUM
480 34 (niska jakość) lub 33 (średnia jakość) TWO_PASS_MEDIUM
720 32 TWO_PASS_FAST
1080 31 TWO_PASS_FAST
1440 24 TWO_PASS_FAST
2160 15 TWO_PASS_FAST

Ilustracja 2b. Zalecane ustawienia CQ

Zalecamy też 240 klatek wideo między klatkami kluczowymi (w przypadku treści o częstotliwości 30 klatek na sekundę daje to 8 sekund). Klatki kluczowe to klatki wideo, które są samowystarczalne. Nie zależą od innych klatek podczas renderowania (szczegółowe wyjaśnienie znajdziesz w sekcji Struktura GOP). W przypadku odtwarzania w internecie i na urządzeniach mobilnych dopuszczamy duże odstępy między klatkami kluczowymi, ponieważ pozwala to koderowi wybrać „najlepsze” umiejscowienie klatek kluczowych w celu zmaksymalizowania jakości.

Przykładowe parametry wiersza poleceń: film o rozdzielczości 640x360

Z powyższych informacji wynika, że w przypadku filmów w rozdzielczości 360p zalecane są te ustawienia:

  1. poziom CQ wynoszący 36 (patrz rysunek 2b),
  2. Docelowa szybkość transmisji bitów: 276 kb/s (patrz rysunek 2a)
  3. Minimalna dozwolona szybkość transmisji bitów to 138 kb/s (50% wartości docelowej).
  4. Maksymalna dozwolona szybkość transmisji bitów to 414 kb/s (150% wartości docelowej).
  5. Maksymalny odstęp między klatkami kluczowymi to 240 sekund.
  6. Dwuprzebiegowy profil „Średni”

Daje to te parametry wiersza poleceń dla bibliotek libvpx i FFmpeg:

libvpx

--end-usage=cq --cq-level=36 --target-bitrate=276 --minsection-pct=50 \
  --maxsection-pct=150 --kf-max-dist=240 --passes=2 --good --cpu-used=2

FFmpeg

-crf 36 -b:v 276k -minrate 138k -maxrate 414k -g 240 -good -speed 2

Ustawienia treści premium

W powyższych przykładach użyliśmy dość szybkich ustawień kodowania, aby wydajnie tworzyć strumienie wideo. W przypadku niektórych treści (np. filmów premium) warto jednak poświęcić więcej czasu na kodowanie, aby uzyskać wyższą jakość.

W przypadku treści premium zalecamy te same ustawienia co powyżej, ale z innymi gotowymi ustawieniami, które nakazują koderowi poświęcić więcej czasu na optymalizację pod kątem jakości:

Tryby kodowania treści premium i parametry wiersza poleceń

Wysokość ramy Tryb kodowania libvpx FFmpeg
240 TWO_PASS_VERY_SLOW --good --cpu-used 0 -good -speed 0
360 TWO_PASS_VERY_SLOW --good --cpu-used 0 -good -speed 0
480 TWO_PASS_VERY_SLOW --good --cpu-used 0 -good -speed 0
720 TWO_PASS_SLOW --good --cpu-used 1 -good -speed 1
1080 TWO_PASS_MEDIUM --good --cpu-used 2 -good -speed 2
1440 TWO_PASS_MEDIUM --good --cpu-used 2 -good -speed 2
2160 TWO_PASS_MEDIUM --good --cpu-used 2 -good -speed 2

Ilustracja 2c. Tryby kodowania treści premium

Ustawienia treści sportowych i treści z dużą ilością ruchu

W przypadku treści sportowych zalecamy kodowanie VBR. Sporty charakteryzują się dość stałym poziomem ruchu i złożoności, a użycie VBR zapewnia wyższą jakość w okresach mniejszego ruchu niż kodowanie QP.

W przypadku wiersza poleceń główna różnica między trybem QP a VBR polega na tym, że nie określasz poziomu CQ. W przeciwnym razie zalecane ustawienia są takie same.

Przykładowe parametry wiersza poleceń VBR: film o rozdzielczości 640x360

libvpx

--end-usage=vbr --target-bitrate=276 --minsection-pct=50 --maxsection-pct=150 \
  --kf-max-dist=240 --passes=2 --good --cpu-used=2

FFmpeg

-b:v 276k -minrate 138k -maxrate 414k -g 240 -good -speed 2

Ustawienia animacji i gier

Ustawienia dotyczące treści z szumem lub niskiej jakości

W przypadku treści z szumami zalecamy zwiększenie liczby i siły klatek alt-ref. Alternatywne klatki referencyjne to „niewidoczne” klatki, które nigdy nie są wyświetlane użytkownikowi, ale są używane jako odniesienie podczas tworzenia klatek końcowych (więcej informacji znajdziesz tutaj).

Aby poinstruować VP9, aby używał więcej klatek alt-ref, zalecamy te parametry:

libvpx

--auto-alt-ref=1 --lag-in-frames-16 --arnr-maxframes=5 --arnr-strength=3

FFmpeg

Kodowanie 10-bitowe/HDR

W przypadku kodowania 10-bitowego należy użyć profilu VP9 2. Kodowanie 10-bitowe nie wymaga więcej bitów, więc pozostałe parametry są takie same:

libvpx

--profile=2

FFmpeg

-profile 2

Ustawienia kodowania transmisji na żywo

Transmisja na żywo

Kodowanie na żywo jest zwykle wykonywane jako CBR, co ogranicza możliwość maksymalizacji jakości przez koder. Z tego powodu będziemy używać wyższych szybkości transmisji bitów, jak pokazano na rysunku 2a.

W przypadku kodowania na żywo chcemy też zmaksymalizować liczbę wątków. Aby to zrobić:

  1. umożliwienie kodekowi VP9 podzielenia filmu na kolumny (które muszą mieć co najmniej 256 pikseli szerokości i muszą być potęgą liczby 2);
  2. Wskazuje, że VP9 ma używać większej mocy obliczeniowej procesora. W tabeli poniżej znajdziesz rekomendacje dotyczące poszczególnych rozdzielczości.

Zalecenia dotyczące dzielenia na kafelki i wątków

Ustawienia kodera w przypadku kodowania CQ
Rozmiar ramy Liczba kolumn kafelków Liczba wątków
320x240 1 2
640 x 360 2 4
640x480 2 4
1280 x 720 4 8
1920 x 1080 4 8
2560x1440 8 16
3840 x 2160 8 16

Rysunek 2d. Zalecane kafelkowanie i wątki w przypadku kodowania na żywo

Kodowanie na żywo ustawi też termin na „czas rzeczywisty”, aby zapewnić wydajność, i zadecyduje, że alternatywne klatki odniesienia nie będą uwzględniać przyszłości (co wprowadziłoby opóźnienie):

Na tej podstawie rekomendacje dotyczące transmisji na żywo w jakości 360p są następujące:

  1. CBR, docelowa szybkość transmisji bitów 386 kb/s (patrz rysunek 2a)
  2. 2 kolumny kafelków (patrz rysunek 2d)
  3. 4 wątki (patrz rysunek 2d).
  4. Wyniki w czasie rzeczywistym
  5. Brak opóźnienia z powodu alternatywnych klatek (brak opóźnienia klatek)

Daje to te parametry wiersza poleceń dla bibliotek libvpx i FFmpeg:

libvpx

--end-usage=cbr --target-bitrate=386 --cpu-used=4 --tile-columns=2 --rt --lag-in-frames=0

FFmpeg

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -r 29.97 -b:v 386k \
  -minrate 386k -maxrate 386k -c:v libvpx-vp9 -c:a libopus output.webm

Kodowanie VP9 na żywo w przypadku DASH/YouTube

Kodowanie WebRTC