11.4. Kódolás az `Xvid` codec-kal
Előző | 11. fejezet - Kódolás a MEncoderrel | Következő

## 11.4. Kódolás az `Xvid` codec-kal

Az `Xvid` egy szabad függvénykönyvtár MPEG-4 ASP videó stream-ek elkódolásához. A kódolás megkezdése előtt be kell állítanod a MEncoderben a támogatását.

Ez a leírás főként hasonló információkat szeretne nyújtani, mint az x264 kódolási leírás. Ezért, kérlek kezdd azzal, hogy elolvasod azon leírásnak az első részét.

### 11.4.1. Milyen opciókat kell használnom, ha a legjobb eredményt akarom?

Kezdésként nézd át az MPlayer man oldalának `Xvid` részét! Ez a rész csak a man oldal kiegészítéseként használható.

Az Xvid alapértelmezett beállításai egyensúlyt teremtenek a sebesség és a minőség között, így nyugodtan használhatod azokat, ha a következő rész túl zavarosnak tűnik.

### 11.4.2. Az `Xvid` kódolási opciói

- vhq Ez a beállítás a makroblokk döntési algoritmust érinti, minél nagyobb a beállítás, annál okosabb a döntés. Az alapértelmezett érték bátran használható minden kódoláshoz, míg a nagyobb értékek segítik a PSNR-t de jelentősen lassabbak. Kérlek vedd figyelembe, hogy a jobb PSNR nem feltétlenül jelenti azt, hogy a kép jobban fog kinézni, de közelebb lesz az eredetihez. A kikapcsolása észrevehetően felgyorsítja a kódolást; ha a sebesség kritikus számodra, megéri a cserét.

- bvhq Ez ugyan azt csinálja, mint a vhq, de a B-kockákon. Elhanyagolható a hatása a sebességre és kismértékben javít a minőségen (+0.1dB PSNR körül).

- max_bframes Az egymás után engedélyezett több B-kocka általában javítja a tömöríthetőséget, de több blokkosodási mellékhatást okoz. Az alapértelmezett beállítás jó kompromisszum a tömöríthetőség és a minőség között, de növelheted 3-ig ha ki vagy éhezve a bitrátára. Csökkentheted 1-re vagy 0-ra ha a tökéletes minőséget céloztad meg, de ekkor biztosan tudnod kell, hogy a forrásod bitrátája elég nagy ahhoz, hogy a kódolónak nem kell növelni a kvantálást, hogy elére ezt.

- bf_threshold Ez a kódoló B-kocka érzékenységét szabályozza, a nagyobb érték hatására több B-kockát használ (és fordítva). Ez a beállítás a `max_bframes`-szel együtt használható; ha bitráta éhségben szenvedsz, növelned kell mind a `max_bframes`, mind a `bf_threshold` értékét, míg ha növeled a `max_bframes`-t és csökkented a `bf_threshold`-ot, akkor a kódoló több B-kockát fog használni, de csak azokon a helyeken, ahol tényleg szükséges. A `max_bframes` alacsony értéke és a `bf_threshold` magas értéke nem túl bölcs döntés, mert ez arra kényszeríti a kódolót, hogy olyan helyekre is tegyen B-kockát, ahol nincs rájuk szükség, így csökkenti a vizuális minőséget. De ha kompatibilis akarsz maradni az egyedi lejátszókkal, amik csak a régi DivX profilokat támogatják (amik csak legfeljebb 1 B-kockát támogatnak sorban), ez az egyetlen lehetőséged a tömöríthetőség növelésére a B-kockák használatával.

- trellis Optimalizálja a kvantálási eljárást, hogy optimális arányt találjon a PSNR és a bitráta között, ami jelentős bitmegtakarítást engedélyez. Cserébe ezek a bitek a videóban máshol kerülnek felhasználásra, növelve az össz minőséget. Mindig ajánlott bekapcsolva hagyni, mert jelentősen befolyásolja a minőséget. Még ha neked a sebesség számít, akkor is ne kapcsold ki, amíg nem kapcsoltad ki a `vhq`-t és a többi CPU-éhes opciót nem állítottad a minimumra.

