===== Kodek MJPEG =====

Algorytm MJPEG należy do najczęściej stosowanych podczas przechwytywania formatów kompresji obrazu. Format ten wykorzystywany jest zarówno przy kompresji sprzętowej jak również tylko programowej. Idea polega na kompresji każdej klatki filmu i oddzielnie z zastosowaniem algorytmu JPG.      

W tym przypadku schemat kompresji wygląda następująco:                

  RGB --> Konwersja do YUV --> Dyskretna transformacja kosinusowa --> Kodowanie Huffmana --> Plik AVI


Po dokonaniu konwersji obrazu z formatu RGB na YUV (docelowo YUV 4:2:0) każdy z trzech obrazów jest dzielony na bloki o wielkości 8x8 pikseli. Następnie na każdym z tych bloków dokonywana jest seria obliczeń, nazywana dyskretną transformacją kosinusową

=== Dyskretna transformata kosinusowa ===

Polega na zamianie sygnału ciągłego luminacji i chrominacji na reprezentację dyskretną w tzw. przestrzeni kosinusowej. W ramach tego procesu najpierw obliczana jest macierz współczynników transformacji, zawierająca informację o częstości występowania poszczególnych pikseli. 
Macierz ta następnie poddawana jest procesowi kwantyzacji (dyskretyzacji). Tutaj z kolei następuje zamiana funkcji ciągłej na postać próbkowaną. Czyli co określony okres czasu (kwant) określona jest jej wartość (próbkowanie). Następuje więc zamiana zapisu analogowego na cyfrowy. 
Jakość obrazu, a więc również stopień kompresji, zależy przede wszystkim od parametrów kwantyzacji. Im krótszy okres wybierzemy do pobrania próbki (wartości), tym jakość będzie lepsza a stopień kompresji mniejszy - ale potrzeba będzie więcej miejsca na zapisanie tych danych (i odwrotnie). 

=== Kodowanie Huffmana ===

Ma na celu zmniejszenie objętości macierzy. Pozwala to na bezstratne zmniejszenie ilości informacji, a polega na przypisaniu poszczególnym powtarzającym się ciągom pewnych kodów. Wartościom występującym często, a wiec zajmującym najwięcej miejsca przypisywane są krótkie kody, a występującym rzadko długie kody. Wszystko to jest określone w specjalnej tabeli służącej później do ich odkodowania. 

W końcowym wyniku otrzymujemy plik AVI z dźwiękiem lub bez, zależnie od konkretnych możliwości. Cechą charakterystyczną jest to, że każda klatka jest klatką kluczową. Więc edycja takiego materiału jest łatwa. 

Proces dekompresji przebiega oczywiście w odwrotnym kierunku 

===== Kodek MPEG =====

W tym kodeku osiągnięto większy stopień kompresji wykorzystując fakt, że klatki sąsiadujące ze sobą są bardzo podobne do siebie. Większa część informacji dla klatek opisujących daną scenę jest taka sama. W związku z tym pojawiła się idea opisywania tylko zmian w stosunku do sąsiednich klatek, wykorzystana właśnie w formacie MPEG. 

Proces kompresji w zarysie wygląda następująco: 

  RGB --> Konwersja do YUV --> Dyskretna transformacja kosinusowa --> Kompensacja ruchu --> Kodowanie Huffmana --> FILM 


=== Typy klatek ===

W strumieniu zakodowanym kodekiem MPEG występują 3 typy klatek: klatki I (Intra) - kluczowe, klatki różnicowe (delta): P (Predictive) i B (Bidirectional) opisujące tylko zmiany między klatkami. Są one poddawane kompresji.  

  * **Klatki I** - kluczowe, zawierają pełną informację o obrazie i są kompresowane podobnie jak w przypadku algorytmu MJPEG (czyli mamy tutaj do czynienia z kompresją wewnątrzklatkową, informacja w niej zapisana jest niezależna od informacji w innych sąsiadujących, tj. poprzedzających i następujących klatkach). Mają one największą objętość. W przypadku MPEG2 co 12 klatka jest klatką kluczową (dla PAL, w NTSC co 15). 
  * **Klatki P** - są tworzone na podstawie najbliższej, co nie znaczy sąsiedniej, poprzedzającej ją klatki I lub P. 
  * **Klatki B** - są tworzone na podstawie poprzedzających ją i następujących po niej klatek I i P. Podlegają one największej kompresji, a więc zawierają najmniej informacji, niosą więc obraz najgorszej jakości. 

Klatki I, P, B układane są w określone sekwencje nazywane w skrócie GOP (Group Of Pictures). Zawsze pierwszą klatką w grupie jest klatka I, stanowi ona pukt odniesienia dla kodowania pozostałych klatek P i B. Długość i kolejność ramek w grupie może być regulowana, co ma wpływ na jakość i stopień kompresji obrazu (łatwo można to zobaczyć dokonując ustawień zaawansowanych we właściwościach MPEG dla kodeka MPEG1 i MPEG2). Dla MPEG2 grupa może składać się np. z 12 klatek o następującej kolejności IBBPBBPBBPBBI. Pomimo takiego ułożenia klatek w grupie klatki nie są kodowane w tej kolejności. Proces kompresji dotyczy zawsze całej grupy GOP. Najpierw kodowana jest początkowa klatka I, następnie na jej podstawie najbliższa klatka P, czyli w tym przypadku 4 klatka. Następnie po kolei klatki P, na podstawie poprzedzających ich klatek. Dla przykładu, w naszym wypadku: 7 klatka na podstawie klatki 4, 10 na podstawie 7 itd. Po zakodowaniu wszystkich klatek P, dopiero następuje kompresja klatek typu B, które wypełniają pozostałe miejsce pomiędzy klatkami I i P. tworzone są one w oparciu o poprzedzające je i następujące po nich klatki I i P.

 
Każdą klatkę dzieli się na bloki, w przypadku MPEG2 o wymiarach 16x16 pikseli i dla każdego z nich oblicza się kompensację ruchu. Polega ona na określeniu przesunięcia bloku, zmiany kolorów, kąta patrzenia kamery w stosunku do sąsiednich klatek. Istotną różnicą standardu MPEG4 w stosunku do MPEG1 i 2, jest dopuszczalność kompesacji ruchu obszarów o dowolnych kształtach a nie tylko 16x16 lub 8x8 pikseli.
Procesy Dyskretnej transformacji Kosinusowej i Kodowania Huffamna są oparte na takich samych zasadach jak w przypadku formatu MJPEG. 

===== Linki zewnętrzne =====
[[http://pl.wikipedia.org/wiki/Mpeg]]  MPEG na //pl.wikipedia.org//

Jesli ktos potrzebuje czegos naprawde zrozumialego:
[[http://www.lo.stary-sacz.iap.pl/text/piotr/repr_inf/rep_an_film.ppt]]
(opracowanie na podstawie tej właśnie prezentacji)