Czym różni się przepływność dla tej samej rozdzielczości i prędkości klatek?

15

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ść?

Vincent Mathew
źródło
Gdyby wideo było sekwencją obrazów bitmapowych. Twoja matematyka jest już wyłączona w przypadku plików graficznych png / jpg.
Daniel Beck
Dwie istniejące odpowiedzi nie podkreślają istotnego atrybutu kompresji wideo: większość (jeśli nie wszystkie) wszystkie kodeki wideo stosują kompresję stratną . Oznacza to, że niektóre informacje o obrazie są odrzucane, gdy surowe wideo jest kompresowane i kodowane. Ilość lub stopień odrzuconych i utraconych informacji / szczegółów obrazu zależy od współczynnika jakości . Jeśli chodzi o kompresję audio, istnieją techniki kompresji stratnej i bezstratnej.
trociny
@sawdust: Nie? Myślałem, że mój trzeci akapit wyjaśnił to dość jasno. W każdym razie podawanie zbyt dużej ilości informacji czasami nie jest tak dobre; Wierzę w dawanie wystarczającej ilości, aby pytający mógł dowiedzieć się więcej, jeśli jest to pożądane. W przeciwnym razie mógłbym powiedzieć, że twój post nie podkreśla, dlaczego ktoś wybrałby jedną sprężarkę lub dlaczego istnieje tak wiele różnych metod itp. Itp.
Marty Fried
@sawdust Masz rację, to było nieco pochowane w części JPEG. Dodałem trochę więcej szczegółów.
slhck

Odpowiedzi:

21

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ę.

slhck
źródło
+1 - o to mi chodziło, ale mój algorytm kompresji trochę pomijał. :)
Marty Fried
+1 To wszystko, czego potrzebowałem. Zwłaszcza kompensacja ruchu. Dzięki
Vincent Matthew
6

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.

Marty Fried
źródło
3
Plus fakt, że kompresja wideo zwykle nie jest oparta na pikselach, ale działa na blokach pikseli, tak zwanych makroblokach .
slhck