Czytając o jakości wideo, odkryłem, że zależy to od rozdzielczości, liczby klatek na sekundę i szybkości transmisji, która decyduje o wielkości filmu.
Moje pytanie brzmi: w jaki sposób obliczana jest szybkość transmisji i jak może się różnić.
Powiedzmy, że film ma rozdzielczość 360 x 240. Zajmuje 86400 pikseli na ramkę. Częstotliwość klatek wynosi 30 Hz. Tak więc wideo zajmuje 86400 × 30 = 2592000 pikseli na sekundę.
Powiedzmy, że 1 piksel to 3 bajty (24 bity) danych: mamy 2592000 x 24 bity na sekundę wideo (62208000 bitów), czyli 62208 kBitów (to nie brzmi dobrze, może jakiś problem w moich obliczeniach).
Ale czym się różni i jak wpływa na jakość?
video
codec
video-conversion
Vincent Mathew
źródło
źródło
Odpowiedzi:
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:
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ę.
źródło
Wierzę, że twoja matematyka jest właściwie poprawna, ale jest w niej coś więcej; kompresja jest brakującym linkiem tutaj.
Obliczyłeś nieskompresowaną przepływność i wymyśliłeś powód, dla którego istnieje kompresja. Szybkość transmisji staje się niemożliwie duża przy nieskompresowanym wideo. Tak więc kompresują wideo u źródła i rozpakowują je w odbiorniku, a następnie szybkość transmisji staje się możliwa do zarządzania. Potrzebujesz tylko wystarczająco szybkiego dekompresora, którym może być sprzęt lub oprogramowanie.
Problemem jest więc tolerancja kompresji - zazwyczaj nie jest ona bezstratna, więc tracisz informacje, ale starają się uczynić ją wystarczająco inteligentną, aby stracić mniej ważne dane, które nie będą tak zauważalne. Zwykle jest to dość łatwe, dopóki nie ma dużo ruchu, a następnie staje się bardziej skomplikowane.
Edycja: zapomniałem dodać, ale częściami implementującymi metodę kompresji jest kodek; Zauważyłem, że użyłeś tego jako tagu w swoim poście.
źródło