To, co obliczyłeś, to szybkość transmisji surowego, nieskompresowanego wideo. Zazwyczaj nie znajdziesz ich, z wyjątkiem badań lub innych specjalistycznych aplikacji. Nawet nadawcy używają skompresowanego wideo, aczkolwiek ze znacznie wyższą przepływnością niż typowe wideo z YouTube.
Jakość wideo ma więc wiele wspólnego ze sposobem jego kompresji. Im bardziej go skompresujesz, tym mniej bitów zajmie na klatkę. Im więcej kompresujesz, tym gorsza jest jakość. Teraz niektóre filmy są znacznie łatwiejsze do kompresji niż inne - w gruncie rzeczy dlatego mają niższą szybkość transmisji, mimo że mają tę samą rozdzielczość i szybkość klatek.
Aby zrozumieć, dlaczego tak jest, musisz zdawać sobie sprawę z dwóch głównych zasad korzystania z kompresji wideo. Nazywa się to „przestrzenną” i „czasową redundancją”.
Redundancja przestrzenna
Nadmiarowość przestrzenna występuje w obrazach przedstawiających naturalne treści. To jest powód JPEG działa tak dobrze - kompresuje dane obrazu, ponieważ bloki pikseli można kodować razem. Są to na przykład 8 x 8 pikseli. Są to tak zwane „makrobloki”.
Nowoczesne kodeki wideo robią to samo: w zasadzie używają algorytmów podobnych do JPEG w celu kompresji klatka po bloku. Nie zapisujesz już bitów na piksel, ale bitów na makroblok, ponieważ „podsumowujesz” piksele na większe grupy. Podsumowując je, algorytm odrzuci również informacje niewidoczne dla ludzkiego oka - w tym miejscu można zmniejszyć większość przepływności. Działa poprzez kwantyzację danych. Pozwoli to zachować częstotliwości, które są bardziej widoczne i „wyrzucić” te, których nie widzimy. Współczynnik kwantyzacji jest wyrażany jako „QP” w większości kodeków i jest to główne pokrętło kontroli jakości.
Możesz teraz nawet przewidywać makrobloki na podstawie makrobloków, które zostały wcześniej zakodowane na tym samym obrazie. Nazywa się to prognozowaniem intra . Na przykład część szarej ściany została już zakodowana w lewym górnym rogu ramki, więc możemy ponownie użyć tego makrobloku w tej samej ramce, na przykład dla makrobloku tuż obok. Po prostu zapiszemy różnicę, jaką miał do poprzedniej, i zapiszemy dane. W ten sposób nie musimy kodować dwóch makrobloków, które są do siebie bardzo podobne.
Dlaczego szybkość transmisji zmienia się dla tego samego rozmiaru obrazu? Niektóre obrazy są łatwiejsze do zakodowania niż inne. Im wyższa aktywność przestrzenna, tym więcej trzeba zakodować. Gładkie tekstury zajmują mniej bitów niż szczegółowe. To samo dotyczy przewidywania wewnętrznego: ramka szarej ściany pozwoli ci użyć jednego makrobloku do przewidzenia wszystkich innych, podczas gdy ramka przepływającej wody może nie działać tak dobrze.
Redundancja czasowa
Dzieje się tak, ponieważ ramka następująca po innej ramce jest prawdopodobnie bardzo podobna do swojego poprzednika. Przeważnie niewielkie zmiany i nie ma sensu w pełni go kodować. To, co robią kodery wideo, to po prostu kodowanie różnicy między dwiema kolejnymi klatkami, tak jak mogą to zrobić w przypadku makrobloków.
Biorąc przykład z artykułu Wikipedii na temat kompensacji ruchu , powiedzmy, że to twoja oryginalna ramka:
Różnica w stosunku do następnej klatki jest następująca:
Koder przechowuje teraz tylko rzeczywiste różnice, a nie wartości piksel po pikselu. Dlatego bity użyte dla każdej ramki nie są takie same za każdym razem. Te ramki „różnicowe” zależą od w pełni zakodowanej ramki i dlatego istnieją co najmniej dwa rodzaje ramek dla współczesnych kodeków:
- I-ramki (inaczej klatki kluczowe) - są to w pełni zakodowane
- Ramy P - te właśnie przechowują różnicę
Czasami musisz wstawić I-klatki do filmu. Rzeczywista przepływność zależy również od liczby użytych ramek I. Co więcej, im większa różnica w ruchu między dwiema kolejnymi ramkami, tym więcej koder musi zapisać. Wideo „nic” w ruchu będzie łatwiejsze do zakodowania niż wideo sportowe i zużywa mniej bitów na klatkę.