Stručný návod k použití FFmpeg pro konverzi multimediálních souborů

Existuje mnoho nástrojů s otevřeným zdrojovým kódem pro úpravy, vylepšování a konverzi multimédií přesně podle vašich potřeb. Nástroje jako Audacity nebo Handbrake jsou fantastické, ale někdy chcete jen rychle změnit soubor z jednoho formátu do jiného. Vstupte do FFmpeg.

FFmpeg je kolekce různých projektů pro zpracování multimediálních souborů. Často se používá v zákulisí mnoha dalších projektů souvisejících s multimédii. Navzdory svému názvu nemá nic společného se skupinou Moving Picture Experts Group ani s nesčetnými multimediálními formáty, které vytvořila.

V tomto článku budu používat FFmpeg prostřednictvím nástroje příkazového řádku ffmpeg, který je pouze jednou, malou částí projektu FFmpeg. Je k dispozici v mnoha různých operačních systémech a v některých operačních systémech je standardně obsažen. Lze jej stáhnout z webových stránek FFmpeg nebo prostřednictvím většiny správců balíčků.

FFmpeg je výkonný nástroj, který dokáže s multimediálními soubory dělat téměř vše, co si dokážete představit. V tomto článku nás zajímá jeho použití ke konverzi souborů, takže se nebudeme hlouběji zabývat celou sadou jeho funkcí. Než se podíváme na používání programu FFmpeg, musíme se nejprve krátce podívat na to, co to vlastně multimediální soubor je.

Mediální soubory

Ve velmi nadřazeném pohledu je multimediální soubor rozdělen na kontejner a jeho proudy. Proudy obsahují skutečné AV komponenty, jako je zvuk nebo video filmu, a jsou zakódovány pomocí určitého kódování médií neboli kodeku. Každý kodek má své vlastní vlastnosti, silné a slabé stránky. Například kodek FLAC je vhodný pro vysoce kvalitní bezztrátový zvuk, zatímco kodek Vorbis je navržen tak, aby konkuroval formátu MP3 ve velikosti souborů a zároveň nabízel lepší kvalitu zvuku. To znamená, že soubor ve formátu FLAC bude mnohem větší než zvukový proud Vorbis, ale měl by znít lépe. Žádný z nich není ze své podstaty lepší než ten druhý, protože každý se snaží o něco jiného.

Kontejner je obal pro datové toky. Představuje jednotné rozhraní, se kterým mohou komunikovat přehrávače médií a nástroje. Některé kontejnery jsou velmi pokročilé a umožňují libovolný druh proudu, včetně více video a audio proudů uvnitř jediného kontejneru. Proudy v kontejneru však nemusí být pouze audio nebo video. Různé kontejnery umožňují různé proudy, např. titulky, informace o kapitolách nebo jiná metadata. Vše záleží na tom, co kontejner umožňuje.

Jedná se o abstraktní reprezentaci mediálních souborů, která přeskakuje mnoho rozdílů mezi kontejnery. Mnohé z nich vyžadují určité datové toky a metadata nebo kladou omezení na povolené kodeky či obsah. Toto vysvětlení vám k přečtení tohoto článku postačí. Chcete-li se dozvědět více, klikněte na výše uvedené odkazy.

Uvědomte si, že kódování videa a zvuku může trvat velmi dlouho. Při použití FFmpeg byste měli být připraveni na to, že se na chvíli usadíte.

Základní konverze

To, co většině lidí při konverzi zvuku a videa podráží nohy, je výběr správných formátů a kontejnerů. Naštěstí je FFmpeg se svým výchozím nastavením docela chytrý. Obvykle automaticky vybere správné kodeky a kontejnery bez složitého nastavování.

Řekněme, že máte soubor MP3 a chcete ho převést na soubor OGG:

ffmpeg -i input.mp3 output.ogg

Tento příkaz vezme soubor MP3 nazvaný input.mp3 a převede ho na soubor OGG nazvaný output.ogg. Z pohledu aplikace FFmpeg to znamená převod zvukového proudu MP3 na zvukový proud Vorbis a zabalení tohoto proudu do kontejneru OGG. Nemuseli jste zadávat typy proudů ani kontejnerů, protože FFmpeg to vyřešil za vás.

Toto funguje také u videa:

ffmpeg -i input.mp4 output.webm

Protože WebM je dobře definovaný formát, FFmpeg automaticky ví, jaké video a audio může podporovat, a převede proudy tak, aby byly platným souborem WebM.

V závislosti na zvoleném kontejneru to nebude vždy fungovat. Například kontejnery jako Matroska jsou navrženy tak, aby zvládly téměř jakýkoli stream, který do nich chcete vložit, ať už je platný nebo ne. To znamená, že výsledkem příkazu:

ffmpeg -i input.mp4 output.mkv

může být soubor se stejnými kodeky, jaké měl vstupní soubor.mp4, což může, ale nemusí být to, co chcete.

