Zazwyczaj rozpoczynając swoją przygodę z filmowaniem, nie zagłębiamy się zbytnio w związane z tym techniczne niuanse. Ostatecznie mówimy o dziedzinie sztuki, gdzie pomysł i poczucie estetyki znaczą więcej niż liczby i wykresy. A przynajmniej tak się sprawy mają dopóki nie postanowimy przejść z tym co robimy na bardziej profesjonalny poziom lub, po prostu, zmontować tego co z takim entuzjazmem nakręciliśmy pochwyconym przed chwilą w dłonie aparatem, telefonem czy kamerą.

W fotografii sprawa była prosta – aparat robi zdjęcia w plikach jpeg lub rawach. Przy czym, jak głosi stare branżowe porzekadło, jeśli nie wiemy o co chodzi z tymi drugimi, to znaczy że ich nie potrzebujemy. Obrazy jpeg są przyjemne w obsłudze – pojęcia takie jak „rozmiar” i „jakość” są intuicyjne nawet dla początkujących.

Zagłębienie się w analogiczne nastawy dla filmowania zazwyczaj stanowi dla niedoświadczonych użytkowników kubeł zimnej wody. Bardzo duży kubeł. Najprostszym parametrem z tego wszystkiego wydaje się rozdzielczość, choć i tam bywa „wesoło” np. w AVCHD można filmować w 1440×1080 i mieć takie same proporcje obrazu jak w 1920×1080. Po zejściu do SD sprawy robią się jeszcze bardziej pogmatwane, nagle dowiadujemy się, że nasze 720×576 może być w 4:3 lub 16:9 i to mimo że podzielenie tych liczb przez siebie w żadnym przypadku nie daje takich proporcji. Potem jest już tylko gorzej, pojawia się bitrate, kodek, kontener, przeplot, próbkowanie kolorów i chrominancji. A na deser wracają rawy, których nadal nie należy używać, jeśli się nie wie po co.

Spróbujmy to wszystko nieco odczarować. Na początek truizm – kadr filmu, podobnie jak zdjęcie składa się z pikseli. Zazwyczaj (choć nie zawsze) są one kwadratowe. O ile jednak zdjęcia występują w setkach różnych rozmiarów, o tyle rozmiary te dla filmu są konkretne i ustalone. Poniżej przytaczam kilka, z którymi najczęściej ma do czynienia większość użytkowników:

  1. SD, aka standard definition – 720×576 w Europie (ogólniej: w strefie PAL), 720×480 w USA i Japonii (strefa NTSC). Standard ten obowiązywał przed upowszechnieniem się HD, dziś spotkamy go najczęściej na płytach DVD. Charakterystyczną cechą SD jest to, że piksele nie są kwardatowe, stąd też zarówno europejska, jak i amerykańska wersja SD może występować zarówno w proporcjach 4:3, jak i 16:9 (po prostu piksele są mniej lub bardziej rozciągniętymi w którąś stronę prostokątami). Warto w tym miejscu odnotować, że klatka filmu w SD ma tylko ok. 0,4 megapiksela, czyli pięciokrotnie mniej niż klatka filmu w HD. Spotykane czasem oznaczenie to 576p lub 576i dla wersji PAL i 480p/480i dla NTSC.
  2. HD – na potrzeby czytelniejszego rozgraniczenia za HD uznajmy materiał w rozdzielczości 1280×720, żeby rozdzielić go pojęciowo od Full HD. Tutaj już piksele są kwadratowe, a proporcje stałe i wynoszące 16:9. Pojedyncza klatka to niecały 1 megapiksel. Standard ten opisywany bywa jako 720p lub (mylnie, bo pojęcie to dotyczy tylko telewizorów, a nie nagrywania) „HD Ready”.
  3. Full HD aka 1080p – najpopularniejszy obecnie standard nagrywania. Rozdzielczość 1920×1080, proporcje boków 16:9 i ok. 2 megapiksele w każdej klatce.
  4. Ultra HD – podwojone Full HD – 3840×2160, proporcje boków nadal 16:9, 8,3 megapiksela na klatkę (co pozwala traktować pojedyncze stopklatki jak zdjęcia, można je z powodzeniem wywoływać). Czasami ze względów marketingowych określane jest terminem „4K”, choć nie jest to do końca precyzyjne.
  5. 2K, 4K, 5K, 6K – standardy występujące w kinie. Liczba „K” oznacza tysiące pikseli na dłuższym, poziomym boku kadru. Konkretniej – 2K to 2048, 4K to 4096 itd. – generalnie 1K to 1024, czyli 2 do potęgi 10. Wszystko inne to wielokrotności tej wartości. Standard nie definiuje proporcji boków, bo tych w kinie jest kilka różnych, a zatem 4K może oznaczać zarówno 4096×2160 (proporcje boków 1,85:1), jak i 4096×1716 (2,37:1).

