Zalecane ustawienia dla VOD
Cel
W tej sekcji znajdziesz rekomendacje dotyczące ustawień kodowania VP9 podczas kodowania plików (czyli nie na żywo).
Te rekomendacje są przeznaczone do osiągania tych celów:
- Równowaga między jakością a szybkością kodowania
- Minimalna szybkość transmisji bitów, która zapewnia przyzwoitą jakość
- Ustawienia obsługujące szeroki zakres typów treści
Te rekomendacje:
- Adres kodowania na żywo
- Optymalizacja pod kątem określonych typów treści (np. dynamicznych nagrań sportowych)
- Konfigurowanie ustawień pod kątem konkretnych wymagań urządzenia lub sieci
Kodowanie w jednej rozdzielczości
Kodek 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 film w jednej rozdzielczości, 640x480 to bezpieczny wybór, który będzie dobrze wyglądać na wielu urządzeniach internetowych i mobilnych. Te parametry wiersza poleceń FFmpeg umożliwiają utworzenie pliku o jednej rozdzielczości przy szybkości transmisji 750 kbps.
-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ściach
Jeśli planujesz kierowanie na wiele rozdzielczości lub Twoja sieć dostarczania ma różną przepustowość, zalecamy utworzenie wielu rozdzielczości. Odtwarzacz może wtedy kontrolować, która rozdzielczość jest wysyłana do widza.
Kodowanie wideo w wielu rozdzielczościach jest często używane w strumieniowaniu z adaptacyjną szybkością transmisji, gdzie odtwarzacz wideo przełącza się między rozdzielczościami w czasie rzeczywistym na podstawie przepustowości użytkownika. Na przykład Shaka Player umożliwia odtwarzanie kodowań o różnych rozdzielczościach, w których każde kodowanie VP9 znajduje się w osobnym pliku, a manifest DASH zawiera informacje o każdym kodowaniu.
Więcej informacji o pakowaniu filmów w formatach strumieniowania adaptacyjnego znajdziesz w Shaka Packager. W tym przewodniku skupimy się na ustawieniach kodowania VP9 w przypadku różnych rozdzielczości.
Zalecane ustawienia
Wszystkie poniższe ustawienia można stosować do poszczególnych plików w różnych rozdzielczościach. W połączeniu zapewniają one kompleksowy zestaw odpowiedni do strumieniowania adaptacyjnego. Wersja 640x480 ma 2 warianty: jeden o niskiej jakości (LQ) i drugi o średniej jakości (MQ).
Szybkość transmisji bitów
Tryb ograniczonej jakości (CQ) jest zalecany podczas kodowania plików VP9 do oglądania na żądanie. Ten tryb kodowania umożliwia określenie docelowej średniej szybkości transmisji bitów przy jednoczesnej kontroli maksymalnej jakości filmu oraz minimalnej i maksymalnej szybkości transmisji bitów.
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ść.
W przypadku powyższych przykładów zalecamy ustawienie minimalnej szybkości transmisji bitów na poziomie 50% docelowej szybkości transmisji bitów, a maksymalnej na poziomie 145% docelowej szybkości transmisji bitów.
Rozmiar klatki/liczba klatek | Docelowa szybkość transmisji (VOD, kb/s) | Minimalna szybkość transmisji bitów (50%) | Maksymalna szybkość transmisji bitów (145%) |
---|---|---|---|
320x240p przy 24,25,30 kl./s | 150 | 75 | 218 |
640x360p przy 24,25,30 kl./s | 276 | 138 | 400 |
640x480p przy 24,25,30 kl./s | 512 (LQ), 750 (MQ) | 256 (LQ) 375 (MQ) | 742 (LQ) 1088 (MQ) |
1280x720p przy 24,25,30 kl./s | 1024 | 512 | 1485 |
1280x720p przy 50,60 kl./s | 1800 | 900 | 2610 |
1920 x 1080p przy 24,25,30 kl./s | 1800 | 900 | 2610 |
1920 x 1080p przy 50,60 kl./s | 3000 | 1500 | 4350 |
2560x1440p przy 24,25,30 kl./s | 6000 | 3000 | 8700 |
2560x1440p przy 50,60 kl./s | 9000 | 4500 | 13050 |
3840x2160p @ 24,25,30 | 12000 | 6000 | 17400 |
3840x2160p @ 50,60 | 18000 | 9000 | 26100 |
Ilustracja 2a. Zalecane szybkości transmisji VOD
W FFmpeg szybkość transmisji jest kontrolowana 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 podczas kodowania treści o rozdzielczości 640x480 możesz użyć wiersza poleceń -b:v 750k -minrate 375 -maxrate 1088
.
Jakość
W trybie CQ ustawisz też maksymalny poziom jakości. W przypadku kodowania VP9 opartego na plikach zalecane są te poziomy jakości:
Wysokość ramy | Jakość docelowa (CQ) |
---|---|
240 | 37 |
360 | 36 |
480 | 34 (LQ) lub 33 (MQ) |
720 | 32 |
1080 | 31 |
1440 | 24 |
2160 | 15 |
W FFmpeg jakość ustawia się za pomocą polecenia -crf
. Aby na przykład ustawić jakość na 33, użyj polecenia -crf 33
Kodowanie wieloprzebiegowe i szybkość kodowania
Kodowanie oparte na plikach zapewnia elastyczność w zakresie szybkości. Możesz też wykonać kilka przejść na tym samym materiale, aby zwiększyć jakość, i wybrać szybkość dla każdego z nich.
Podczas kodowania plików VP9 w FFmpeg zalecamy ustawienie parametru -quality
na good
, a następnie ustawienie szybkości pierwszego i drugiego przebiegu zgodnie z tabelą poniżej za pomocą parametru -speed
. Zapewnia to dobrą równowagę między czasem kodowania a jakością danych wyjściowych.
Wysokość ramy | Szybkość (pierwsze przejście) | Szybkość (drugie przejście) |
---|---|---|
240 | 4 | 1 |
360 | 4 | 1 |
480 | 4 | 1 |
720 | 4 | 2 |
1080 | 4 | 2 |
1440 | 4 | 2 |
2160 | 4 | 2 |
Na przykład ciąg kodowania pierwszego przebiegu w FFmpeg może zawierać
-quality good -speed 4
.
Odstępy między klatkami kluczowymi
Zalecamy, aby między klatkami kluczowymi było maksymalnie 240 klatek wideo (8 sekund w przypadku treści o częstotliwości 30 klatek na sekundę). Klatki kluczowe to klatki wideo, które są samowystarczalne. Nie wymagają renderowania innych klatek, ale zwykle są większe niż inne typy klatek. W przypadku odtwarzania w internecie i na urządzeniach mobilnych duże odstępy między klatkami kluczowymi pozwalają koderowi wybrać najlepsze umiejscowienie klatek kluczowych, aby zmaksymalizować jakość.
W FFmpeg odstępy między klatkami kluczowymi są kontrolowane za pomocą polecenia -g
, które określa liczbę klatek. W przypadku 240 klatek będzie to -g 240
.
Zalecenia dotyczące dzielenia na kafelki i wątków
Dzielenie na kafelki dzieli klatkę wideo na kilka kolumn, co nieznacznie obniża jakość, ale przyspiesza kodowanie. Kafelki muszą mieć co najmniej 256 pikseli szerokości, więc liczba kafelków, których można użyć, jest ograniczona.
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 małego rozmiaru klatki wyjściowej używanie wielu wątków ma ograniczoną wartość.
W przypadku różnych rozdzielczości zalecamy te ustawienia dzielenia na kafelki i wątkowania.
Rozmiar ramy | Liczba kolumn kafelków | Liczba wątków |
---|---|---|
320x240 | 1 (-tile-columns 0 ) |
1 |
640 x 360 | 2 (-tile-columns 1 ) |
2 |
640x480 | 2 (-tile-columns 1 ) |
2 |
1280 x 720 | 4 (-tile-columns 2 ) |
4 |
1920 x 1080 | 4 (-tile-columns 2 ) |
4 |
2560x1440 | 8 (-tile-columns 3 ) |
8 |
3840 x 2160 | 8 (-tile-columns 3 ) |
8 |
W FFmpeg liczba kafelków jest kontrolowana przez parametr -tile-columns
, a liczba wątków przez -threads
. Na przykład kodowanie 640x480 będzie używać wiersza poleceń -tile-columns 1 -threads 2
.
Wiersze poleceń FFmpeg
Łącząc powyższe rekomendacje, do kodowania treści VP9 można użyć tych poleceń FFmpeg:
Pamiętaj, że polecenia pierwszego i drugiego przebiegu są połączone. Argument -y
w poleceniu drugiego przebiegu odpowiada „Yes” (Tak), gdy FFmpeg pyta, czy zastąpić plik statystyk pierwszego przebiegu filmem wyjściowym.
Pamiętaj też, że w przypadku kodowania z docelową rozdzielczością wyjściową do 1280 x 720 jest używane źródło 1080p. W przypadku większych danych wyjściowych używane jest źródło 4K.
320x240 (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 1 \ -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 1 \ -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \ -pass 2 -speed 1 -y tos-320x240.webm
- Plik wejściowy: tears_of_steel_1080p.webm (1920x800, 544.88 MB)
- Plik wyjściowy: tos-320x240.webm (320x240, 21,73 MB)
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 2 \
-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 2 \
-quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 1 -y tos-640x360.webm
- Plik wejściowy: tears_of_steel_1080p.webm (1920x800, 544.88 MB)
- Plik wyjściowy: tos-640x360.webm (640x360, 31,53 MB)
640x480 (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 2 \
-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 2 \
-quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 1 -y tos-640x480-low.webm
- Plik wejściowy: tears_of_steel_1080p.webm (1920x800, 544.88 MB)
- Plik wyjściowy: tos-640x480-low.webm (640x480, 51,18 MB)
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 2 \
-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 2 \
-quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 1 -y tos-640x480-medium.webm
- Plik wejściowy: tears_of_steel_1080p.webm (1920x800, 544.88 MB)
- Plik wyjściowy: tos-640x480-medium.webm (640x480, 69,27 MB)
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 4 \
-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 4 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-1280x720-24-30fps.webm
- Plik wejściowy: tears_of_steel_1080p.webm (1920x800, 544.88 MB)
- Plik wyjściowy: tos-1280x720-24-30fps.webm (1280x720, 98,2 MB)
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 4 \
-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 4 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2-y tos-1280x720-50-60fps.webm
- Plik wejściowy: tears_of_steel_1080p.webm (1920x800, 544.88 MB)
- Plik wyjściowy: tos-1280x720-50-60fps.webm (1280x720, 157,1 MB)
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 4 \
-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 4 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-1920x1080-24-30fps.webm
- Plik wejściowy: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- Plik wyjściowy: tos-1920x1080-24-30fps.webm (1920x1080, 151,51 MB)
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 4 \
-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 4 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-1920x1080-50-60fps.webm
- Plik wejściowy: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- Plik wyjściowy: tos-1920x1080-50-60fps.webm (1920x1080, 238,18 MB)
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 8 \
-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 8 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-2560x1440-24-30fps.webm
- Plik wejściowy: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- Plik wyjściowy: tos-2560x1440-24-30fps.webm 2560x1440, 533,54 MB)
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 8 \
-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 8 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-2560x1440-50-60fps.webm
- Plik wejściowy: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- Plik wyjściowy: tos-2560x1440-50-60fps.webm 2560x1440, 664,04 MB)
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 8 \
-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 8 \
-quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-3840x2160-24-30fps.webm
- Plik wejściowy: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- Plik wyjściowy: tos-3840x2160-24-30fps.webm 3840x2160, 1,03 GB)
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 8 \
-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 8 \
-quality good -speed 2 -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -y tos-3840x2160-50-60fps.webm
- Plik wejściowy: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- Plik wyjściowy: tos-3840x2160-50-60fps.webm 3840x2160, 1,56 GB)