Szczegółowe informacje o trybach szybkości transmisji VP9
Wprowadzenie
Na stronach Podstawowe kodowanie podajemy ogólne informacje o trybach szybkości transmisji, ale dotyczą one tylko trybu CQ (Constrained Quality).
W tym dokumencie opisujemy inne praktyczne sposoby dostosowywania szybkości transmisji VP9 w celu optymalizacji pod kątem różnych scenariuszy. W przykładach poniżej użyto FFmpeg.
Kompresja
Technologie kompresji wideo, takie jak VP9, mają na celu zmniejszenie ilości danych potrzebnych do przekazania użytkownikom zrozumiałego obrazu i wrażenia ruchu.
Jedną z głównych technik stosowanych w tym celu jest kwantyzacja. Kwantyzator matematycznie upraszcza różne zdigitalizowane elementy obrazu. Może na przykład zmniejszyć zakres używanych kolorów, a także wykonywać na danych funkcje matematyczne, aby „wygładzić” odczuwalny brak wysokiej rozdzielczości w zmniejszonym zakresie kolorów. Jest wiele takich funkcji.
Kwantyzacja (lub „Q”) jest dobrze opisana w artykule w Wikipedii.
W VP9 kwantyzacja jest wykonywana na współczynnikach transformacji. Dzięki temu zmniejsza się wymagana szybkość transmisji, aby zachować postrzeganą jakość, poprzez dodanie do kodowania.
Im większa jest kwantyzacja (wyższa wartość Q), tym więcej szczegółów jest traconych i tym niższa jest jakość, ale do przechowywania klatki potrzeba mniej danych. W większości przypadków koder VP9 osiąga docelową szybkość transmisji, zmieniając wartość Q w czasie, w zależności od złożoności każdej klatki.
Optymalizacja pod kątem przypadku użycia
Aby umożliwić użytkownikowi dostosowanie kompresji VP9 do jego konkretnych potrzeb, można w momencie początkowej kompresji dostosować równowagę między jakością a szybkością transmisji za pomocą kilku interfejsów programowania.
Koder ma przesuwny kompromis między szybkością, jakością i szybkością transmisji.
Jeśli użytkownikowi zależy na jakości, musi przygotować się na dłuższy czas kodowania lub zapewnić szybsze i większe zasoby przetwarzania.
Jeśli użytkownik chce, aby wyjściowy plik zakodowany w VP9 był mały i można go było szybko dostarczyć, musi skrócić czas, w którym kwantyzator może przetwarzać obraz. Spowoduje to zmniejszenie szczegółowości, z jaką kwantyzator może pracować.
Jeśli użytkownikowi zależy wyłącznie na szybkości dostarczania (np. w przypadku transmisji na żywo lub dwukierunkowej wideokonferencji), kwantyzacja może być całkowicie podporządkowana ograniczeniom dotyczącym szybkości, z jaką użyteczne bajty danych mogą być przesyłane przez sieć (czyli „szybkości transmisji”).
Właściwy wybór będzie w dużej mierze zależeć od konkretnego przypadku użycia. Aby ułatwić dostosowanie tej równowagi do konkretnego przypadku użycia, format VP9 obsługuje prostą konfigurację w 4 „trybach szybkości transmisji”.
Tryby szybkości transmisji VP9
Zacznijmy od przyjrzenia się głównym trybom szybkości transmisji bitów, które obsługuje VP9:
Tryb | |
---|---|
Stały kwantyzator (Q) | Umożliwia określenie stałej wartości kwantyzatora; szybkość transmisji będzie się zmieniać. |
Ograniczona jakość (CQ) | Umożliwia ustawienie maksymalnego poziomu jakości. Jakość może się różnić w ramach parametrów szybkości transmisji |
Zmienna szybkość transmisji (VBR) | Równoważy jakość i szybkość transmisji bitów w czasie, zachowując ograniczenia dotyczące szybkości transmisji bitów. |
Stała szybkość transmisji bitów (CBR) | Próbuje utrzymać dość stałą szybkość transmisji, a jakość jest różna. |
Q
Tryb stałego kwantyzatora jest dobrym wyborem w sytuacjach, w których rozmiar pliku i szybkość transmisji są całkowicie podporządkowane ostatecznej jakości.
Ustawienia Q mogą być używane w kinach cyfrowych, cyfrowych studiach montażu lub aplikacjach digital signage, w których treści mogą być dostarczane na fizycznym nośniku danych lub w nieograniczonym czasie – z dużym wyprzedzeniem przed faktycznym użyciem treści, a pożądane dane wyjściowe muszą mieć najwyższą jakość wizualną.
Optymalizacja szybkości transmisji bitów w trybie Q w przypadku VP9
Tryb stałego kwantyzatora wymaga minimalnej konfiguracji. Jak sama nazwa wskazuje, tryb Q koncentruje się na utrzymaniu kwantyzatora na docelowym poziomie „jakości” i umożliwia mu określanie przepływu danych, które ma przetwarzać. Użytkownik musi tylko określić docelową jakość.
Więcej informacji o szczegółach jakości docelowej z perspektywy przetwarzania obrazu (a nie przepływności) znajdziesz w artykule Podstawowe kodowanie.
Aby zoptymalizować szybkość transmisji w trybie Q, użyj tych parametrów wiersza poleceń FFmpeg:
ffmpeg | |
---|---|
-b:v 0 |
Oznaczając szybkość transmisji wideo jako 0 , wyraźnie ustawiamy tryb „Q”. |
-g <arg> |
Ustawia interwał klatek kluczowych w klatkach (domyślnie 240). |
-crf <arg> |
Ustawia maksymalny poziom jakości. Prawidłowe wartości to 0–63. Im mniejsza liczba, tym wyższa jakość. |
-quality good -speed 0 |
Domyślne i zalecane w przypadku większości aplikacji. best jest bardziej narzędziem do wyszukiwania informacji, które niewiele różni się od -quality good -speed 0 . |
-lossless |
Tryb bezstratny |
Szybkość transmisji w trybie Q : przykłady FFmpeg
Pierwszy przykład to bardzo ekstremalne ustawienie trybu Q, które ma charakter wyłącznie ilustracyjny. (Nawet przetworzenie 120-sekundowego klipu w tych przykładach zajmie kilka godzin, a wygenerowany plik wyjściowy jest zwykle znacznie większy niż oryginalne źródło).
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -g 1 -b:v 0 -crf 0 -quality good \
-speed 0 -lossless 1 -c:a libvorbis Q_g_1_crf_0_120s_tears_of_steel_1080p.webm.webm
Aby porównać wpływ -crf
, w poniższych przykładach różni się tylko -crf
. Pamiętaj, że wartość -g
jest niezdefiniowana, więc domyślnie będzie to 240
, a w praktyce -crf
domyślnie przyjmuje wartość 10
, więc w drugim z 3 przykładów uzyskamy ten sam wynik bez uwzględniania żadnego z tych parametrów:
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 0 -crf 0 -quality good \
-speed 0 -c:a libvorbis Q_crf_0_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 0 -crf 10 -quality good \
-speed 0 -c:a libvorbis Q_crf_10_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 0 -crf 63 -quality good \
-speed 0 -c:a libvorbis Q_crf_63_120s_tears_of_steel_1080p.webm
Dane wyjściowe tych przykładów różnią się rozmiarem na dysku. Gdy parametr -crf
miał wartość 0
, plik miał rozmiar 711,8 MB, gdy parametr -crf
miał wartość 10
, plik miał rozmiar 125,3 MB, a gdy parametr -crf
miał wartość 63
, plik miał rozmiar 4,5 MB. W uproszczeniu oznacza to, że obniżyliśmy jakość wynikowego pliku zakodowanego w VP9, zwiększając wartość argumentu -crf
. Pełne podsumowanie wszystkich plików wyjściowych znajdziesz w tabeli wyników poniżej.
Porównajmy teraz wpływ zmiany ustawienia -g
.
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -g 1 -b:v 0 -quality good \
-speed 0 -c:a libvorbis Q_g_1_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -g 240 -b:v 0 -quality good \
-speed 0 -c:a libvorbis Q_g_240_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -g 480 -b:v 0 -quality good \
-speed 0 -c:a libvorbis Q_g_480_120s_tears_of_steel_1080p.webm
Zauważyliśmy, że ustawienie -g 1
powoduje utworzenie bardzo dużego pliku o rozmiarze 25,9 MB.
Porównaj to ze zmianą -g 240
(jawne ustawienie wartości domyślnej), gdzie otrzymujemy plik o rozmiarze 4,5 MB, oraz -g 480
, gdzie otrzymujemy plik o rozmiarze 4,4 MB.
CQ
CQ to zalecany tryb w przypadku filmów opartych na plikach.
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 sceny z dużą ilością ruchu (np. sekwencje akcji) i sceny z mniejszą liczbą szczegółów (np. rozmowy). Tryb CQ umożliwia koderowi utrzymanie rozsądnego poziomu jakości podczas dłuższych, łatwiejszych scen (bez marnowania bitów), a jednocześnie przydzielanie większej liczby bitów do trudnych sekwencji.
Musimy jednak ograniczyć ten proces, podając górny zakres – w przeciwnym razie kompresja może w ogóle nie wystąpić. Możemy też ustawić niższy zakres, w którym nawet jeśli obraz jest czarny, a proces kodowania prawie nic nie robi, nadal będziemy przepuszczać te dane, być może mniej wydajnie niż moglibyśmy, ale w rezultacie nawet czerń nie będzie znacząco skompresowana i będzie wyglądać na „bardzo czarną”.
Dodatkowo musimy też ustawić próg kwantyzatora. W VP9 próg kwantyzatora może się zmieniać w zakresie od 0
do 63
.
W przypadku trybu CQ używane są te parametry wiersza poleceń FFmpeg:
ffmpeg | |
---|---|
-b:v <arg> |
Ustawia docelową szybkość transmisji bitów (np. 500 tys. bitów/s). |
-minrate <arg> -maxrate <arg> |
Ustawia minimalną i maksymalną szybkość transmisji bitów. |
-crf <arg> |
Ustawia maksymalny poziom jakości. Prawidłowe wartości to 0 –63 . Im niższa liczba, tym wyższa jakość. |
Tryb szybkości transmisji bitów CQ: przykłady FFmpeg
Pierwszy przykład zawiera dość szerokie ograniczenie. W porównaniu z podanymi wyżej przykładami dla parametru Q widzimy jednak, że wymusza to wyższy zakres szybkości transmisji bitów, a jakość danych wyjściowych jest znacznie wyższa. Rozmiar pliku jest znacznie większy.
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
-minrate 1000k -maxrate 4000k -crf 10 -c:a libvorbis \
CQ_4000_1000_crf_10_120s_tears_of_steel_1080p.webm
W tym przypadku plik wyjściowy zajmował na dysku 20,2 MB, czyli znacznie mniej niż w przypadku kodowania w trybie Q w przykładach powyżej.
W kolejnym przykładzie ograniczyliśmy bitrate do znacznie węższego zakresu.
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
-minrate 1500k -maxrate 2500k -crf 10 -c:a libvorbis \
CQ_2500_1500_crf_10_120s_tears_of_steel_1080p.webm
W tym przypadku rozmiar pliku wyjściowego wynosił 24,1 MB, a w momentach dużej złożoności i ruchu jakość wideo jest wyraźnie niższa w porównaniu z poprzednim przykładem.
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 1000k \
-minrate 750k -maxrate 1400k -crf 10 -c:a libvorbis \
CQ_1400_750_crf_10_120s_tears_of_steel_1080p.webm
W tym ostatnim przykładzie rozmiar pliku wyjściowego został znacznie zmniejszony i wynosił 13,2 MB.
VBR
Tryb zmiennej szybkości transmisji bitów (VBR) jest zalecany w przypadku strumieniowego przesyłania plików wideo na żądanie z treściami o dużej ilości ruchu (np. sport). Dobrze sprawdza się w przypadku dostarczania treści przez HTTP.
W modelu VBR sceny akcji mogą być kodowane z wyższym bitrate niż „łatwiejsze” sceny, które są zgodne z klatką kluczową.
W przypadku dużych modeli dostarczania strumieniowego korzyści z VBR mogą być znaczne zarówno pod względem dystrybucji, jak i infrastruktury. Gdy wiele strumieni VBR jest dostarczanych przez tę samą infrastrukturę, może to przynieść korzyści wszystkim widzom korzystającym z systemu.
VP9 VBR jest też zalecany do kodowania treści sportowych i innych treści z dużą ilością ruchu. W przypadku treści o wysokim stopniu złożoności VBR zapewnia wyższą jakość w okresach mniejszego ruchu.
W przypadku trybu VBR używane są te parametry wiersza poleceń FFmpeg:
ffmpeg | |
---|---|
-quality good |
Jakość good jest odpowiednia w przypadku filmów na żądanie. |
-speed <arg> |
W przypadku usługi WIDEO NA ŻĄDANIE prawidłowe wartości to 0–5, gdzie 0 oznacza najwyższą jakość, a 5 – najniższą. (W przypadku transmisji na żywo zakres wynosi 5–9 – patrz CBR poniżej) |
Tryb szybkości transmisji bitów VBR: przykłady FFmpeg
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
-minrate 1500k -maxrate 2500k -quality good -speed 0 -c:a libvorbis \
VBR_good_0_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
-minrate 1500k -maxrate 2500k -quality good -speed 5 -c:a libvorbis \
VBR_good_5_120s_tears_of_steel_1080p.webm
CBR
W przypadku transmisji na żywo z użyciem VP9 zalecany jest tryb stałej szybkości transmisji (CBR).
CBR zasadniczo ustawia górny bitrate jako „sztywny limit”. Oznacza to, że proces kodowania nie może generować danych z szybkością, której sieć nie jest w stanie obsłużyć.
Na przykład w przypadku strumieni komunikacji w czasie rzeczywistym (konferencji wideo) ważne jest, aby aplikacja kodująca nie zalewała sieci większą ilością danych, niż może ona przenieść. Jeśli tak jest, problemy z synchronizacją dźwięku i obrazu lub zamrożone klatki znacznie wpływają na wrażenia użytkownika, bardziej niż zmniejszona wydajność kompresji. Jeśli zdefiniujesz górny limit, VP9 będzie obniżać jakość, gdy ten limit zostanie osiągnięty.
W przypadku trybu CBR używane są te parametry wiersza poleceń FFmpeg:
ffmpeg | |
---|---|
-quality realtime |
Jakość realtime jest odpowiednia do transmisji na żywo. |
-speed <arg> |
W przypadku transmisji na żywo prawidłowe wartości to od 5 do 9, przy czym 5 oznacza najwyższą jakość, a 9 – najniższą. (W przypadku wideo na żądanie są to wartości od 0 do 5. Patrz VBR powyżej). |
-minrate <arg> -maxrate <arg> |
Ustawia minimalną i maksymalną szybkość transmisji bitów ** W przypadku trybu CBR muszą one mieć tę samą wartość szybkości transmisji bitów -b:v ** . |
W uproszczeniu ustawiamy docelową, minimalną i maksymalną szybkość transmisji na tę samą wartość i informujemy kwantyzator, że operacje są wrażliwe na czas.
Tryb szybkości transmisji CBR: przykłady FFmpeg
W przykładach poniżej pokazujemy, jak ustawić szybkość transmisji bitów na 2 Mb/s i 500 Kb/s:
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
-minrate 2000k -maxrate 2000k -quality realtime -speed 5 -c:a libvorbis \
CBR_2000_realtime_speed_5_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
-minrate 2000k -maxrate 2000k -quality realtime -speed 8 -c:a libvorbis \
CBR_2000_realtime__8_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 500k \
-minrate 500k -maxrate 500k -quality realtime -speed 5 -c:a libvorbis \
CBR_500_realtime_speed_5_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 500k \
-minrate 500k -maxrate 500k -quality realtime -speed 8 -c:a libvorbis \
CBR_500_realtime_speed_8_120s_tears_of_steel_1080p.webm
Wyniki
Każde z powyższych kodowań zostało przeprowadzone w systemie Ubuntu Linux o tych specyfikacjach:
- Procesor: 4 x Intel(R) Core(TM) i5-6500 CPU @ 3,20 GHz
- Pamięć (RAM): 8060 MB (1492 MB używane)
- Grafika: Intel HD Graphics 530 (Skylake GT2)
- System operacyjny: Ubuntu 16.04 LTS
We wszystkich przypadkach plik źródłowy był 1-minutowym i 20-sekundowym klipem pochodzącym z filmu Tears Of Steel.
Plik | Minuty kodowania | Rozmiar pliku na dysku |
---|---|---|
Q_g_1_crf_0_120s_tears_of_steel_1080p.webm | 81 | 1,06 GB |
Q_crf_0_120s_tears_of_steel_1080p.webm | 131 | 711,8 MB |
Q_crf_10_120s_tears_of_steel_1080p.webm | 118 | 125,3 MB |
Q_crf_63_120s_tears_of_steel_1080p.webm | 27 | 4,5 MB |
Q_g_1_120s_tears_of_steel_1080p.webm | 51 | 25,9 MB |
Q_g_240_120s_tears_of_steel_1080p.webm | 28 | 4,5 MB |
Q_g_480_120s_tears_of_steel_1080p.webm | 10 | 4,4 MB |
CQ_4000_1000_crf_10_120s_tears_of_steel_1080p.webm | 11 | 20,2 MB |
CQ_2500_1500_crf_10_120s_tears_of_steel_1080p.webm | 9 | 24,1 MB |
CQ_1400_750_crf_10_120s_tears_of_steel_1080p.webm | 50 | 13,2 MB |
VBR_good_0_120s_tears_of_steel_1080p.webm | 3 | 23,4 MB |
VBR_good_5_120s_tears_of_steel_1080p.webm | 4 | 23,9 MB |
CBR_2000_realtime_speed_5_120s_tears_of_steel_1080p.webm | 2 | 24,8 MB |
CBR_2000_realtime_speed_8_120s_tears_of_steel_1080p.webm | 1 | 21 MB |
CBR_500_realtime_speed_5_120s_tears_of_steel_1080p.webm | 1 | 8,5 MB |
CBR_500_realtime_speed_8_120s_tears_of_steel_1080p.webm | 1 | 7,1 MB |
Zauważono, że ustawienie wartości -speed
powyżej 5
zmienia szybkość przetwarzania VP9. Chociaż jest to znaczny wzrost kwantyzacji (widoczny w postaci silnego efektu „roztrząsania” przy bardzo niskiej jakości i szybkiej transmisji bitów), VP9 nadal jest w stanie generować bardzo dobre wyjście 1080p przy niskiej transmisji bitów, choć lepiej nadaje się do mniejszych urządzeń mobilnych niż do większych wyświetlaczy.
Kwestie do rozważenia w przypadku użycia ze zmianą skali (rozmiaru)
Tryby szybkości transmisji VP9 nie są oczywiście odosobnione i można je łączyć z wieloma innymi argumentami i parametrami, aby kierować je na konkretne przypadki użycia. Typowym zastosowaniem może być zmiana rozmiaru wyjściowego filmu w celu dostosowania go do konkretnego urządzenia.
Klasycznym przykładem jest zmiana strumienia HD na wyjście SD. Ponownie będzie to miało znaczący wpływ na czas przetwarzania i szybkość transmisji wyjściowej. W sytuacji, gdy 2 polecenia FFmpeg są identyczne, samo dostosowanie rozmiaru filmu wyjściowego zmieni rozmiar wynikowego pliku, a w modelu przesyłania strumieniowego także jego szybkość transmisji.
Aby to zilustrować, wzięliśmy przykład z połowy zakresu każdego trybu szybkości transmisji i dodaliśmy do niego parametry zmiany rozmiaru.
Tryb Q
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 0 -crf 10 -quality good \
-speed 0 -vf scale=640x480 -c:a libvorbis 640x480_Q_crf_10_120s_tears_of_steel_1080p.webm
Tryb CQ
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
-minrate 1500k -maxrate 2500k -crf 10 -vf scale=640x480 -c:a libvorbis \
640x480_CQ_crf_0_120s_tears_of_steel_1080p.webm
Tryb VBR
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
-minrate 1500k -maxrate 2500k -quality good -speed 5 -vf scale=640x480 \
-c:a libvorbis 640x480_VBR_good_5_120s_tears_of_steel_1080p.webm
Tryb CBR
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
-minrate 2000k -maxrate 2000k -quality realtime -speed 5 -vf scale=640x480 \
-c:a libvorbis 640x480_CBR_2000_realtime_5_120s_tears_of_steel_1080p.webm
Tabela wyników zmiany skali
Plik | Minuty kodowania | Rozmiar pliku na dysku |
---|---|---|
640x480_Q_crf_10_120s_tears_of_steel_1080p.webm | 5 | 3,4 MB |
640x480_CQ_crf_0_120s_tears_of_steel_1080p.webm | 2 | 22,4 MB |
640x480_VBR_good_5_120s_tears_of_steel_1080p.webm | 1 | 22,6 MB |
640x480_CBR_2000_realtime_5_120s_tears_of_steel_1080p.webm | 4 | 23 MB |
Dla ułatwienia porównania są to te same polecenia FFmpeg, które były użyte w poprzednich przykładach, ale bez skalowania:
Plik | Minuty kodowania | Rozmiar pliku na dysku |
---|---|---|
Q_crf_10_120s_tears_of_steel_1080p.webm | 56 | 126 MB |
CQ_2500_1500_crf_10_120s_tears_of_steel_1080p.webm | 9 | 24,1 MB |
VBR_good_5_120s_tears_of_steel_1080p.webm | 4 | 23,9 MB |
CBR_2000_realtime_speed_5_120s_tears_of_steel_1080p.webm | 1 | 24,8 MB |
Jak widać, rozmiary plików wyjściowych w każdym przypadku znacznie się zmniejszyły, a w większości przykładów skrócił się też czas kodowania. W trybie Q czas kodowania faktycznie się wydłużył. „Mocniejsze” skompresowanie filmu wymaga więcej pracy, więc nawet jeśli plik wyjściowy ma być mniejszy, gdy jakość nie jest ograniczona (jak w trybie Q), może to wydłużyć czas potrzebny na jego utworzenie. Nie zakładaj, że mniejszy plik zawsze będzie dostarczany szybciej w procesie kodowania.
Zmiana skali i zmniejszenie szybkości transmisji bitów w połączeniu
Na koniec porównajmy jeszcze raz przykłady CQ, VBR i CBR z ponownym skalowaniem, ale tym razem ograniczymy docelową szybkość transmisji do 500 kbps – czyli mniej więcej do jednej czwartej (zgodnie ze zmniejszeniem rozmiaru obrazu).
Tryb CQ
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 500k \
-minrate 350k -maxrate 550k -crf 10 -vf scale=640x480 -c:a libvorbis \
640x480_CQ_crf_0_120s_tears_of_steel_1080p.webm
Tryb VBR
ffmpeg -i "120s_tears_of_steel_1080p.webm" -c:v libvpx-vp9 -b:v 500k \
-minrate 350k -maxrate 500k -quality good -speed 5 -vf scale=640x480 -c:a libvorbis \
640x480_VBR_good_5_120s_tears_of_steel_1080p.webm
Tryb CBR
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 500k \
-minrate 500k -maxrate 500k -quality realtime -speed 5 -vf scale=640x480 -c:a libvorbis \
640x480_CBR_2000_realtime_5_120s_tears_of_steel_1080p.webm
Tabela wyników zmiany skali i obniżenia docelowej szybkości transmisji
Plik | Minuty kodowania | Rozmiar pliku na dysku |
---|---|---|
640x480_CQ_500_crf_0_120s_tears_of_steel_1080p.webm | 1 | 7 MB |
640x480_VBR_500_good_5_120s_tears_of_steel_1080p.webm | 1 | 7 MB |
640x480_CBR_500_realtime_5_120s_tears_of_steel_1080p.webm | 1 | 7,6 MB |
Jak widać, czas kodowania został jeszcze bardziej skrócony.