edison23

Zápisky šíleného jazykového editora

Malá příručka pro encode

Jednoduchý návod pro enkódování videí v x264 s Avisynthem.

Datum: 2011-01-23
Kategorie: Návody CS

Obsah


Nejsem odborník, spíš pouhý uživatel. Ale chtěl jsem si zkusit napsat podobný tuturial, a pokud mi dáte zpětnou vazbu, mohu ho u zlepšovat. Na internetu už jsou návody, menší či větší obtížnosti, já zde předkládám ten obtížnosti nejmenší (tím pádem vás toho také nejméně naučí).

x264 encoder

Ještě dodávám, že já se nezabývám kódováním hraných filmů; ne že by stejné postupy nešly použít, ale chtělo by to jisté modifikace.

Takže ještě jednou: pokud některý z našich odborníků na encoding videa objeví chybu, nelynčujte mě a radši mi řekněte, jak ji opravit.

Co potřebujete

– Zdrojové video, raw. Nejsnažší definice je, že to je video, kde nejsou hardsubované žádné titulky/loga, prostě nebylo poznamenáno žádnou předchozí fansubovou skupinou. Pokud máte DVD, je to o krok delší, a má to své výhody i nevýhody. Také se tím budu zabývat.

Avisynth – software, který enkodéru podává snímky na kódování. Nahledejte žádné okénko nebo tak, není tam. Nepotřebujete ho. Ovládá se se avs skripty (viz níže)

x264.exe – encoder. Samozřejmě jsou i jiné, ale já používám tenhle, vzhledem k jeho uživatelské přívětivosti a dobrým výsledkům i při defaultních nastaveních.¹

VSFilter.dll – plugin pro avisynth, aby vám fungovaly některé pokročilejší věci, jako textsub. Je v něm víc funkcí, zatím ho budete pořebovat asi jen na tuhle.

– pár dalších pluginů pro Avisynth, když budete chtít deinterlace apod…

AVS Skript

Avisynth ovládáte skriptem. To je textový soubor, který říká avisynthu, co má dělat.
Základní skript může vypadat velmi jednoduše:

loadplugin("VSFilter.dll") directshowsource("d:\Video\video.mp4") converttoyv12()

Loadplugin – načítá pluginy, může obsahovat i cestu (v “ „), pokud není plugin ve stejné složce.

Directshowsource – načítá video

converttoyu12 – převádí barevný prostor, aby si s ním x264 uměl poradit.

Nic víc v tom není. Pokud byste měli avi video, použijete místo directshowsource pro načítání avisource.

Ovládání x264.exe

Asi jste si to zkusili. Když ho spustíte, otevře se na okamžik okno CMD a pak skončí. Lekli jste se? Já poprvé jo xD
X264 encoder nemá grafické prostředí (GUI), takže se ovládá pomocí parametrů v příkazovám řádku (CLI). (Samozřejmě na něj existujě několik GUI, ale já je nepoužívám. Přesto je na konci zmíním.)

Otevřete si si notepad.exe a vytvořte batch soubor (to je textak ale s příponou .bat, ten pak spouštíte, když chcete začít kódovat.), který bude obsahovat následující:

x264.exe --crf 20 --preset slow --tune animation --output video_enkod.mp4 skript.avs

Co je co je co:

crf – konstantní kvalita; proměnný bitrate, zachovává se kvalita snímků, jsou i mody na konst. bitrate apod. Čím menší číslo, tím vyšší kvalita, 0=bezztrátové; smysluplný rozsah je 15~25 (zálěží na rozlišení, čím vyšší rozlišení, tím větší crf lze použít; proč, to se mě neptejte)

preset – rychlost kódování; čím větší rychlost, tím menší účinnost, tím větší velikost; používejte co nejpomalejší můžete, ať nedopadnete jako Thora ;)

tune – automatické vyladění enkodéru pro určitý druh videa, pokud kódujete anime, určitě to použijte

output – kam se uloží výsledný soubor, může tam být i cesta; pozor, neptá se to na přepisování souborů!

skript.avs – tady načítáte právě onen avisynth skript; může se jmenovat samozřejmě i jinak, hlavní je, aby se shodovalo jméno souboru se skriptem s tím tady

Pozn.: výstupní video může mít formát mp4, mkv flv nebo raw …. Používám mp4 nebo mkv, protože se s tím pak nejsnáz pracuje dál.

Audio

X264 je encoder jenom pro video. Avisynth si umí poradit s některými druhy audia (s tím nejčastějším, AAC, ale ne). V různých GUI jde zařídit, aby se po vykódování audio a video zase spojily dohromady, takhle bez GUI jsem to nevykoumal. Ale ono je to stejně jedno, protože to nepotřebujete. Podle toho, jaký máte raw, použijete přislušný demuxer (SW na vytažení stop z kontajneru) a pak vaše vykódované video spojíte s audiem a s titulky do jiného kontajneru (obvykle mkv, je to nepohodlnější).

Rawy:

MKV kontainer, AVC Video

Načítáte přes directshowsource, demuxnete mkvdemuxem. To je všechno.

MP4 kontainer, AVC Video

Načítáte přes directshowsource. Existuje kombinovaný muxer/demuxer, MP4 Box, ten použijte na demuxování audia.

AVI kontainer, Xvid/divX video

Načítáte přes avisource. Pro práci se stopami je avidemux, poměrně komplexní program, který umí kódovat, muxovat, demuxovat, střihat… Vysvětlování práce s avidemuxem je nad rámec tohoto tutorialu, ale je docela intuitivní, takže byste neměli mít problém.

Dalšími jako je WMV, OGM apod. se zabývat nebudu, protože to sám pořadně neumím. Ale jsou tu ještě DVD.