- hq_ac Bekapcsol egy jobb együttható kölcségbecslő módszert, ami kissé csökkenti a fájl méretet, kb. 0,15-0,19% között (ami kevesebb, mint 0,01dB-es PSNR növekedésnek felel meg), miközben jelentéktelen hatása van a sebességre. Ezért ajánlott mindig bekapcsolva hagyni.

- cartoon A rajzfilm tartalom jobb kódolására lett kitalálva és nincs hatása a sebességre, mivel csak a döntési heurisztikát tuningolja az ilyen típusú tartalomnál.

- me_quality Ez a beállítás a mozgás előrejelzés pontosságát vezérli. Minél nagyobb a `me_quality` érték, annál pontosabb lesz az eredeti mozgás előrejelzése és minél pontosabb ez, annál jobban közelíti majd az eredmény az eredeti mozgást.

  Az alapértelmezett érték jó a legtöbb esetben; így nem javasolt a változtatása, csak ha tényleg a sebesség számít, mivel minden a mozgás becslésével megmentett bit másra lesz felhasználva, növelve az össz minőséget. Ezért ne menj 5 alá és ezt is csak végszükség esetén állítsd be.

- chroma_me Javítja a mozgás előrejelzést úgy, hogy a számításba beleveszi a chroma (szín) információkat is, míg a `me_quality` csak a luma-t (grayscale) használja. Ez 5-10%-kal lassítja a kódolást, de eléggé javítja a vizuális minőséget a blokkosodási effektusok csökkentésével és csökkenti a fájl méretet kb. 1,3%-kal. Ha a sebesség érdekel, kapcsold ki ezt az opciót, mielőtt elkezdenél töprengeni a `me_quality` csökkentésén.

- chroma_opt A chroma képek minőségének javítása a célja az egyszerű fehér/fekete sarkoknál a tömörítés javítása helyett. Ezzel csökkentheted a "red stairs" effektust.

- lumi_mask Megpróbál kevesebb bitrátát adni a kép azon részeinek, amiket az emberi szem nem lát olyan jól, így a kódolónak lehetősége van a megspórolt biteket a kép sokkal fontosabb részeinél felhasználni. Ezen opció nyeresége a kódolás minőségének szempontjából erősen függ az egyéni beállításoktól és a megtekintéshez használt monitor típusától és beállításaitól (tipikusan egy világosabb vagy TFT monitoron nem fog olyan jól kinézni).

- qpel Növeli a várható mozgásvektorok számát a mozgás előrejelzés pontosságának növelésével halfpel-ről quarterpel-re. Az ötlet annyi, hogy a jobb mozgásvektorokért cserébe csökken a bitráta (ezért nő a minőség). Habár a quarterpel pontosságú mozgásvektorok kódolásához egy kicsivel több bit kell, a várható vektorok nem mindig adnak (sokkal) jobb minőséget. Elég gyakran a codec még mindig biteket biztosít az extra pontossághoz, de csak kicsi vagy semmilyen minőségi nyereség nincs cserében. Sajnos, nem lehet előre megmondani a `qpel` lehetséges nyereségeit, így kódolnod kell vele is és nélküle is, hogy biztosan tudd.

  A `qpel` majdnem dupla kódolási időt jelent és 25%-kal több feldolgozási erőforrást igényel a dekódolása. Nem minden asztali lejátszó támogatja.

- gmc Biteket próbál megspórolni bizonyos jeleneteknél úgy, hogy egy mozgásvektort használ az egész kockához. Ez majdnem mindig növeli a PSNR-t, de jelentősen lelassítja a kódolást (és a dekódolást is). Ezért csak akkor ajánlott használnod, ha a `vhq` a maximumra állítottad. Az `Xvid` GMC-je sokkal kifinomultabb, mint a DivX-é, de csak kevés lejátszó támogatja.

