libavcodec
zajišťuje jednoduché enkódování do mnoha zajímavých video a audio formátů.
Můžete enkódovat do následujících kodeků (více méně aktuální):
Jméno video kodeku | Popis |
---|---|
mjpeg | Motion JPEG |
ljpeg | lossless (bezztrátový) JPEG |
jpegls | JPEG LS |
targa | Targa obrázek |
gif | GIF obrázek |
bmp | BMP obrázek |
png | PNG obrázek |
h261 | H.261 |
h263 | H.263 |
h263p | H.263+ |
mpeg4 | standardní ISO MPEG-4 (DivX, Xvid kompatibilní) |
msmpeg4 | prvotní MPEG-4 varianta od MS, v3 (DivX3) |
msmpeg4v2 | prvotní MPEG-4 od MS, v2 (použitý ve starých ASF souborech) |
wmv1 | Windows Media Video, verze 1 (WMV7) |
wmv2 | Windows Media Video, verze 2 (WMV8) |
rv10 | RealVideo 1.0 |
rv20 | RealVideo 2.0 |
mpeg1video | MPEG-1 video |
mpeg2video | MPEG-2 video |
huffyuv | bezztrátová komprese |
ffvhuff | FFmpeg modifikovaná huffyuv bezztrátová komprese |
asv1 | ASUS Video v1 |
asv2 | ASUS Video v2 |
ffv1 | bezztrátový video kodek z FFmpeg |
svq1 | Sorenson video 1 |
flv | Sorenson H.263 používaný ve Flash Video |
flashsv | Flash Screen Video |
dvvideo | Sony Digital Video |
snow | Experimentální vlnkově orientovaný kodek z FFmpeg |
zbmv | Zip Blocks Motion Video |
První pole obsahuje názvy kodeků, které můžete přiřadit konfiguračnímu parametru
vcodec
,
např: -lavcopts vcodec=msmpeg4
Příklad s MJPEG kompresí:
mencoder dvd://2 -o titul2.avi
-ovc lavc -lavcopts vcodec=mjpeg -oac copy
Jméno audio kodeku | Popis |
---|---|
mp2 | MPEG Layer 2 |
ac3 | AC3, alias Dolby Digital |
adpcm_ima_wav | IMA adaptivní PCM (4 bity na vzorek, komprese 4:1) |
sonic | experimentální FFmpeg ztrátový kodek |
sonicls | experimentální FFmpeg bezztrátový kodek |
vorbis | Xiph Ogg Vorbis kodek |
wmav1 | Windows Media Audio v1 kodek |
wmav2 | Windows Media Audio v2 kodek |
Vprvním sloupci naleznate jména kodeků, které byste měli přiřadit parametru
acodec
, například: -lavcopts acodec=ac3
Příklad s kompresí AC3:
mencoder dvd://2 -o titul2.avi
-oac lavc -lavcopts acodec=ac3 -ovc copy
Narozdíl od jejích videokodeků, audio kodeky z knihovny
libavcodec
neprovádějí inteligentní rozdělení přidělených bitů,
jelikož jim chybí byť jen minimální psychoakustický model (pokud vůbec),
který obsahuje většina implementací ostatních kodeků.
Vězte však, že všechny tyto kodeky zvuku jsou velmi rychlé a pracují
bez potíží všude, kde máte MEncoder se
zakompilovanou knihovnou libavcodec
(což je naprostá většina případů) a nezávisejí na externích knihovnách.
V ideálním případě byste asi chtěli jen říct enkodéru, aby se přepnul do režimu "vysoká kvalita" a šel na to. To by bylo jistě hezké, ale naneštěstí je to těžké zavést, jelikož různé volby enkódování vedou k různé kvalitě v závislosti na zdrojovém materiálu. To proto, že komprese závisí na vizuálních vlastnostech daného videa. Například anime a živá akce mají zcela rozdílné vlastnosti a tedy vyžadují odlišné volby pro dosažení optimálního enkódování. Dobrá zpráva je, že některé volby by nikdy neměly chybět, jako mbd=2, trell a v4mv. Podrobný popis obvyklých enkódovacích voleb naleznete níže.
Volby k nastavení:
vmax_b_frames: 1 nebo 2 je v pořádku,
v závislosti na filmu.
Poznamenejme, že pokud chcete mít svá videa dekódovatelná kodekem DivX5,
budete muset zapnout podporu uzavřeného GOP, pomocí volby
libavcodec
u cgop,
ale budete také muset vypnout detekci scény, což není dobrý nápad, jelikož
tak trochu zhoršíte efektivitu enkódování.
vb_strategy=1: pomáhá ve scénách s rychlým pohybem. Vyžaduje vmax_b_frames >= 2. V některých videích může vmax_b_frames snížit kvalitu, ale vmax_b_frames=2 spolu s vb_strategy=1 pomůže.
dia: okruh vyhledávání pohybu. Čím větší, tím lepší a pomalejší. Záporné hodnoty mají úplně jiný význam. Dobrými hodnotami jsou -1 pro rychlé enkódování, nebo 2-4 pro pomalejší.
predia: předprůchod pro vyhledávání pohybu. Není tak důležitý jako dia. Dobré hodnoty jsou 1 (výchozí) až 4. Vyžaduje preme=2, aby byla opravdu k něčemu.
cmp, subcmp, precmp: Porovnávací funkce pro odhad pohybu. Experimentujte s hodnotami 0 (výchozí), 2 (hadamard), 3 (dct) a 6 (omezení datového toku). 0 je nejrychlejší a dostatečná pro precmp. Pro cmp a subcmp je 2 dobrá pro anime a 3 zase pro živou akci. 6 může, ale nemusí být o něco lepší, ale je pomalá.
last_pred: Počet prediktorů pohybu přebíraných z předchozího snímku. 1-3 nebo tak pomůžou za cenu menšího zdržení. Vyšší hodnoty jsou však pomalé a nepřináší žádný další užitek.
cbp, mv0: Ovládá výběr makrobloků. Malá ztráta rychlosti za malý zisk kvality.
qprd: adaptivní kvantizace založená na komplexnosti makrobloku. Může pomoci i uškodit v závislosti na videu a ostatních volbách. Toto může způsobovat artefakty, pokud nenastavíte vqmax na nějakou rozumně malou hodnotu (6 je dobrá, možná byste ale měli jít až na 4); vqmin=1 může také pomoci.
qns: velmi pomalá, zvlášť v kombinaci s qprd. Tato volba nutí enkodér minimalizovat šum díky kompresi artefaktů, místo aby se snažil striktně zachovávat věrnost videa. Nepoužívejte ji, pokud jste již nezkusili všechno ostatní kam až to šlo a výsledek přesto není dost dobrý.
vqcomp: Vylepšení ovládání datového toku. Dobré hodnoty se liší podle videa. Můžete to bezpečně ponechat jak to je, pokud chcete. Snížením vqcomp pustíte více bitů do scén s nízkou komplexností, zvýšením je pošlete do scén s vysokou komplexností (výchozí: 0.5, rozsah: 0-1. doporučený rozsah: 0.5-0.7).
vlelim, vcelim: Nastaví jediný koeficient prahu eliminace pro jasové a barevné roviny. Ty jsou enkódovány odděleně ve všech MPEGu podobných algoritmech. Myšlenka stojící za těmito volbami je použití dobré heuristiky pro určení, zda je změna v bloku menší než vámi nastavený práh a v tom případě se blok enkóduje jako "nezměněný". To šetří bity a možná i zrychlí enkódování. vlelim=-4 a vcelim=9 se zdají být dobré pro hrané filmy, ale příliš nepomohou s anime; pokud enkódujete animované vido, měli byste je asi nechat beze změn.
qpel: Odhad pohybu s přesností na čtvrt pixelu. MPEG-4 používá přesnost na půl pixelu jako výchozí při vyhledávání pohybu, proto je tato volba spojena s určitou režií, jelikož se do výstupního souboru ukládá více informací. Kompresní zisk/ztráta závisí na filmu, ale obvykle to není příliš efektivní na anime. qpel vždy způsobí zvýšení výpočetní náročnosti dekódování (v praxi +25% času CPU).
psnr: neovlivní aktuální enkódování, ale zaznamená typ/velikost/kvalitu každého snímku do log souboru a na konci vypíše souhrnný PSNR (odstup signálu od šumu).
Volby se kterými nedoporučujeme si hrát:
vme: Výchozí je nejlepší.
lumi_mask, dark_mask: Psychovizuálně adaptivní kvantizace. Nehrajte si s těmito volbami, pokud vám jde o kvalitu. Rozumné hodnoty mohou být efektivní ve vašem případě, ale pozor, je to velmi subjektivní.
scplx_mask: Snaží se předcházet blokovým artefaktům, ale postprocesing je lepší.
Následující nastavení jsou příklady nastavení různých kombinací voleb enkodéru, které ovlivňují poměr rychlost versus kvalita při shodném cílovém datovém toku.
Veškerá nastavení byla testována na video vzorku 720x448 @30000/1001 snímků za sekundu, cílový datový tok byl 900kbps a prováděly se na AMD-64 3400+ při 2400 MHz v režimu 64 bitů. Každá kombinace nastavení má uvedenu změřenou rychlost enkódování (ve snímcích za sekundu) a ztrátu PSNR (v dB) oproti nastavení "velmi vysoká kvalita". Rozumějte však že, v závislosti na vašem zdrojovém materiálu, typu počítače a pokrokům ve vývoji, můžete dospět k velmi odlišným výsledkům.
Popis | Volby | Rychlost [fps] | Relativní ztráta PSNR [dB] |
---|---|---|---|
Velmi vysoká kvalita | vcodec=mpeg4:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vmax_b_frames=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=2 | 6 | 0 |
Vysoká kvalita | vcodec=mpeg4:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:subcmp=3:precmp=0:vqcomp=0.6:turbo | 15 | -0.5 |
Rychlé enkódování | vcodec=mpeg4:mbd=2:trell:v4mv:turbo | 42 | -0.74 |
Enkódování v reálném čase | vcodec=mpeg4:mbd=2:turbo | 54 | -1.21 |
Díky této vlastnosti
libavcodec
u
můžete nastavit uživatelskou inter (I-snímky/klíčové snímky) a intra
(P-snímky/predikované (rozumějte vypočítané) snímky) matice. To je podporováno
mnoha kodeky:
mpeg1video
a mpeg2video
jsou hlášeny jako funkční.
Typické použití této vlastnosti je nastavení matic preferovaných KVCD specifikacemi.
Kvantizační Matice KVCD "Notch":
Intra:
8 9 12 22 26 27 29 34 9 10 14 26 27 29 34 37 12 14 18 27 29 34 37 38 22 26 27 31 36 37 38 40 26 27 29 36 39 38 40 48 27 29 34 37 38 40 48 58 29 34 37 38 40 48 58 69 34 37 38 40 48 58 69 79
Inter:
16 18 20 22 24 26 28 30 18 20 22 24 26 28 30 32 20 22 24 26 28 30 32 34 22 24 26 30 32 32 34 36 24 26 28 32 34 34 36 38 26 28 30 32 34 36 38 40 28 30 32 34 36 38 42 42 30 32 34 36 38 40 42 44
Použití:
$ mencodervstup.avi
-ovýstup.avi
-oac copy -ovc lavc \ -lavcopts inter_matrix=...:intra_matrix=...
mencoder vstup.avi
-ovc lavc -lavcopts \
vcodec=mpeg2video:intra_matrix=8,9,12,22,26,27,29,34,9,10,14,26,27,29,34,37,\
12,14,18,27,29,34,37,38,22,26,27,31,36,37,38,40,26,27,29,36,39,38,40,48,27,\
29,34,37,38,40,48,58,29,34,37,38,40,48,58,69,34,37,38,40,48,58,69,79\
:inter_matrix=16,18,20,22,24,26,28,30,18,20,22,24,26,28,30,32,20,22,24,26,\
28,30,32,34,22,24,26,30,32,32,34,36,24,26,28,32,34,34,36,38,26,28,30,32,34,\
36,38,40,28,30,32,34,36,38,42,42,30,32,34,36,38,40,42,44 -oac copy -o svcd.mpg
Takže jste si koupili zbrusu novou kopii filmu Harry Potter a Tajemná komnata (širokoúhlou verzi samozřejmě) a chcete si toto DVD ripnout, takže si jej můžete přidat do svého Domácího PC kina. Je to region 1 DVD, takže je v NTSC. Níže uvedený příklad je stále vhodný i pro PAL, jen musíte vynechat -ofps 24000/1001 (protože výstupní snímková rychlost je shodná se vstupní) a přirozeně budou rozdílné souřadnice pro ořez.
Po spuštění mplayer dvd://1, postupujeme podle informací obsažených v sekci Jak naložit s telecine a prokladem v NTSC DVD a zjistíme že je to 24000/1001 neprokládané video, takže nepotřebujeme použít inverzní telecine filtr, jako je pullup nebo filmdint.
Dále musíme zjistit vhodný ořezový obdélník, takže použijeme filtr cropdetect:
mplayer dvd://1 -vf cropdetect
Ujistěte se, že jste přešli přes zaplněný snímek (nějakou jasnou scénu mimo úvodní a koncové titulky) a v konzoli MPlayeru uvidíte:
crop area: X: 0..719 Y: 57..419 (-vf crop=720:362:0:58)
Potom přehrajeme film s tímto filtrem, abychom otestovali jeho správnost:
mplayer dvd://1 -vf crop=720:362:0:58
A zjistíme, že to vypadá zcela v pořádku. Dále se ujistíme, že šířka i výška jsou násobky 16. Šířka je v pořádku, výška ovšem ne. Protože jsme nepropadli v sedmé třídě z matematiky, víme, že nejbližším násobkem 16 nižším než 362 je 352.
Mohli bychom použít crop=720:352:0:58, ale bude lepší ustřihnout kousek nahoře i dole, takže zachováme střed. Zkrátili jsme výšku o 10 pixelů, ale nechceme zvýšit odsazení v ose y o 5 pixelů, protože je to liché číslo, což by nepříznivě ovlivnilo kvalitu. Místo toho zvýšíme odsazení v ose y o 4 pixely:
mplayer dvd://1 -vf crop=720:352:0:62
Další důvod pro odstřižení pixelů shora i zdola je to, že si můžeme být jisti odstřižením napůl černých pixelů pokud existují. Pokud je však vaše video telecinováno, ujistěte se, že máte v řetězu filtrů pullup filtr (nebo jiný filtr pro inverzi telecine, který hodláte použít) ještě před odstraněním prokladu a ořezem. (Pokud se rozhodnete zachovat vaše video prokládané, pak se ujistěte, že vaše vertikální odsazení (offset) je násobkem 4.)
Pokud si děláte starosti se ztrátou těch 10 pixelů, možná raději snížíte rozměry na nejbližší násobek 16. Řetězec filtrů by pak vypadal asi takto:
-vf crop=720:362:0:58,scale=720:352
Takto malé zmenšení videa bude znamenat ztrátu malého množství detailů, což bude pravděpodobně stěží postřehnutelné. Zvětšování by naopak vedlo ke snížení kvality (pokud byste nezvýšili datový tok). Ořez odstraní tyto pixely úplně. To je jedna z věcí, kterou byste si měli uvážit pro každý případ zvlášť. Například pokud bylo DVD video vyrobeno pro televizi, měli byste se vyvarovat vertikálnímu škálování, jelikož počet řádků odpovídá originální nahrávce.
Při prohlídce jsme zjistili, že video je poměrně akční, s vysokým počtem detailů, takže jsme zvolili datový tok 2400 Kbitů.
Nyní jsme připraveni provést dvouprůchodové enkódování. Průchod jedna:
+mencoder dvd://1 -ofps 24000/1001 -oac copy -o Harry_Potter_2.avi
-ovc lavc \
-lavcopts vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:autoaspect:vpass=1 \
-vf pullup,softskip,crop=720:352:0:62,hqdn3d=2:1:2
A průchod dva je stejný, jen nastavíme vpass=2:
mencoder dvd://1 -ofps 24000/1001 -oac copy -o Harry_Potter_2.avi
-ovc lavc \
-lavcopts vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:autoaspect:vpass=2 \
-vf pullup,softskip,crop=720:352:0:62,hqdn3d=2:1:2
Volby v4mv:mbd=2:trell velmi zvýší kvalitu za cenu časové
náročnosti enkódování. Vcelku není důvod tyto volby vypustit, pokud je
primárním cílem kvalita. Volby cmp=3:subcmp=3
vyberou porovnávací funkci, která poskytuje lepší kvalitu, než výchozí.
S tímto parametrem můžete zkusit experimentovat (nahlédněte do man stránky pro
seznam možných hodnot), jelikož různé funkce mohou mít velký vliv na kvalitu
v závislosti na zdrojovém materiálu. Například pokud zjistíte, že
libavcodec
produkuje příliš mnoho
čtverečkových artefaktů, můžete zkusit zvolit experimentální NSSE jako
porovnávací funkci přes *cmp=10.
V případě tohoto filmu bude výsledné AVI dlouhé 138 minut a veliké kolem 3GB. A protože jste řekli, že na velikosti nezáleží, je to přijatelná velikost. Ale pokud byste jej chtěli menší, můžete zkusit nižší datový tok. Efekt zvyšování datového toku se totiž neustále snižuje, takže zatímco je zlepšení po zvýšení z 1800 Kbitů na 2000 Kbitů zjevné, nemusí být již tak velké nad 2000 Kbitů. Beze všeho s tím experimentujte, dokud nebudete spokojeni.
Jelikož jsme protáhli video odšumovacím filtrem, měli bychom jej trochu přidat během přehrávání. To, spolu s spp post-procesním filtrem, znatelně zvýší vnímanou kvalitu a pomůže odstranit čtverečkové artefakty ve videu. S MPlayerovou volbou autoq může být množství postprocesingu prováděného filtrem spp přizpůsobováno vytížení CPU. V tuto chvíli rovněž můžete provést korekci gama a/nebo barevnou korekci k dosažení nejlepších výsledků. Například:
mplayer Harry_Potter_2.avi
-vf spp,noise=9ah:5ah,eq2=1.2 -autoq 3