Słowa wyjaśnienia wymagają literki „p” oraz „i” jakie pojawiają się w oznaczeniach – np. 1080p i 1080i. Litera „p” pochodzi od angielskiego słowa „progressive” i oznacza że cały kadr jest kodowany i przesyłany naraz jako jedna kompletna klatka zarejestrowana w konkretnym momencie. Z kolei pochodzące od słowa „interlaced” oznaczenie „i” oznacza zapis z przeplotem. Polega on na tym, że parzyste linie pikseli są odczytywane, kodowane i przesyłane w jednym momencie, a nieparzyste w innym. Rozwiązanie to wymyślono w czasach analogowej telewizji i kineskopowych telewizorów, które wygasały i mrugały gdy kolejne klatki nadawane były zbyt rzadko. Przeplot umożliwiał przesyłanie do telewizora kolejnych partii informacji dwukrotnie częściej bez zwiększania ilości przesyłanych danych (a zatem także ustalonego już pasma sygnału radiowego). Ze względu na kompatybilność zapis z przeplotem do dziś spotyka się w telewizjach. Niemniej jednak jest to archaiczne rozwiązanie, które potrafi sprawiać problemy współczesnym cyfrowym monitorom, stąd też, o ile nikt od nas nie wymaga przeplotu – nie stosujmy go. Zapis progresywny jest oferowany przez zdecydowaną większość dostępnych na rynku urządzeń.

Drugi parametr, jaki przychodzi nam ustawić po rozdzielczości to klatkaż. Tu sprawa jest prostsza i podobnie jak systemy PAL i NTSC wynika z… częstotliwości prądu w gniazdku. W Europie mamy 50Hz, w USA i Japonii jest 60. Dlatego u nas standardem jest 25 kl/sek (z przeplotem ich odpowiednikiem jest 50 tzw. półobrazów), a u nich 30 kl/sek. Stąd też prosta porada dla początkujących – nagrywajcie w 25kl/sek. Praca w 30-tu może powodować problemy (mruganie i pasy) w sztucznym świetle.

Współczesne aparaty i kamery oferują także wyższe wartości klatkażu, np. 50kl/sek. Możemy to wykorzystać dwojako – albo w celu późniejszego spowolnienia materiału i uzyskania lekkiego efektu slow motion (choć lepiej wychodzi on gdy na starcie mamy 100 lub więcej kl/sek), albo żeby obraz był bardziej płynny. Jedni tę dodatkową, „telewizyją” płynność lubią, inni wręcz przeciwnie, wolą ostrzejszy, bardziej „kinowy” obraz. To kwestia gustu.

 

Po takim wstępie możemy przejść do właściwych kodeków, czyli sposobów, z jakich korzysta nasz sprzęt by zapisać film z możliwie wysoką jakością przy jednoczesnych zachowaniu rozsądnych rozmiarów powstałego pliku.

Pierwszy podział sposobów zapisu to ten na kodeki bezkompresyjne i kompresyjne. Te drugie dodatkowo można podzielić na te wykorzystujące kompresję stratną i bezstratną. W praktycznie całym amatorskim i półprofesjonalnym sprzęcie filmowym stosuje się jedynie te ostatnie. Powód jest prozaiczny – rozmiar powstałych plików. Policzmy na potrzeby edukacyjne, ile zajmowałby materiał w Full HD bez kompresji.

1920×1080 = 2073600 pikseli w każdej klatce.

Załóżmy, że każdy piksel przechowuje komplet informacji o wszystkich kolorach (czerwonym, zielonym i niebieskim) oraz że na informacje o każdym z nich przeznacza 1 bajt (8 bitów)

