Aby ułatwić czytanie i korzystanie z tego dość obszernego dokumentu
jego poszczególne elementy sformatowano zależnie od ich
treści
oraz od istotności poznania tej treści dla poznania sposobu kompresji
za pomocą enkodera mpeg-4 xvid.
Zwykłym tekstem opisano rzeczy podstawowe i właściwie niezbędne
do właściwej i świadomej konfiguracji enkodera.
Przeczytanie tej części w zasadzie powinno nam wystarczyć
do uzyskania zadowalających efektów kompresji, jak i do
uniknięcia
niepewności co do zastosowania danego elementu.
Pismem pogrubionym
zaznaczono hasła występujące w enkoderze
i słowa-klucze niezbędne
do poznania istoty kompresji,
ułatwiając w ten sposób ich znalezienie i podkreślając ich
wagę.
Kursywą opisano rzeczy
nie związane bezpośrednio
z omawianym właśnie
zagadnieniem, ale w sposób istotny wpływające
na ustawienia enkodera i
będące kluczowe dla pożądanego efektu.
Kolorem zielonym
opisano technologię działania kodeka.
Jej poznanie nie jest
niezbędne, ale umożliwia
w pełni świadome
korzystanie z danych opcji.
Kolorem szarym
opisano ciekawostki związane pośrednio
z omawianym
zagadnieniem, ale nie związane z kodekiem xvid.
Dodatkowo poniżej znajdzie się spis treści, który pozwali
na
łatwe i szybkie odszukanie określonych zagadnień.
Albo zrobię okrojoną wersję tej strony - tak będzie najlepiej:)
Xvid jest jednym z najlepszych, dostępnym za darmo enkoderem
mpeg-4
oferującym prawie pełną implementacje
ISO 14496-2 (video)
Moving Pictures Expert Group 4, chapter 9, level 5 :)
czyli Advanced Simple Profile (ASP)
(również Simple Profile i wszystkie profile Divx5)

Powyżej
widzimy
główne okno ustawień Xvida.
Profile @ level
tutaj wybieramy jaki profil MPEG-4 będziemy używać.
Przycisk more...
po prawej prowadzi do dodatkowych opcji.
Encoding Type
- wybór liczby przebiegów kodowania.
Target bitrate / Target
quantizer
- ustawienie przepływności kbps
lub ustawienie stopnia degradacji obrazu (ustawienie quantizera).
Obok jest Kalkulator,
który policzy nam
jaki bitrate powinien mieć film, aby wejść
na
CD.