Výběr kodeků

Co tedy uděláte, když chcete použít kontejner, jako je Matroska (který zvládne téměř libovolný stream), ale přesto ovlivnit, které kodeky budou ve výstupu? FFmpeg na pomoc! Potřebné kodeky můžete vybrat pomocí příznaku -c.

Tento příznak umožňuje nastavit, který kodek se má použít pro každý stream zvlášť. Chcete-li například nastavit, aby zvukový proud byl Vorbis, použijete následující příkaz:

ffmpeg -i input.mp3 -c:a libvorbis output.ogg

Stejným způsobem lze změnit video i zvukový proud:

ffmpeg -i input.mp4 -c:v vp9 -c:a libvorbis output.mkv

Tímto způsobem vytvoříte kontejner Matroska s video proudem VP9 a zvukovým proudem Vorbis, v podstatě stejný jako WebM, který jsme vytvořili dříve.

Příkaz ffmpeg -codecs vypíše všechny kodeky, které FFmpeg zná. Výstup tohoto příkazu se mění v závislosti na verzi FFmpeg, kterou máte nainstalovanou.

Změna jediného streamu

Častěji, než byste si přáli, se stává, že soubor, který máte, je částečně správný a má pouze jediný stream ve špatném formátu. Překódování správného streamu může být časově velmi náročné. S touto situací může pomoci program FFmpeg:

ffmpeg -i input.webm -c:v copy -c:a flac output.mkv

Tento příkaz zkopíruje video stream ze souboru input.webm do souboru output.mkv a zakóduje audio stream Vorbis do formátu FLAC. Příznak -c je opravdu mocný.

Změna kontejneru

Předchozí příklad lze aplikovat jak na audio, tak na video proudy, což umožňuje převádět z jednoho kontejnerového formátu na jiný, aniž byste museli provádět další kódování proudu:

ffmpeg -i input.webm -c:av copy output.mkv

Ovlivňování kvality

Teď, když máme přehled o kodecích, je na řadě otázka: Jak nastavíme kvalitu jednotlivých proudů?

Nejjednodušší metodou je změna datového toku, která může, ale nemusí vést k jiné kvalitě. Lidská schopnost vidět a slyšet není tak čistá a jednoznačná, jak bychom si rádi mysleli. Někdy změna datového toku způsobí obrovský rozdíl v subjektivní kvalitě. Jindy nemusí způsobit nic jiného než změnu velikosti souboru. Někdy je velmi těžké říct, co se stane, aniž bychom to vyzkoušeli.

Pro nastavení datového toku každého streamu použijete příznak -b, který funguje podobně jako příznak -c, jen místo možností kodeku nastavíte datový tok.

Příklad pro změnu datového toku videa byste jej použili takto:

ffmpeg -i input.webm -c:a copy -c:v vp9 -b:v 1M output.mkv

Tímto příznakem zkopírujete zvuk (-c:a copy) ze vstupu.webm a převede video do kodeku VP9 (-c:v vp9) s přenosovou rychlostí 1M/s (-b:v), to vše zabalené do kontejneru Matroska (output.mkv).

Dalším způsobem, jak můžeme ovlivnit kvalitu, je upravit snímkovou frekvenci videa pomocí volby -r:

ffmpeg -i input.webm -c:a copy -c:v vp9 -r 30 output.mkv

Tím se vytvoří nová Matroska s překopírovaným zvukovým proudem a vynucenou snímkovou frekvencí video proudu na 30 snímků za sekundu místo použití snímkové frekvence ze vstupu (-r 30).

Pomocí FFmpeg můžete také upravit rozměry videa. Nejjednodušší je použít předem určenou velikost videa:

ffmpeg -i input.mkv -c:a copy -s hd720 output.mkv

Tím se video na výstupu upraví na 1280×720, ale pokud chcete, můžete šířku a výšku nastavit ručně:

ffmpeg -i input.mkv -c:a copy -s 1280x720 output.mkv

Tím se získá přesně stejný výstup jako předchozím příkazem. Pokud chcete ve FFmpegu nastavit vlastní rozměry, nezapomeňte, že parametr šířky (1280) je před parametrem výšky (720).

Úprava snímkové frekvence a datového toku jsou dvě hrubé, ale účinné techniky ovlivnění kvality médií. Nastavením těchto hodnot na velmi vysokou hodnotu nelze zlepšit kvalitu existujícího zdroje, pokud je jeho kvalita již nízká.

Změna těchto nastavení je nejúčinnější pro rychlé zmenšení vysoce kvalitního datového toku za účelem vytvoření menší velikosti souboru. Úprava velikosti videa nemůže zlepšit jeho kvalitu, ale může způsobit, že se lépe vejde na tablet místo na televizor. Změna velikosti videa 640×480 na 4K jej nezlepší.