### 11.4.3. Kódolási profilok

Az Xvid támogatja a kódolási profilokat a `profile` opción keresztül, amivel az XVid videó folyam tulajdonságaiban olyan megszorításokat lehet előírni, amikkel az lejátszható marad az összes eszközön, ami támogatja a választott profilt. A megkötések a felbontásra, a bitrátára és bizonyos MPEG-4-es funkciókra vonatkoznak. A következő táblázat megmutatja, hogy melyik profil mit támogat.

| Szimpla | Fejlett szimpla | DivX
Profil neve | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 4 | 5 | Handheld | Hordozható NTSC | Hordozható PAL | NTSC házimozi | PAL házimozi | HDTV
Szélesség [pixelben] | 176 | 176 | 352 | 352 | 176 | 176 | 352 | 352 | 352 | 720 | 176 | 352 | 352 | 720 | 720 | 1280
Magasság [pixelben] | 144 | 144 | 288 | 288 | 144 | 144 | 288 | 288 | 576 | 576 | 144 | 240 | 288 | 480 | 576 | 720
Frame ráta [fps] | 15 | 15 | 15 | 15 | 30 | 30 | 15 | 30 | 30 | 30 | 15 | 30 | 25 | 30 | 25 | 30
Max átlagos bitráta [kbps] | 64 | 64 | 128 | 384 | 128 | 128 | 384 | 768 | 3000 | 8000 | 537.6 | 4854 | 4854 | 4854 | 4854 | 9708.4
Átlagos csúcs bitráta 3 mp-n keresztül [kbps] |  |  |  |  |  |  |  |  |  |  | 800 | 8000 | 8000 | 8000 | 8000 | 16000
Max. B-frame | 0 | 0 | 0 | 0 |  |  |  |  |  |  | 0 | 1 | 1 | 1 | 1 | 2
MPEG kvantálás |  |  |  |  | X | X | X | X | X | X |  |  |  |  |  |
Adaptív kvantálás |  |  |  |  | X | X | X | X | X | X | X | X | X | X | X | X
Átlapolt kódolás |  |  |  |  | X | X | X | X | X | X |  |  |  | X | X | X
Quarterpixel |  |  |  |  | X | X | X | X | X | X |  |  |  |  |  |
Globális mozgás-kompenzáció |  |  |  |  | X | X | X | X | X | X |  |  |  |  |  |

### 11.4.4. Kódolás beállítási példák

A következő beállítások példák különböző kódolási opciók kombinációjára, amik a sebesség vs minőség kérdést döntően befolyásolják ugyanazon cél bitráta mellett.

Az összes kódolási beállítást egy 720x448 @30000/1001 fps-es példa videón teszteltük, a cél bitráta 900kbps volt, a gép pedig egy AMD-64 3400+ 2400 MHz-en 64 bites módban. Mindegyik kódolási beállítás tartalmazza a kódolási sebességet (képkocka per másodpercben) és a PSNR veszteséget (dB-ben) a "nagyon jó minőséghez" viszonyítva. Kérlek vedd figyelembe, hogy a forrásanyagodtól, a géped típusától és a fejlesztésektől függően különböző eredményeket kaphatsz.

Leírás | Kódolási opciók | sebesség (fps-ben) | Relatív PSNR veszteség (dB-ben)
--- | --- | --- | ---
Nagyon jó minőség | `chroma_opt:vhq=4:bvhq=1:quant_type=mpeg` | 16fps | 0dB
Jó minőség | `vhq=2:bvhq=1:chroma_opt:quant_type=mpeg` | 18fps | -0.1dB
Gyors | `turbo:vhq=0` | 28fps | -0.69dB
Valós idejű | `turbo:nochroma_me:notrellis:max_bframes=0:vhq=0` | 38fps | -1.48dB

Előző | Fel | Következő
11.3. Kódolás a `libavcodec` codec családdal | Tartalom | 11.5. Kódolás az `x264` codec-kel