2073600 pikseli * 3 kolory (RGB) * 1 bajt = 6,2 MB

6,2 megabajta na jedną klatkę przy nagrywaniu w 25 kl/sek oznacza, że:

  • 1 sekunda filmu zajmie ok. 155 MB
  • 1 minuta filmu zajmie ok. 9,331 GB
  • 1 godzina filmu zajmie ok. 560 GB

Przy takiej ilości danych dyski twarde potrzebne do przechowywania i obrabiania naszego filmu z wakacji mogłyby się okazać niewiele tańsze niż same wakacje.

Kompresja bezstratna pozwala zmniejszyć te wartości dwu-, w porywach trzykrotnie. Tymczasem przeciętny kodek stosowany w aparacie czy kamerze potrafi zmniejszyć ilość zapisywanych danych mniej więcej 25 razy. Stąd też popularność stratnej kompresji. Co ważne, większość współczesnych kodeków, mimo znacznego zmniejszenia objętości plików, zachowuje bardzo wysoką jakość obrazu, która dla niewprawionego oka często będzie nieodróżnialna od pliku bez kompresji.

Najczęściej zapis skompresowanego materiału poprzedzony jest dwoma procesami. Pierwszy z nich ogranicza dokładność zapisu poziomów jasności i koloru, drugi redukuje zapis informacji o kolorze np. do co drugiego piksela. Obydwa omówimy nieco dokładniej.

Matryca aparatu czy kamery pracuje z dużą dokładnością i zazwyczaj jest zdolna do zarejestrowania 12- lub 14-bitowej informacji o jasności i kolorze. Oznacza to, że między idealną bielą a całkowitą czernią zmieści się odpowiednio ponad 4 i ponad 16 tysięcy wartości pośrednich (wynika to z prostej matematyki – 212 = 4096, 214 = 16384). Tymczasem ludzkie oko jest w stanie rozróżnić tych poziomów około 50. Stąd też do zastosowań nieprofesjonalnych, gdzie kolor nie jest przetwarzany w bardzo zaawansowany sposób, wystarcza przycięcie informacji do 8 bitów. 28 daje nam 256 różnych poziomów i tyle właśnie obsługuje większość kodeków. Po co w takim razie cały ten nadmiar przy rejestracji? Choćby po to by aparat czy kamera mogły wstępnie przetworzyć materiał – odszumić, wyostrzyć, zaaplikować wybrany przez nas balans bieli, kontrast, nasycenie i inne parametry które ustawiliśmy. Dla profesjonalistów rzeczywiście potrzebujących większego zapasu danych przewidziano kodeki 10-bitowe lub zapisywanie materiału w formacie raw z pełną 12- lub 14-bitową informacją o kolorze. Ceną jaką przychodzi im za to płacić są wspomniane już ogromne rozmiary plików.

Drugi ze sposobów ograniczania ilości zapisywanych danych również bazuje na ludzkiej percepcji. Jak się okazuje, nasze oczy są dużo bardziej wrażliwe na zmiany jasności niż na zmiany koloru. Stąd też pomysł by obraz zamiast w formie składowej czerwonej, zielonej i niebieskiej (RGB) zapisać jako jasność plus dwie składowe kolorystyczne. Przekształcenie w obie strony jest proste i odwracalne. Wieloletnie badania ludzkiej percepcji doprowadziły wzór na jasność do następującej postaci:

Jasność (Y) = 0,299 wartości składowej czerwonej (R) + 0,587 zielonej (G) + 0.114 niebieskiej (B)

Składowe kolorystyczne mogą np. mieć postać Cb = Y-B oraz CR = Y-R – jest to tak zwany model koloru YCrCb. Oczywiście istnieje także wiele innych modeli. Obraz rozbity na takie trzy składowe widzimy poniżej.