Změna kvality souborů je velmi subjektivní záležitost, což znamená, že neexistuje jediný způsob, který by fungoval vždy. Nejlepší metodou je provést několik změn a vyzkoušet, zda to pro vás vypadá nebo zní lépe.

Úprava streamů

Často máte soubor, který je téměř dokonalý, a potřebujete jen oříznout několik částí. To lze snadněji provést pomocí nástroje, který vám ukáže, co měníte, ale pokud přesně víte, kde to chcete oříznout, lze to velmi snadno provést v programu FFmpeg:

ffmpeg -i input.mkv -c:av copy -ss 00:01:00 -t 10 output.mkv

Tento nástroj zkopíruje video a audio proudy (-c:av copy), ale ořízne video. Volba -t nastaví délku střihu na 10 sekund a volba -ss nastaví počáteční bod videa pro stříhání, v tomto případě na jednu minutu (00:01:00). V případě potřeby můžete být přesnější než jen hodiny, minuty a sekundy a přejít až na milisekundy.

Extrahování zvuku

Někdy vás opravdu nezajímá video, chcete jen zvuk. Naštěstí je to ve FFmpegu velmi jednoduché pomocí příznaku -vn:

ffmpeg -i input.mkv -vn audio_only.ogg

Tento příkaz extrahuje ze vstupu pouze zvuk, zakóduje ho jako Vorbis a uloží do souboru audio_only.ogg. Nyní máte izolovaný zvukový proud. Stejným způsobem můžete použít také příznaky -an a -sn, abyste oddělili proudy zvuku a titulků.

Vytvoření GIFu

V poslední době se vrací animované GIFy (s tvrdým g, protože nejsem příšera). Osobně si myslím, že GIF je ten nejhorší formát, který můžete pro video zvolit. Má příšernou kvalitu komprese a velikost; má velmi tvrdá omezení týkající se barev, snímkové frekvence a metadat kontejneru; a neumí podporovat zvuk. Přesto je poměrně oblíbený. Jak tedy můžete z videoklipu vytvořit animovaný GIF?“

Použití příznaku -an, podobně jako jsme to udělali výše, je lepší než vytvoření animovaného GIFu, pokud chcete vytvořit video bez zvuku, ale existuje spousta míst, která podporují GIF a která nebudou podporovat jiný formát videa. Pro všechny z nich platí:

ffmpeg -i input.mkv output.gif

Tento příkaz vytvoří GIF stejných rozměrů jako vstupní soubor. To je často špatný nápad, protože GIFy se oproti jiným formátům videa špatně komprimují (podle mých zkušeností bude GIF asi osmkrát větší než zdrojové video). Může být užitečné použít volbu -s a změnit velikost GIFu na něco menšího, zejména pokud je vstupní zdroj poměrně velký, například HD video.

Jiné nástroje

Přestože je FFmpeg nástrojem pro většinu AV úloh, není dokonalý pro všechno. Existují nástroje, které ve spojení s FFmpegem mohou vše trochu usnadnit.

Přenos videa z YouTube

Může být velmi snadné nahrát něco na YouTube, ztratit původní zdrojové video a zůstat jen verze z YouTube. Jaký je nejjednodušší způsob, jak získat kopii videa z YouTube?

Youtube-dl je šikovný malý nástroj, který můžete použít k přebírání videí z YouTube a několika dalších služeb pro streamování videa. Jeho použití je velmi jednoduché:

youtube-dl https://www.youtube.com/watch?v=2m5nW9CQLJ0

Tento příkaz stáhne video na uvedené adrese URL a uloží je lokálně.

Youtube-dl má několik možností pro kontrolu kvality a formátu stahovaného videa, ale považuji za jednodušší použít výše uvedený příkaz. Ten stáhne zvuk a video v nejvyšší kvalitě do jednoho souboru a já je pak pomocí FFmpeg převedu do požadovaného formátu.

Získání informací o médiu

Někdy stačí vědět, co je uvnitř kontejneru s médiem. I když existuje několik nástrojů, které to umí, mnou preferovaný je MediaInfo. MediaInfo zobrazuje všechny informace uvnitř kontejneru médií, a to pro každý z různých streamů i metadata vstupního souboru. Dozvíte se tak vše, co byste mohli chtít vědět – a pravděpodobně i spoustu věcí, které jste nevěděli.

Spuštění příkazu mediainfo inputFile.mkv vyplivne seznam informací o vstupním souboru v lidsky čitelné podobě.

A další…

To je jen poškrábání povrchu toho, co FFmpeg umí. Naštěstí je dokumentace k FFmpegu a dalším nástrojům projektu velmi dobrá a stojí za to si ji prohlédnout. Dozvíte se v ní o mnoha různých tricích, které tento pes umí.

Pokud toužíte po nástroji s grafickým rozhraním pro konverzi multimédií, je Handbrake mimořádně dobrý nástroj dostupný pro Linux, Mac OS X a Windows. Handbrake používá pod kapotou FFmpeg (kromě jiných nástrojů).

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.