Cel

W tej sekcji znajdziesz zalecenia dotyczące ustawień kodowania VP9 podczas kodowania na podstawie plików (tj. nieaktywne).

Te zalecenia zostały opracowane z myślą o tych celach:

  • Równowaga między szybkością kodowania a jakością
  • Minimalna szybkość transmisji bitów umożliwiająca uzyskanie rozsądnej jakości
  • Ustawienia pozwalające na obsługę wielu różnych typów treści

Rekomendacje te nie:

  • Adresowanie kodowania
  • Optymalizuj pod kątem określonych typów treści (np. sporty sportowe
  • Skonfiguruj ustawienia dotyczące konkretnych urządzeń lub sieci

Kodowanie w jednej rozdzielczości

VP9 obsługuje różne rozmiary klatek – od małych rozdzielczości po 4K. Większe rozmiary klatek zapewniają wyższą jakość, ale wymagają większej przepustowości i większej mocy obliczeniowej do dekodowania.

Jeśli tworzysz pojedynczą rozdzielczość, 640 x 480 to bezpieczny wybór przy szerokiej gamie urządzeń internetowych i mobilnych. Te parametry wiersza poleceń FFmpeg pozwalają tworzyć pliki o pojedynczej rozdzielczości z szybkością 750 kb/s.

-vf scale=640x480 -b:v 750k -quality good -speed 0 -crf 33 \
  -c:v libvpx-vp9 -c:a libopus output.webm

Kodowanie w wielu rozdzielczości

Jeśli planujesz kierować reklamy na wiele rozdzielczości lub Twoja sieć dostawy działa w różny sposób, zalecamy utworzenie wielu rozdzielczości. Twój odtwarzacz może potem określić, która rozdzielczość ma być wysyłana do widza.

Kodowania filmów w wielu rozdzielczości są często używane w strumieniowej transmisji strumieniowej z adaptacyjną szybkością transmisji, w której odtwarzacz zmienia rozdzielczość w czasie rzeczywistym z uwzględnieniem przepustowości użytkownika. Na przykład Shaka Player umożliwia odtwarzanie kodów w wielu rozdzielczościach, gdzie każdy kod VP9 znajduje się w innym pliku, a plik manifestu DASH zawiera informacje o każdym z nich.

Więcej informacji o pakowaniu filmów w formatach adaptacyjnych transmisji znajdziesz w artykule Shaka Packager. W tym przewodniku skupimy się na ustawieniach kodowania VP9 w wielu rozdzielczościach.

Wszystkie poniższe ustawienia można stosować do poszczególnych plików w różnych rozdzielczościach. Łącznie zapewniają one kompleksowy zestaw odpowiedni do strumieniowego przesyłania strumieniowego. Pamiętaj, że wersja 640 x 480 ma dwie wersje: jedną o niskiej jakości (LQ) i drugą o średniej jakości (MQ).

Szybkość transmisji bitów

W przypadku kodowania VP9 na potrzeby odtwarzania na żądanie zalecamy tryb ograniczonego dostępu (CQ). W tym trybie możesz określić docelową średnią szybkość transmisji bitów, a jednocześnie kontrolować maksymalną jakość filmu oraz minimalną i maksymalną szybkość transmisji bitów.

Podane poniżej szybkości transmisji bitów są sugerowane jako punkty odniesienia w przypadku dystrybucji w internecie i na urządzeniach mobilnych. Te sugestie minimalizują szybkość transmisji bitów, co pozwala uzyskać jakość wideo odpowiednią do rozpowszechniania w internecie i na urządzeniach mobilnych. traktuj je jako rekomendację dotyczącą szybkości transmisji bitów, a przy tym proponując odpowiednią jakość.

W powyższych przykładach zaleca się, aby minimalna szybkość transmisji bitów wynosiła 50% docelowej szybkości transmisji bitów, a maksymalna – 145% wartości docelowej.

Rozmiar i liczba klatek Szybkość transmisji bitów docelowej (VOD, kb/s) Minimalna szybkość transmisji bitów (50%) Maks. szybkość transmisji bitów (145%)
320 x 240p w 24,25,30 150 75 218
640 x 360p przy 24,25,30 276 138 400
640 x 480p przy 24,25,30 512 (LQ), 750 (MQ) 256 (LQ) 375 (MQ) 742 (LQ) 1088 (MQ)
1280 x 720p przy 24,25,30 1024 512 1485
1280 x 720p przy 50,60 1800 900 2610
1920 x 1080p przy 24,25,30 1800 900 2610
1920 x 1080p przy 50,60 3000 1500 4350
2560 x 1440p przy 24,25,30 6000 3000 8700
2560 x 1440p przy 50,60 9000 4500 13050
3840 x 2160p o 24,25,30 12000 6000 17400
3840 x 2160p przy 50,60 18000 9000 26100

Ilustracja 2a. Zalecane szybkości transmisji VOD

W FFmpeg szybkość transmisji bitów jest sterowana za pomocą tych poleceń:

FFmpeg
-b:v <arg> Ustawia szybkość transmisji bitów (np.500 tys.)
-minrate <arg>
-maxrate <arg>
Ustawia minimalną i maksymalną szybkość transmisji bitów.

Na przykład do kodowania treści o wymiarach 640 x 480 można użyć wiersza poleceń -b:v 750k -minrate 375 -maxrate 1088.

Jakość

W trybie tej jakości ustawiasz też maksymalny poziom jakości. W przypadku kodowania VP9 opartego na plikach zalecamy następujące poziomy jakości:

Wysokość klatki Jakość docelowa (CQ)
240 37
360 36
480 34 (LQ) lub 33 (MQ)
720 32
1080 31
1440 24
2160 15

W FFmpeg jakość jest ustawiana za pomocą polecenia -crf. Aby na przykład ustawić jakość 33, użyj polecenia -crf 33

Kodowanie wielopasmowe i szybkość kodowania

Kodowanie oparte na plikach zapewnia elastyczność w szybkości. Możesz też wykorzystać wiele biletów na ten sam materiał, aby poprawić jakość, i wybrać szybkość dla każdego z nich.

Przy kodowaniu plików VP9 w FFmpeg zaleca się ustawienie parametru -quality na good, a następnie ustawienie szybkości pierwszego i drugiego biletu zgodnie z poniższą tabelą z parametrem -speed. Dzięki temu uda się zachować równowagę między czasem kodowania a jakością danych wyjściowych.

Wysokość klatki Prędkość (pierwszy bilet) Prędkość (druga karta)
240 4 1
360 4 1
480 4 1
720 4 2
1080 4 2
1440 4 2
2160 4 2

Na przykład pierwszy ciąg kodujący karty w FFmpeg może zawierać -quality good -speed 4.

Odstępy w klatce kluczowej

Zalecane jest uwzględnienie maksymalnie 240 klatek wideo pomiędzy klatkami kluczowymi (8 sekund w przypadku treści 30 kl./s). Klatki kluczowe to samowystarczające klatki. Nie wykorzystują żadnych innych klatek, ale zazwyczaj są większe niż inne typy klatek. W przypadku odtwarzania internetowego i mobilnego duże odstępy między klatkami kluczowymi umożliwiają koderowi wybranie najlepszego położenia klatek kluczowych w celu zmaksymalizowania jakości.

W odstępie między klatkami kluczowymi FFmpeg steruje się poleceniem -g, które wskazuje liczbę klatek. W przypadku 240 klatek będzie to -g 240.

Rekomendacje dotyczące układania kafelków i wątków

Kafelki dzieli klatkę na kilka kolumn, co nieznacznie obniża jakość, ale przyspiesza kodowanie. Płytki muszą mieć co najmniej 256 pikseli szerokości, więc obowiązuje ograniczenie liczby kafelków.

W zależności od liczby kafelków i rozdzielczości ramki wyjściowej może się przydać więcej wątków procesora. Ogólnie rzecz biorąc, w przypadku bardzo dużej liczby klatek wyjściowych ich wartość jest ograniczona.

Poniżej znajdziesz zalecane ustawienia układania i układania kafelków w różnych rozdzielczościach.

Rozmiar klatki Liczba kafelków Liczba wątków
320x240 1 (-tile-columns 0) 2
640 x 360 2 (-tile-columns 1) 4
640x480 2 (-tile-columns 1) 4
1280 x 720 4 (-tile-columns 2) 8
1920 x 1080 4 (-tile-columns 2) 8
2560x1440 8 (-tile-columns 3) 16
3840 × 2160 8 (-tile-columns 3) 16

W FFmpeg liczbę kafelków kontroluje się za pomocą parametru -tile-columns i liczby wątków przez -threads. Na przykład kodowanie 640 x 480 używa wiersza poleceń -tile-columns 2 -threads 4.

Wiersze poleceń FFmpeg

Dzięki zebraniu powyższych rekomendacji można użyć do kodowania treści VP9 tych poleceń FFmpeg.

Pamiętaj, że polecenia pierwszego i drugiego biletu są połączone łańcuchami. Argument -y w poleceniu 2 przebiegu odpowiada "Tak" gdy FFmpeg prosi o zastąpienie pliku statystyk pierwszego kroku filmem wyjściowym.

Pamiętaj też, że kodowanie o rozdzielczości 1080p służy do kodowania zasobów o rozdzielczości do 1280 x 720. Źródło 4K służy do wyświetlania większej ilości danych.

320 x 240 (24, 25 lub 30 klatek na sekundę)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \
  -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 2 \
  -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-320x240.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \
  -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 2 \
  -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 1 -y tos-320x240.webm

640 x 360 (24, 25 lub 30 klatek na sekundę)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
  -minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-640x360.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
  -minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-640x360.webm

640 x 480 (Niska jakość, 24, 25 lub 30 klatek na sekundę)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
  -minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-640x360-low.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
  -minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-640x480-low.webm

640 x 480 (średnia jakość, 24, 25 lub 30 klatek na sekundę)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
  -minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-640x360-medium.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
  -minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-640x480-medium.webm

1280 x 720 (24, 25 lub 30 klatek na sekundę)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
  -minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1280x720-24-30fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
  -minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-1280x720-24-30fps.webm

1280 x 720 (50 lub 60 klatek na sekundę)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1280x720-50-60fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4-y tos-1280x720-50-60fps.webm

1920 x 1080 (24, 25 lub 30 klatek na sekundę)

ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1920x1080-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-1920x1080-24-30fps.webm

1920 x 1080 (50 lub 60 klatek na sekundę)

ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
  -minrate 1500k -maxrate 4350k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1920x1080-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
  -minrate 1500k -maxrate 4350k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-1920x1080-50-60fps.webm

2560 x 1440 (24, 25 lub 30 klatek na sekundę)

ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
  -minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-2560x1440-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
  -minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-2560x1440-24-30fps.webm

2560 x 1440 (50 lub 60 klatek na sekundę)

ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
  -minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-2560x1440-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
  -minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-2560x1440-50-60fps.webm

3840 x 2160 (24, 25 lub 30 klatek na sekundę)

ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
  -minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 24 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-3840x2160-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
  -minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 24 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-3840x2160-24-30fps.webm

3840 x 2160 (50 lub 60 klatek na sekundę)

ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
  -minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 24 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-3840x2160-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
  -minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 24 \
  -quality good -speed 4 -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -y tos-3840x2160-50-60fps.webm