Hlavní navigace

MPlayer a MEncoder: enkódujeme

29. 12. 2005
Doba čtení: 4 minuty

Sdílet

V předchozích dílech jsme se naučili používat MPlayer i MEncoder a zvykli jsme si na jejich parametry. Dnes si ukážeme další podstatnou funkci - enkódování videa.

V minulém díle jsme nahrávali obraz i zvuk z televize. Výsledkem je ovšem ohromný soubor ve formátu mjpeg. Pokud chceme video uchovat pro další generace, musíme se postarat o jeho převod do rozumného formátu. Pravděpodobně nejpoužívanějším formátem současné doby je MPEG-4.

Na začátku je vhodné vysvětlit některé pojmy, které jsou velmi často chybně vykládány, a to překvapivě i velkými společnostmi.

MPEG-4 je video formát, který v roce 1998 vytvořila skupina Moving Picture Experts Group. Zdědil některé vlastnosti starších sourozenců MPEG-1 a MPEG-2 a navíc přidává řadu vlastních funkcí, které zvyšují kvalitu obrazu při stejném datovém toku. Samotné implementace jsou ponechány na jednotlivých vývojářích.

DivX je komerční kodek, který implementuje formát MPEG-4 a jeho okleštěná verze je k dispozici pro některé systémy zdarma. Pro Linux není k dispozici.

XviD je další implementací MPEG-4, na rozdíl od DivX se jedná o open source.

Implementací MPEG-4 je samozřejmě mnohem více a MPlayer obvykle využívá knihovnu libavcodec. Každopádně všechny filmy, které máte na CD, jsou v MPEG-4, ačkoliv se někdy (velmi často) chybně uvádí, že jsou v DivX. Formát DivX neexistuje.

Posledním pojmem, který si vysvětlíme, je AVI. Nejedná se o konkrétní formát, ale pouze o jakýsi kontejner, který obsahuje audio a video proudy, které je možno přehrávat zároveň. Vytvořil jej Microsoft v roce 1992. Může obsahovat audiovizuální data v libovolném formátu a samotný kontejner AVI o svém obsahu nijak nevypovídá. AVI je tedy jen pouhý nosič.

Nyní se pustíme do samotného enkódování. Předpokládám, že máme co enkódovat. Buď jsme získali vstupní data ze zmíněné televize, nebo máme DVD, ze kterého si uděláme napodobeninu pro vlastní potřebu.

Samotný proces si rozdělíme na tři kroky. V prvním enkódujeme audio a v dalších dvou video. Dvouprůchodové enkódování má mnoho výhod. Jednak přesně zjistíme, jaký datový tok budeme potřebovat, aby se nám výsledek vešel na požadované médium (pravděpodobně CD), ale také necháme MEncoder, aby si film předem osahal a zjistil, pro které scény bude potřeba větší tok a kde je možno naopak nějaký ten kilobit ušetřit. Výsledkem je pak lepší rozložení kvality.

Nevýhodou dvou průchodů je delší doba, kterou budeme ke zpracování potřebovat. Při dnešních výkonech, které počítače nabízejí, se ovšem nemusíme bát nějakých drastických časů.

MEncoder řeší ukládání dat, která získává v průběhu své práce tak, že si zakládá dočasné soubory, ve kterých jsou uchovány už vytvořené části. Můžete hotovou práci kontrolovat tak, že si obsah vytvářených dočasných souborů přehrajete. Zjiste tak například, jestli je zvuk dostatečně kvalitní a jestli je vše tak, jak jste si přáli.

Nejprve tedy přijde na řadu audio. Toto je nejrychlejší část, která nezabere příliš času a nedá se na ní ani moc zkazit. Předpokládejme, že máme soubor s názvem video.mjpeg, který budeme enkódovat. Pro práci s DVD bychom uvedli jako zdroj dvd://, případně bychom mohli doplnit číslo titulu. Obdobně můžeme jako zdroj určit televizní kartu a enkódovat rovnou, ale na to asi nebudeme mít dost výkonu. Proto jsme posledně použili mjpeg, který není tak náročný.

$ mencoder video.mjpeg -ovc frameno -oac mp3lame -lameopts abr:br=128:aq=0:mode=1 -o frameno.avi 

V tomto případě necháme zvuk enkódovat pomocí známého kodeku Lame a nastavíme proměnlivý tok tak, aby se pohyboval kolem 128 kbit. Zvuk tvoří jen malou část výsledného filmu, takže není potřeba se jím nějak moc zabývat. Samozřejmě, pokud si enkódujete záznam koncertu, asi budete chtít vyšší kvalitu. Výsledkem je zvuk v běžné MP3, takže můžete vyjít ze zkušeností s tímto formátem.

Výsledek je uložen do souboru frameno.avi, který ovšem pochopitelně v této fázi neobsahuje žádný obraz. Jak jsem řekl, můžete v tuto chvíli zjistit, zda vám kvalita vyhovuje.

Po provedení této fáze se navíc objeví tabulka toků, které MEncoder pro toto video doporučí. Vztahují se ke kapacitám médií, na která budeme výsledný film umisťovat. Doporučuji pro jistotu nastavit nižší hodnotu, abyste nebyli výsledkem překvapeni. Jedná se jen o přibližný odhad.

Nyní se vrhneme na první průchod videa:

$ mencoder video.mjpeg -ovc lavc lavcopts vcodec=mpeg4:vbitrate=650:v4mv:vhq=4:vpass=1 -oac copy -o vystup.avi 

Použijeme zmíněnou implementaci MPEG-4 v podobně libavcodec, zkráceně lavc. Zadáme, že se bude jednat o formát mpeg4 a že probíhá první průchod ( vpass=1). Zvuk jen zkopírujeme ( -oac copy) a výsledek sypeme do vystup.avi.

Pochopitelně můžeme doplnit další volby jako filtry, ořez, změnu poměru a další. To už ale nechám na vás a na vašich potřebách.

MEncoder si v této fázi film prohlédne a označí si jednotlivé scény podle náročnosti na tok. Potřebné údaje si uloží do souboru divx2pass.log. Z něj bude číst při dalším průchodu.

$ mencoder video.mjpeg -ovc lavc lavcopts vcodec=mpeg4:vbitrate=650:v4mv:vhq=4:vpass=2 -oac copy -o vystup.avi 

Jedinou změnou je v tomto případě úprava parametru vpass=1 na vpass=2. MEncoder použije data z logu a začne samotné přežvýkání filmu na kýžený výsledek. Ten je po dokončení akce uložen v souboru vystup.avi, který obsahuje jak video, tak audio část a měl by normálně hrát.

UX DAy - tip 2

Pokud si nejste jisti některými parametry a nechcete čekat na výsledek dlouho, můžete si vyzkoušet enkódování jen na části videa. Použijte k tomu parametry -ss 00:12:34 a -endpos 00:14:20. Získáte tak pár desítek sekund výsledného videa, které bude hotové za chvíli a vy si můžete ověřit, že jsou zvolené parametry správné.

Happy encoding!

Byl pro vás článek přínosný?

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.