Když máte DVD, tak použijete DGIndex na vytvoření indexu z DVD (soubor.d2v), a ten pak budete načítat v AVS skriptu. Opět, popis práce s DGIndexem je nad rámec, ale tady je pěkný návod (eng).

Máte tedy soubor .d2v. Uděláte tedy následující skript:

loadplugin("dgdecode.dll")  
DGDecode_mpeg2source("mojedvd.d2v")  

Je tedy jasné, že ve složce se skriptem musíte mít knihovnu dgdecode.dll. Tu si stáhnete, nebo ji najdete v programovém adresáři DGIndexu. DGIndex také zároveň vyhodí i audio o správně délce, takže v tomto ohledu jste bez práce.

Připravte se, že u DVD budete potřebovat dodatečné úpravy videa v avisynth skriptu, jako deinterlace apod., vzhledem k povaze DVD.

Dokončení

Máte tedy na disku dva soubory. Výslední vykódvané video a demuxované původní audio. Tyto dva soubory musíte tzv. zmuxovat (spojit) dohromady. Obyvkle se v dnešní době používá MKV kontajner, takže použijete MKVMerge.

Další

Textsub

Pokud budete chtít do videa hardsubovat nějaké titulky, jde to velmi snadno.

Do skriptu přidáte tento řádek:

textsub("vase_titulky.ass")

Toto vyžaduje přítomnost VSFiltr.dll.

Pamatujte, že

  1. hardsubované titulky už nemůžete změnit, pokud v nich najdete chybu, musíte předělat celý enkód,
  2. titulky jsou nepřirozený prvek ve videu z hlediska kompresních algoritmů, takže je nutné trochu zvýšit bitrate (snižit hodnotu crf, například).

Existuje spousta dalších filtru a funkcí, na to už si musíte přijít sami. Najdete jich většinu, co existuje, na wiki.avisynth.org.

Na co si dát pozor:

  1. Nesmí se vám rozcházet audio s videem po zmuxování. To se stává často, když nezadáte správně framerate, proto si zjistěte fps původního videa a podle toho zadejte parametr k directshowsource například pro video s 24000/1001 FPS:

directshowsource("zdroj.mp4", fps=23.967)

Pozn.: parametry k funkcím se oddělují čárkou a jsou ve tvaru název=hodnota, … pokud se jedná o cestu k souboru apod, jsou v uvozovkách.

  1. Video se nesmí trhat – opět špatně framerate, ale přičin může být mnoho. Než to začnete řešit, zkontrolujte, zda se netrhá raw.

  2. Nesmí být vidět „kostičky“ – moc malý bitrate

  3. Než to budete někde publikovat, dejte to zkontrolovat někomu, kdo se trochu vyzná.

Doporučený nebo zmíněný software

AVSPmod – skvělý editor AVS skriptů, řekne vám i kde máte chybu.

MKVMerge&Demux

MP4Box

AVIDemux

GUI pro x264:

MeGUI – nelíbí se mi a nemám ho rád, ale jestli vám bude vyhovovat.. well, whatever makes you feel good…

ZarxGUI – chvíli jsem ho použival, osvědčilo se, ale přesto mi přišlo zbytečné. Na některé věci se hodí, umí celkem rozumně pracovat s audiem (ale to MEGUI taky asi).

…o dalších nevím.

A ještě rada na závěr: Občas se stává, že najdete video, které splňuje parametry rawu, ale je muxnuté do kontajneru se softsubem (s titulky). Když to načtete jak to stojí a leží do directshowsource, tak vám to ty titulky bude hardsubovat (zaleží na tom, co používáte na vykreslování embeddovaných softsubů (titulky v jednom kontajneru se zbytkem), ale pokud máte CCCP, tak to je Haali Media Spliter, a ten to directshowsourcovi naservíruje i s titulky). Řešení: v nastaveních Haali Media Splitteru (pokud jej tedy používáte) si najděte preferenci jazyka titulků, a do toho okénka napište off. (Jestli to dělá, co má, zkontrolujete jednoduše tak, že si zapnete nějaké video s titulky – neměly by se zobrazit).

A to je asi všechno.

¹) za tohle mě asi mnozí budou lynčovat, nevím. Existuje celá wiki se seznamem nastavení pro x264, zatím přežívám bez většiny z nich.


Kopie komentářů

  • Tigr 2011-02-03 @ 17:19 Možná bych to video načítal spíš přes FFMpegSource než přes DS. Přeci jenom DS je „jedna díra pro všechno“ a jakýkoliv chytrý filtr se tam nacpe, taky tam zůstane (netýká se jenom titulků). Navíc nepřesné seekování… Spíš si člověk zadělává na problémy.

    Mnohařádkové seznamy parametrů x264 lze v dnešní době spolehlivě považovat a) za pomník dob minulých nebo b) za trolování. Jednoduchost použití (kdo netuší, co která nastavení dělají, neměl by je měnit dle magického konfiguráku odkudsi) spolu s „dobrými výsledky při defaultních nastaveních“ (někdo udělá srovnávací test, nikde nic nenastaví a pak vylezou hausnummera) byl ostatně důvod zavedení –preset a –tune.

  • edison23 2011-02-03 @ 19:14 dik za radu, nekdy to sam zkusim :) a pak to zmenim i tady ^^

  • Keiiko 2011-03-09 @ 15:47 Jaky je rozdil mezi VSFilter.dll normalnim a unicode?

  • edison23 2011-03-09 @ 15:52 normalni (tedy „ne-unicode“) je pro stare verze windows, tusim win milenum a starsi (win98, win95…), ktere pouzivaly znakovou sadu ANSII. rozdil je tedy v tom, ze nebudou umet diakriticke znaky, znaky vychodnich jazyku apod.. pokud pouzivas win2k a vyssi, pouzil vsfilter unicode.