(źródło obrazka: http://upload.wikimedia.org/wikipedia/commons/d/d9/Barns_grand_tetons_YCbCr_separation.jpg)

Idąc dalej – skoro ludzkie oko jest mniej wrażliwe na kolory, to można je zapisać mniej szczegółowo – np. dla co drugiego albo co czwartego piksela. I dokładnie tak się robi, a informację o tym ile koloru zostało usunięte zawiera często widoczny przy kodeku ciąg cyfr A:B:C, gdzie pierwsza oznacza liczbę próbek jasności na każde 4 piksele, a dwie pozostałe liczby próbek koloru w pierwszym i drugim rzędzie (a także w każdym kolejnym nieparzystym i parzystym). Wyjaśnia to obraz poniżej:

(http://upload.wikimedia.org/wikipedia/commons/thumb/5/56/Chroma_subsampling_ratios.svg/2000px-Chroma_subsampling_ratios.svg.png)

Podobnie jak poprzednio, do większości zastosowań niewymagających zaawansowanej obróbki koloru, ani też pracy z green- lub blueboxem wystarcza próbkowanie 4:2:0 występujące w zdecydowanej większości aparatów i kamer. Warto zauważyć, że w porównaniu do pełnego 4:4:4, próbkowanie 4:2:2 pozwala zaoszczędzić 1/3 miejsca, a 4:2:0 połowę.

Po takim wstępnym obrobieniu dane są gotowe do dalszej kompresji. Algorytmy, które ją wykonują są bardzo zaawansowane i często chronione patentami, stąd też szczegółowa analiza ich działania nie ma większego sensu. Warto natomiast wiedzieć, że istnieją dwa główne typy kodeków:

  • wewnątrzramkowe (inaczej „all-i”, „intra” lub „i-frame”)
  • międzyramkowe (inaczej „ipb” lub „long gop”)

Pierwsza grupa zapisuje każdą klatkę filmu osobno, tak jakby była ona zdjęciem. Jeden ze starszych kodeków tego typu nazywa się zresztą MotionJPEG. Druga grupa kodeków wykorzystuje fakt, że sąsiednie klatki filmu zazwyczaj są do siebie w pewnym stopniu podobne. Przykładowo jeśli w nagranym na statywie ujęciu człowiek przechodzi na tle ściany, to jedynym zmieniającym się elementem w sąsiednich klatkach jest człowiek, ściana pozostaje taka sama. Kodeki wykorzystują to i w inteligentny sposób dzielą kadr na mniej i bardziej zmienne fragmenty. Pozwala to na zapisanie „na tej klatce górna 1/3 obrazu jest taka sama jak na poprzedniej” zamiast kodowania całej ściany ponownie. Funkcje tego typu są zresztą bardziej zaawansowane i potrafią np. kompensować ruch. Przykładowo samolot lecący po czystym, jednolitym niebieskim niebie może zostać zakodowany jako „ten sam obiekt co w poprzedniej klatce ale przesunięty o tyle i tyle”. Oczywiście taki proces nie może się ciągnąć bez końca, stąd też co któraś klatka zapisywana jest bezpośrednio, tak jak w kodekach wewnątrzramkowych. Taka klatka nazywa się „I frame”. Pozostałe dwa rodzaje klatek to klatki P oraz B, różniące się tym, że klatki P są interpolowane w oparciu o klatkę poprzednią, a klatki B w oparciu o poprzednią oraz następną. Nowsze kodeki, jak na przykład h.264, są w stanie potraktować w ten sposób nie tylko klatki ale także ich fragmenty.

Ceną jaką przychodzi zapłacić za tę zwiększoną wydajność zapisu danych jest złożoność obliczeniowa. Gdy oglądamy materiał nagrany z kodekiem wewnątrzramkowym, nasz komputer żeby odtworzyć klatkę X musi odczytać i zdekodować tylko i wyłącznie tę klatkę. Jeśli użyty był kodek międzyramkowy, maszyna w tym samym celu musi odczytać i zdekodować wiele ramek sąsiadujących z tą obecnie wyświetlaną. Podobnie zresztą jest z kodowaniem. Wprowadzenie nowych, złożonych i wydajnych kodeków nie byłoby możliwe bez wzrostu mocy obliczeniowej zarówno procesorów w aparatach i kamerach, jak i tych w naszych komputerach i ich kartach graficznych.

Ostatnim tematem wymagającym omówienia przy okazji kodeków jest przepływność, czyli odpowiednik „jakości” fotograficznego pliku jpeg. Przepływności typowo dostępne w amatorskich i półprofesjonalnych urządzeniach HD oscylują między 24 a 200 Mbit/sek. Dla porównania, w przykładzie z początku artykułu, bezkompresyjny strumień w 8 bitach i 4:4:4 (teraz umiemy już to nazwać po imieniu) generował na sekundę ok. 155 megabajtów czyli 1240 Mbit/sek.

Czy 24 Mbit/sek to wystarczająco dużo? A co z 50, 100, 200? Nie ma dobrej odpowiedzi na tak postawione pytanie. Wszystko zależy od zaawansowania kodeka, tego co nagrywamy, przeznaczenia materiału czy naszej własnej wrażliwości na niedoskonałości techniczne ujęć i artefakty spowodowane kompresją. Pewne zależności i „dobre rady” da się jednak sformułować, oto one:

  • w większości typowych sytuacji kodek IPB zapewni nam tę samą jakość przy niższej przepływności niż kodek All-I
  • wyjątkiem są sytuacje, w których filmowana scena zawiera dużo szczegółów, które zmieniają się w chaotyczny (tj. niedający się łatwo zinterpolować sposób), w takiej sytuacji przy identycznej przepływności jakość obydwu powinna się mniej więcej zrównać
  • kodeki All-I mniej obciążają komputer, stąd też przeliczanie materiału do tego typu kodeków było popularne kilka lat temu, gdy odtworzenie pliku Full HD zakodowanego h.264 było dla większości komputerów zadaniem przekraczającym ich możliwości; w internecie do dziś możemy się spotkać z postami i artykułami zalecającymi transkodowanie (które jest zbędne i niezalecane o ile tylko nasz komputer radzi sobie z oryginalnymi plikami)
  • Przy zwiększaniu klatkażu (np. z 25 na 50 kl/sek) w kodeku wewnątrzramkowym powinniśmy zwiększyć przepływność dwukrotnie; w kodeku międzyramkowym przyrost może być znacznie mniejszy, ponieważ rejestrowane dwa razy częściej klatki będą do siebie nawzajem bardziej podobne, a co za tym idzie, łatwiej będzie skompresować informacje o nich. Łatwo zauważyć to na przykładzie popularnego AVCHD, w którym maksymalna przepływność dla 25 kl/sek wynosi 24Mbit/s, a przy 50kl/sek niewiele więcej, bo raptem 28Mbit/s.

Również pod względem przepływności kodeki możemy podzielić na dwa rodzaje:

  • kodeki o stałej przepływności (CBR – constant bitrate)
  • kodeki o zmiennej chwilowej przepływności (VBR – variable bitrate)

Kodeki o stałej przepływności przeznaczają dokładnie tyle samo miejsca na każdą kolejną sekundę (lub inną jednostkę czasu) materiału niezależnie od skomplikowania filmowanej sceny. Z kolei kodeki o zmiennej przepływności utrzymują pewną zadaną średnią wartość Mbit/sek, natomiast chwilowo zwiększają ją lub zmniejszają, w zależności od tego czy w danym momencie w kadrze jest ruchomy i złożony obraz, czy też coś jednolitego lub nieruchomego, co da się łatwo zinterpolować z wykorzystaniem klatek P i B.

Podobnie jak w poprzednim przypadku, także i tutaj dodatkowa złożoność kodeka ma swoją cenę – starszym kodekom o zmiennej przepływności (np. AVCHD) zdarza się „wariować” jeśli przez dłuższy czas filmowana scena jest szczegółowa i zmienna w sposób trudny do skompensowania. Kodek w takiej sytuacji ustawia przepływność wyższą od średniej licząc na to, że „sytuacja za chwilę się uspokoi” i przepływność będzie z kolei można zmniejszyć poniżej średniej. Gdy „uspokojenie sytuacji” nie następuje kodek tak czy inaczej musi obniżyć przepływność, co skutkuje trwającym przez pewien czas (np. kilka sekund) drastycznym obniżeniem jakości materiału.

Gdy obraz został już zakodowany, pozostaje go „zapakować” do pliku. Służą temu kontenery. O ile kodek to de facto sam algorytm kodowania obrazu lub dźwięku w określony sposób, o tyle kontener odpowiada za rozszerzenie pliku, metadane i inne potrzebne informacje. Mylenie jednego z drugim jest niestety nagminne i prowadzi do nieścisłości komunikacyjnych – np. „proszę przysłać plik w formacie avi”. A tymczasem rozszerzenie pliku avi informuje nas jedynie o kontenerze, do którego możemy zapakować wiele różnych kodeków, od bezkompresyjnych po DivX-y i im podobne. Obszerna tabela zestawiająca większość istniejących kodeków i kontenerów znajduje się na Wikipedii, zachęcamy do jej przejrzenia:

http://en.wikipedia.org/wiki/Comparison_of_container_formats

Przedstawiona powyżej obszerna teoria jest niezbędna do zrozumienia, praktycznego porównania kodeków, które zaprezentujemy poniżej.

Na potrzeby praktycznej prezentacji działania różnych kodeków skonstruowaliśmy stanowisko testowe służące do ich przeciążania, tj. generujące możliwie duże ilości zmiennej informacji na sekundę. W założeniu utrudnieniem dla kodeka mają być:

  • ruch koloru niezależny od ruchu czarno-białych wycinków tablicy testowej z tyłu
  • trudny do skompensowania ruch okrężny światełek połączony z chaotycznym ruchem poruszanych wiatrakiem pasków folii (kodeki najlepiej kompensują ruch po linii prostej)
  • ujęcia kręcone z ręki w celu stworzenia dodatkowego chaotycznego ruchu
  • ujęcia kręcone z bardzo krótkim czasem migawki by zniwelować rozmycie ruchu
  • profil obrazu o wysokim kontraście i maksymalnie podbitym nasyceniu – im bardziej kanały czerwony, zielony i niebieski będą się od siebie różnić, tym więcej informacji zostanie podane na kodek – tę różnicę zapewnia właśnie wysokie nasycenie

Poniżej zamieszczamy obrazy. Są to nieobrobione stopklatki nagrane aparatem Sony A7s. Prezentujemy po dwa obrazy dla każdego z kodeków – jeden wycięty z początku filmu, kiedy scena została zakodowana z wysoką przepływnością („najlepszy możliwy” przypadek) i drugi wycięty po kilku sekundach, gdy kodek był przeciążony (analogicznie – przypadek najgorszy). Każdy wycinek prezentujemy w oryginalnym rozmiarze oraz w 4-krotnym powiększeniu. Uwaga – pliki są duże, mogą się chwilę ładować

 

1. AVCHD – początek nagrania, dobra jakość

2. AVCHD – dalszy fragment nagrania, słaba jakość

 

3. XAVC S – początek nagrania, dobra jakość

 

4. XAVC S – dalszy fragment nagrania, słaba jakość

To właśnie te „najgorsze” przykłady najlepiej ilustrują różnicę między współczesnym XAVC S i nieco starszym oraz dysponującym mniejszą przepływnością AVCHD. O ile pierwszy z kodeków z sytuacji kryzysowej wychodzi „z twarzą” a obraz nigdy nie doznaje poważnej degeneracji, o tyle różnice między „dobrym” a „złym” AVCHD rzucają się w oczy dość mocno – od zaburzonego kształtu koła, przez nieostrości po widoczne gołym okiem makrobloki (większość kodeków dzieli obraz na kwardaty 8×8 pikseli zwane makroblokami i to w ich obrębie dokonuje kompresji; jeśli kompresja jest zbyt silna, granice makrobloków stają się widoczne).

Czy z takimi sytuacjami spotkamy się w sytuacjach praktycznych? Ależ jak najbardziej. Czasem wystarczy kręcone z ręki ujęcie bogatej w detale fasady zabytkowego budynku lub dynamiczny ruch na stedicamie np. przez las. Osobiście najbardziej spektakularny przykład takiego zachowania odnotowałem kręcąc z ręki małą amatorską kamerą mini-relację z targów rękodzieła. W starciu z misternymi detalami biżuterii nagranymi na końcu długiej panoramy kodek poległ. Nieobrobioną stopklatkę poniżej wyciąłem ze statycznego kadru z ostrością ustawioną we właściwy punkt.

Ujęcie wylądowało w koszu, a ja ostatecznie przekonałem się tamtego dnia, że dobry kodek to nie tylko hasło marketingowe. Obyśmy wszyscy mieli do czynienia tylko z tymi dobrymi.