Powyżej widzimy okno z dodatkowymi ustawieniami
parametrów kompresji.
W zasadzie nie licząc tak podstawowych parametrów jak
bitrate i liczba przebiegów
są to najważniejsze, podstawowe parametry.
Również tutaj mamy dostęp do profili mpeg i
poziomów.
Profile są standardami określającymi nam możliwość użycia określonych
metod kompresji
takich jak np. użycie GMC czy Qpel, ale również określają
one poprzez swoje poziomy
maksymalną rozdzielczość, liczbę kletek na sekundę, bitrate* itp.
W zakładce Level
widzimy dokładnie na co który poziom danego
profilu pozwala.
*
UWAGA! Aby
enkoder zastosował się w pełni do standardów danego profilu
dotyczącego maksymalnej
chwilowej i średniej przepływności bitów,
należy użyć trybu
dwuprzebiegowego kompresji (2pass),
gdyż inaczej algorytmy
vbv - video bufer verifier nie zostaną użyte!
Dodatkowo opcja ta jest
dostępna od wersji kodeka 1.1,
przy czym dopiero w
najnowszej jak na obecną chwili wersji beta 2
działają one prawidłowo
w przypadku profili divx5.
Advanced
Simple Profile - AS @ L5
W zasadzie podstawowy profil mpeg4,
często określany jako "divixy".
Polecam stosować jego poziom piąty,
co umożliwia nam uzyskanie filmów
w formacie PAL lub NTSC z wykorzystaniem
wszystkich standardowych opcji.
Simple
Profile - mniejszy brat ASP,
mniejsza rozdzielczość, fps i bitrate'y
Advanced Realtime Simple
Profile - ARTS
Profil do strumieniowania wideo w internecie.
Obecnie niedostępny, a dostępny w pierwszej becie xvida 1.1
Usunięto go ze względu na zerową przydatność
najczęściej stosowanego formatu przechowywania
strumienia wideo AVI do transmisji na żywo w internecie,
oraz ze względu na różnice miedzy nim, a profilem ASP.
Divx Networks Home
Theatre Profile - DXN HT
Jest to profil umożliwiający uzyskanie filmów
w pełni zgodnych z divx5 (jednak o lepszej jakości),
przeznaczonych na stacjonarne odtwarzacze
z certyfikatem (logiem) divx.
Od profilu ASP różni się brakiem Qpel i GMC
oraz innymi wartościami przepływności bitów,
co jest wymuszone przez ograniczone możliwości
chipów dekodujących wideo w stacjonarnych odtwarzaczach.
Aby uzyskać pełną zgodność i wykorzystać mechanizm
video buffer verifier nalezy obraz kodować dwuprzebiegowo.
Z doświadczenia wiem jednak, że dane wartości 4000kbps
są w filmach na jednym lub dwóch CD rzadko przekraczane
i chwilowy bitrate nie "zapcha" nam buforów w odtwarzaczu,
a jeśli nawet to będzie to się objawiało kilkusekundowym
"przycinaniem" się obrazu, a nie niemożliwością odtworzenia filmu.
Dodatkowo w większości przypadków wystarczy zastosować
profil ASP,
bez użycia GMC lub Qpel aby uzyskać materiał
odtwarzalny na stacjonarnych urządzeniach.
Inne profile Divx
Networks - DXN
Handheld -
profil do urządzeń typu komórki itp.
W zasadzie niewykorzystywany - nie przyjął się.
Jego główną cechą jest rozdzielczość 1/4 PAL,
15 klatek na sekundę i bitrate do 600kbps
Portable -
profil do urządzeń przenośnych
zarówno NTSC jak i PAL, oferujący połowę
pełnej rozdzielczości i pełną liczbę klatek na sekundę.
HDTV -
profil wysokiej rozdzielczości
w standardzie 720p - 720 poziomych linii
i progresywne skanowanie obrazu (bez przeplotu)
Na razie niedaleka przyszłość
Unrestricted
- profil nieograniczony.
Można stosować dowolne rozdzielczości, bitrate'y
i dowolną liczbę klatek na sekundę,
jak i dowolne elementy i bajery kodeka;)
Jednak jak już wspomniałem optymalnym ustawieniem jest AS @ L5
Quantization type
- rodzaj kwantyzacji. Od tego zależy jakość skompresowanego materiału.
Kompresja wideo za
pomocą kodeka mpeg4 polega między innymi* na tym,
że obraz
dzielony jest
na bloki, a następnie za pomocą algorytmu DCT -
Dicrete Cosine
Transform dokonywana jest analiza częstotliwościowa tego obrazu.
Otrzymujemy w jej
wyniku macierz o rozmiarach 8x8, której
poszczególne elementy
wskazują na ilość
składowych o danej częstotliwości.
Jest to więc
charakterystyka częstotliwościowa danego bloku
opisująca dany obraz.
*inne
elementy tej kompresji - np. kompresja ruchu - zostaną opisane dalej.
Podobnie
działają kodeki MP3 np. LAME, które wykorzystują FFT -
szybką
transformację
Fouriera do opisywania fali dźwiękowej
nie w funkcji
amplitudy, a w funkcji częstotliwości.
Zaletą
częstotliwościowego opisu obrazu jest to,
że możemy zmniejszyć
precyzję zapisu określonych,
mniej rozpoznawalnych
przez ludzkie oko częstotliwości,
lub nawet usunąć
całkowicie informacje o niektórych z nich,
podczas gdy zabiegi
takie na obrazie w postaci amplitudowej są niemożliwe,
a wszelka ingerencja
w precyzję zapisu ich wartości powodowała by
wyraźnie widoczną
jego degradacje przy jednocześnie niewielkiej wydajności
(stopniu kompresji).
Wadą opisu obrazu za
pomocą DCT jest to, że algorytm ten opisuje
stałe, powtarzające
się wzory oraz to, że przy wyższych stopniach
kompresji z powodu
braku części składowych obrazu
powstają
charakterystyczne artefakty kompresji "śmiecie"
(zwłaszcza przy
ostrych krawędziach gładkich powierzchni).
Powyżej znajduje się
powiększony 4x obraz "śmieci"
Zwróćcie
uwagę na to, że wystające na białe tło "zęby"
mają dokładnie 8x8
pikseli.
Pierwotny obrazek zawierał tylko podstawowe kolory,
bez żadnych różnych odcieni i tekstur.
Kolejnym artefaktem
wynikającym z kompresji jest to,
że przy płynnych
gradacjach, czyli przejściach tonów,
brzegi sąsiednich
bloków mogą nie pasować do siebie kolorystycznie
tworząc "bloki".
Dzieje się tak
dlatego bo sąsiadujące ze sobą bloki
nie mają na siebie
wpływu, ani się do siebie nie odwołują.
Powyżej znajduje się
wycięty obraz "bloków" w skali 1:1
Efekt
bloków i śmieci można zmniejszyć
stosując
postprocessing
w dekoderze.
Istnieją
algorytmy pozwalające zapisywać i kompresować obraz
bez
tych artefaktów. Kompresja typu wavelet (falkowa)
pozwala
na zapisywanie skończonych ciągów, podczas gdy DCT i FFT
opisują
powtarzający się wycinek nieskończonego ciągu.
Jednak
taka transformacja nie jest w standardzie mpeg4 opisana.
Stosuje
ją mocno eksperymentalny kodek video "snow", oraz JPEG2000.
Jak już wcześniej
wspomniano ludzkie oko różnie reaguje na różne
częstotliwości,
to znaczy im wyższa
częstotliwość, czyli im szczegóły są drobniejsze,
tym są mniej
zauważalne przez oko.
Podobnie jest w
przypadku obiektów poruszających się,
oraz drobnych
szczegółów na tle dużych lub kontrastowych
elementów.
Według słownika języka
polskiego kwantyzacja
oznacza
2.
techn.
«zastąpienie opisu ciągłego przebiegu danej wielkości
(np. sygnału
elektrycznego) opisem nieciągłym
za pomocą tylko niektórych wartości
przyjmowanych przez przebieg ciągły; kwantowanie»
Według wikipedii
proces kwantyzacji
aproksymuje
poziomy analogowe najbliższymi poziomami cyfrowymi.
Liczba tych
poziomów jest ograniczona,
dlatego aproksymacja
może powodować błędy
zwane błędami kwantyzacji.
Większa liczba
poziomów zmniejsza te błędy.
Czyli podczas kwantyzacji dyskretne, o nieskończonej dokładności
wartości danych częstotliwości są zapisywane za pomocą określonej
liczby poziomów. Bezpośrednio po konwersji DCT liczba
poziomów jest duża
i prawdopodobnie tak zapisany obraz mógłby zająć więcej
miejsca niż oryginał.
Dlatego też uzyskane wartości dzieli się i zaokrągla do wartości
całkowitej,
a następnie kompresuje bezstratnymi algorytmami kompresji.
Konkretne uzyskane wartości dzieli się przez odpowiadające im
współczynniki
z danej macierzy kwantyzacji. W ten sposób kontrolujemy
rozkład danych
pomiędzy niskie i wysokie częstotliwości obrazu,
a także ich ogólny poziom degradacji.
Standardowe wartości w macierzach kwantyzacji wynoszą
od 16 dla najniższych częstotliwości (8 w przypadku klatek kluczowych)
do około 40 w macierzy mpeg lub 100-150 w macierzach typu hvs*
Oznacza to, że liczba poziomów jakie może
przyjąć dana częstotliwość
zmniejsza się 16 razy lub ponad 100krotnie!
Jeśli po procesie dzielenia i zaokrąglania wyjdzie nam zero
informacja danej częstotliwości jest całkowicie i nieodwracalnie
usuwana.
*
szczegółowe objaśnienie przy opisie macierzy mpeg-custom
Dodatkowo uzyskane wartości są dzielone przez współczynnik
kwantyzacji - quantizer,
który przyjmuje wartości od 1 do 31 i to za jego pomocą
reguluje się
stopień kompresji poszczególnych bloków, klatek
jak i całego filmu.
Więcej informacji o quantizerze jest w dalszych częściach tekstu.
PRZYKŁAD:
Po konwersji DCT cztery
kolejne elementy
otrzymanej macierzy mają
następujące wartości:
128 135 135 140
Odpowiadające im dzielniki
z macierzy kwantyzacji to:
16
16 17 18
I dodatkowo film
kompresowany jest z quantizerem równym 4,
co po podzieleniu daje nam
następujące wartości:
128/16/4=2,0000 co daje po zaokrągleniu 2
135/16/4=2,1093 co daje po
zaokrągleniu 2
135/17/4=1,9852 co daje po
zaokrągleniu 2
140/18/4=1,9444 co daje po zaokrągleniu 2
Czyli po procesie
kwantyzacji dany szereg
128 135 135 140
zamienił się w następujący
szereg:
2
2 2 2
Po zastosowaniu dalszych
bezstratnych (huffman) sposobów kompresji
(podobnych do
tych z kompresorów typu zip i rar)
zapisuje się to jako
"cztery dwójki", "4x2"
a sekwencja zer, która zwykle powstaje na końcu takiego
szeregu
zastępowana jest znakiem EOB - końca bloku.
Podczas dekodowania cały proces jest odwracany i otrzymujemy:
2*4*16=128
2*4*16=128
2*4*17=136
2*4*18=144
Czyli oryginalny ciąg:
128 135 135 140
Zmienia się w:
128 128 136 144
Błędy poszczególnych składowych wynoszą odpowiednio:
0 -7
1 4
Są to wartości małe w porównaniu do wartości pierwotnych,
wynoszą około 5% w tym przykładzie,
jednak to powodują właśnie "zachwiania" poziomu jasności
i odcienia pikseli widoczne jako "śmieci",
oraz niedopasowanie brzegów bloków, czyli "bloki".
Ogólnie określamy to mianem szumu kwantyzacji,
który jest tutaj dodatkowo spotęgowany przez kompresję.
(Oryginalne wartości nigdy nie były by całkowite i wynosiły by
np. 128,024212. Pewna degradacja jest tutaj efektem sposobu
oraz dokładności obliczeń jak i zapisu uzyskanych wartości)
Powyższy przykład jest
sporym uproszczeniem,
(wg wikipedii
po drodze jest jeszcze przesunięcie wartości o -128)
ale daje pojęcie w jaki
sposób dokonywana jest kompresja obrazu.
No więc przechodząc do rzeczy wybierając sposób kwantyzacji
wybieramy sposób traktowania danych uzyskanych po
transformacji DCT.
Xvid daje nam tutaj trzy podstawowe możliwości:
H263 - jest
to sposób kwantyzacji, który silnie wykorzystuje
właściwości adaptacyjne ludzkiego oka, mocniej kompresując
lub usuwając wyższe częstotliwości składowe z obrazu.
dzięki temu przy niskich bitrate'ach obraz jest lekko "wygładzony",
ale nie występuje w nim zbyt silnie efekt "bloków".
Ten typ kwantyzacji jest polecany dla filmów na 1CD
lub przy jakości (Qf) skompresowanego materiału poniżej 0,180
bitów na piksel
(GSpot
2.5 pokazuje parametr Qf zakodowanego już filmu)
Historycznie rzecz biorąc kwantyzacja H.263 pochodzi ze standardu
ITU H.263, który był pierwowzorem do stworzenia standardu MPEG4 ASP.
Natomiast kwantyzacja MPEG wywodzi się prawdopodobnie ze standardu H.262
który jest wspólnym standardem ITU i MPEG i znany jest jako MPEG-2
MPEG - jest
to sposób kwantyzacji zaczerpnięty z formatu mpeg-2
Oferują on wyższą jakość poprzez niższą kompresję wysokich
częstotliwości składowych obrazu. Stosuje się go przy 2 CD
Jednak przy niskich bitrate'ach powoduje on występowanie
bloków.
Dodatkowo jego wadą jest występowanie "śmieci" (są bardziej widoczne
niż w przypadku H.263)
Oba
te rodzaje kwantyzacji oprócz różnego traktowania
poszczególnych częstotliwości składowych różnią
się jeszcze
innym sposobem zapisu oraz otrzymywania danych.
Zaletą kwantyzacji MPEG jest możliwość określenia
macierzy z własnymi wartościami wagowymi
dla poszczególnych częstotliwości.
MPEG Custom
- ten sposób kwantyzacji jest moim zdaniem najlepszy
i najbardziej uniwersalny. Jest on identyczny z MPEG,
z tą różnicą, że używa on innych macierzy kwantyzacji.
Dzięki temu możemy wybrać sami jak mają być traktowane
wysokie i niskie częstotliwości.
Istnieją płaskie macierze, gdzie są same 8 lub 16
i wszystkie częstotliwości traktowane są tak samo -
te macierze polecam do archiwizacji i zapisu wideo
przy niewielkich stratach - wystarczy wtedy ustawić
kompresje na stały quantizer równy 1 lub 2 i wyłączyć klatki B
oraz inne optymalizacje typu trellis, lumi masking itp (VHQ może zostać).
Istnieją również macierze gdzie wyższe częstotliwości
są kompresowane mocniej, np. macierze Andreasa lub Jawora,
a także macierze podobne do macierzy mpeg
gdzie stopień kwantyzacji parząc na główną przekątną macierzy
(od lewego górnego, do prawego dolnego rogu)
rośnie liniowo.
Są też macierze "high" compression" gdzie wysokie częstotliwości
(prawy dolny róg) lub prawa strona macierzy (2 lub 4 kolumny)
mają wartość o wiele wyższą (99-255) niż pozostałe wartości (16-32)
Najlepsze są jednak macierze HVS - Human Visual System
(...)
Adaptive Quantization
- Dawniej zwane lumi
masking.
Ludzkie oko ma taką właściwość, że oprócz "mniejszej
czułości"
na wysokie częstotliwości składowe obrazu (ostre drobne
szczegóły)
wykazuje również braki w postrzeganiu
szczegółów
w jasnych i ciemnych partiach obrazu, zwłaszcza jeśli jasność tego
obrazu
wykazuje spory kontrast. Podobnie nie jesteśmy w stanie zauważyć
szczegółów
na szybko poruszających się obiektach.
Włączenie tego powoduje mocniejszą kompresję ciemnych i bardzo jasnych
obszarów klatki, oraz obszarów na
których jest duży ruch.
Są to fragmenty obrazu na których ze względu na jasność lub
duży ruch
nie jesteśmy w stanie dostrzec szczegółów obrazu.
Można je więc mocniej skompresować.
W praktyce wygląda to tak, że dane bloki otrzymują
większy quantizer (dzielnik) niż reszta klatki.
W praktyce stosowanie adaptive quantization zależy od preferencji
użytkownika, oraz charakteru kompresowanego materiału.
Przy wysokim bitracie adaptive quantization pozwoli nam
zmniejszyć wynikowy plik bez widocznej utraty jakości,
lub zaoszczędzić te bity na inne fragmenty filmu.
Jednak w takich plikach jakość jest i tak dobra,
więc nie zauważymy wiekzej róznicy.
Przy niskim bitrate teoretycznie korzyści
ze stosowania tej techniki powinny być większe
(i tutaj adaptive quantization byłoby najbardziej polecane),
jednak to zależy od konkretnego przypadku...
Raz mi się zdarzyło kompresować pewien krótki materiał
z bardzo dużym
stopniem kompresji
(4 minuty, ~20MB z dźwiękiem przy zwykłej rozdzielczości -
testowałem możliwość uzyskania jak najmniejszego pliku
o zadowalającej mnie jakości).
Po włączeniu adaptive quantization okazało się,
że scena na której widać pokój w
półmroku
została mocniej skompresowana i wyraźnie przekompresowana
w stosunku do kompresji bez tego...
Tak naprawdę nie jestem w stanie powiedzieć kiedy
adaptive quantization się sprawdzi, a kiedy nie -
należy zrobić testy i porównać wyniki.
Niektórzy mogą nawet nie zauważyć czegoś,
co inni uznają za wadę dyskwalifikującą.
Interlaced encoding -
powoduje zakodowanie materiału z przeplotem.
Nie jest to
filtr usuwający przeplot!
Włączenie tej opcji spowoduje jedynie oddzielne zakodowanie
poszczególnych pól obrazu. Niby kodowanie 50
pól na sekundę
powinno dać gorszy wynik niż kodowanie 25 klatek na sekundę,
ale należy pamiętać, że te pola mają tylko połowę pionowej
rozdzielczości
klatek, oraz nie występują w nich artefakty przeplotu - grzebienie
z naprzemiennych przesuniętych wobec siebie poziomych linii,
które
tworzyły by wzory o wysokiej częstotliwości, co znacznie utrudniało by
kompresję.
Uwaga! nie
należy zmieniać pionowej rozdzielczości materiału
z przeplotem przed jego usunięciem (decomb, TomsMoComp),
lub jeśli zamierzamy zachować jego strukturę
(np. film z kamery DV podczas przerabiania na DVD)
Przeplot spotykamy w materiałach pochodzących z tv
oraz kamer wideo. Nie powinien on natomiast występować
w filmach nagranych dla kina na celuloidzie,
również jeśli są puszczane w tv - wtedy jednak
należy sprawdzić jego obecność osobiście!
Można też sprawdzić strukturę wejściowego materiału w gspocie
(parametr I/L w sekcji Video -> time)
W systemie NTSC
kinowy film, który ma 24 klatki na sekundę
jest spowalniany do 23,976fps, a następnie jest rozciągany
(proces ten nazywa się telecine)
do 29,97fps.
Odbywa się to tak, że część klatek jest wyświetlana
przez "półtorej klatki" tj. następna klatka posiada jedno z
pól
z poprzedniej i jedno z następnej klatki. Dzięki temu mamy 3 klatki
"progresywne" bez przeplotu a potem dwie klatki,
które zawierają pola z dwóch sąsiednich klatek,
przez co występuje w nich efekt przeplotu...
W ten sposób dostosowywują oni (amerykanie i japończycy)
24 klatki kinowe do swoich wyświetlających 30 klatek
telewizorów.
Nie należy takiego materiału traktować filtrami do usuwania przeplotu,
lecz filtrami do inverse
telecine - IVTC.
Filtry te odbudują nam progresywny materiał z 23,976 fps bez strat!
Filtr taki jest wbudowany w Virtual dub mod
(video -> frame rate -> 3:2 pulldown-> reconstruct
from fields - adaptive)
Jednak nie jest on idealny (czasem się gubi i zostawia klatki z
przeplotem,
zwłaszcza tam gdzie jest mało ruchu) i dlatego lepiej stosować
filtr decomb razem z avisynthem.
Szerszy opis wykonywania IVTC za pomocą decomb
opisałem w tutorialu mp4.
Quarter pixel
motion estimation - Qpel ME
Opcja ta umożliwia kompresję
ruchu używając
wektorów ruchu, których dokładność wynosi 1/4
piksela.
Dzięki wyższej dokładności zapisu ruchu poszczególnych
bloków
otrzymujemy ostrzejszy obraz, gdyż w skutek niedokładności przesunięć
wraz z każda klatką początkowo zakodowany, ostry obraz rozmywa się.
Nigdy w naturze nie spotkamy się z takim ruchem, aby dany obiekt
przesunął się o całkowita liczbę pikseli.
Ponieważ w nowym położeniu bloki nie będą idealnie spasowane z obrazem,
wraz z każdą klatką ostrość ich obrazu będzie się degradować.
Użycie Qpel pozwoli zahamować ten proces.
Wg. tego co wyczytałem na forum.doom9.org qpel nie poprawia jakości wideo.
Użycie qpel powoduje powstawanie charakterystycznej ziarnistości filmu,
rośnie też współczynnik PSNR - wyrażona w decybelach róznica
miedzy oryginałem a skompresowanym materiałem.
Nie zwiększa też stopnia kompresji. Qpel używa do zapisu
każdego wektora ruchu dwóch bitów więcej.
Jednak końcowy efekt jest opłacalny na tyle,
że następca mpeg4 ASP - AVC, a konkretnie X264 używa qpel
nawet przy ustawionym najniższym poziomie poszukiwań ruchu.
Należy jednak pamiętać, że obecnie mało jest stacjonarnych odtwarzaczy
divx,
które są w stanie zdekodować film skompresowany z Qpel,
Dlatego jeśli nasz film miałby być oglądany przy pomocy stacjonarnego
odtwarzacza divx, to należy Qpel wyłączyć!
GMC - Global motion
compensation
Czyli globalna kompensacja ruchu:)
Ruch kamery prawo-lewo, góra-dół wszelkie skręty
i powiększenia
powodują, że wektóry ruchu (które opiszę dalej)
układają sie tak,
że można je razem wszystkie przewidzieć i zapisać w prosty
sposób.
GMC działa tak, że określa prostokąt zawierajacy kilkanascie
makrobloków,
których wektory ruchu można wyliczyć na podstawie
wektórów bloków,
które znajują sie na rogach tego prostokąta.
Te wektory na rogach nazywane są warp
pointami.
Jednak nie wszystkie cztery są zawsze wykorzystywane.
Dla prostszych ruchów wystarczy zapisać ich mniej -
obliczenia i kalkulacje prowadzące do zrekonstruowania wszystkich
wektorów ruchu dla wszystkich bloków są wtedy
znacznie prostsze.
Xvid uzywa maksymalnie 3 warp pointów. Czasem używa
dwóch.
Divx5 używa tylko jednego, a divx6 dwóch, co powoduje że:
- poprawa stopnia kompresji jest niewielka (i tak jest znikoma)
- nie zostało to więc uwzględnione w profilach sprzetowych divx
- wszelkie procesory odtważające divxy na stacjonarnych playerach
mają (jeśli w ogóle mają) wbudowana obsługę co ponajwyżej
jednego warp pointa
(a co za tym idzie nie obsłużą 3 warp pointów z xvida)
Dodatkowo GMC xvida jest mało zpotymalizowane,
przy ustawieniu VHQ=1 włączenie klatek GMC powoduje u mnie
spadek wydajności z około 20fps do około 3fps
(przy kodowaniu klatek typu S - sprite vob zawierające GMC)
Widać to wyraźnie, w oknie encoding status -
trzeba na nie o wiele dłużej czekać.
Dlatego odradzam stosowania GMC przy zwykłej kompresji.