Lekce 1 - Framework FFmpeg - Představení a nastavení
Cílem tohoto kurzu je objasnit a předvést jak za pomoci programu (frameworku) FFmpeg provádět úpravu vašich video a audio souborů. FFmpeg je zadarmo a podporuje širokou škálu operačních systémů i formátů. Nutné znalosti k úspěšnému pracování se soubory medií je pouze umět FFmpeg stáhnout a spustit a používat příkazový řádek. V článku si též zjednodušeně objasníme jak fungují soubory multimédií, abyste byli schopni si úpravy sami provádět podle svých požadavků a potřeb.
Framework FFmpeg
Projekt FFmpeg je skupina programů a knihoven (framework), jenž vám umožní zpracovávat/upravovat/přehrávat vaše multimediální soubory. FFmpeg je vyvíjen pro nejrozšířenější OS na planetě (např. Windows, Linux, Mac OS). Je zdarma při dodržení podmínek LGPL verze 2.1. Prakticky jej lze použít pro domácí i podnikatelské účely bezplatně. Nevýhodou je, že nemá český manuál, což se budu v tomto kurzu snažit napravit. Framework FFmpeg nemá grafickou nástavbu, takže se ovládá přes příkazový řádek, nicméně na internetu lze nalézt různé projekty, které se o grafickou nástavbu úspěšně i neúspěšně pokoušely.
Podpora dekódování
Co se týká dekódování videa, je rozsah frameworku skutečné obrovský. Zde je seznam podporovaných video kodeků (viz dále). Takové množství podporovaných kodeků je skutečně výjimečné v porovnání i s placenými alternativami.
Podpora kódování
Podpora kódování je znatelně menší, ale co je hlavní je, že jsou podporovány nejznámější kodeky, které pravděpodobně podporují vaše domácí zařízení jako např.:
- H.263,
- H.264,
- H.265 (HVEC),
- MPEG1,
- MPEG2,
- MPEG4,
- FLV,
- VP8,
- VP9,
- ...
Zde je seznam podporovaných audio kodeků, ale o úpravě audia se budu zmiňovat v kurzu pouze okrajově.
Úvod do multimédií
Kdysi dávno v 90. letech za éry 286, 386, 486 a Pentií I se video/audio soubory na počítačích typu PC moc nepoužívaly. Pravděpodobně to bylo způsobeno chybějící instrukční sadou (MMX), která se objevila koncem éry Pentia I (rok +- 1997). Do té doby se sice video/audio soubory na počítačích objevovaly, ale zabíraly velkou kapacitu na disku a měly velké požadavky na výkon procesoru. Příchodem instrukční sady MMX v procesorech Pentium MMX, Pentium II se tedy umožnil pokles náročnosti na procesor na dostatečnou úroveň při zpracování komprimačních/dekomprimačních algoritmů, jenž jsou známé jako kodeky.
Kodeky
Kodeky nejsou prakticky nic jiného než komprimační/dekomprimační algoritmy pro data (streamy, stopy), ve kterých je uloženo video (obraz) nebo audio (zvuk). Samozřejmě svůj vliv zde hrály i velikosti pevných disků a rozšíření CD, které v době blížícího se konce milénia již měly dostatečnou kapacitu pro uložení filmů.
Soubory multimédií
Tzv. soubory multimédií jsou prakticky obyčejné (binární) soubory, ve kterých jsou uloženy video nebo audio stopy (streamy). Ve většině případů to funguje tak, že např. v souboru videa je jedna stopa pro video (obraz) a jedna nebo více audio stop (např. CZ, SK, ENG, ...) + někdy stopa titulků. V multimediálních souborech mohou být i jiné stopy, např. ikony, obrázky apod.
Formáty souborů
Těmto typům multimediálních souborů se říká souborový kontejner nebo také souborový formát (v angličtině file format). Ty se dělí na video a audio souborové kontejnery.
Kontejnerové soubory videí mají většinou video + audio stopy a soubory audio mají většinou pouze audio (zvuk) stopu. Souborové kontejnery se identifikují podle přípony souboru.
Videoformáty
Existuje spousta typů video souborových kontejnerů, např. *.avi, *.mkv, *.mpeg, *.ogg, *.mp4 apod.
Audioformáty
Stejně tak existují i audio souborové kontejnery, např.: *.mp3, *.flac, *.wma, *.wav apod.
Každý tento souborový kontejner (formát), ať se jedná o video nebo audio, disponuje svou specifikací (standardem), jako např. tento typ *.mkv (Matroska). Problémem je, že některé tyto souborové kontejnery jsou vyvinuty různými společnostmi a ty za jejich používání chtějí licenční poplatky. To je důvod, proč nemusí být vždy podporovány.

Typy kodeků
Jak jsem uvedl, každý multimediální soubor je kontejnerem, jenž obsahuje video (obrazové) / audio(zvukové) stopy. Tyto stopy bývají většinou zakódovány kodekem. Zopakuji to ještě jednou, kodeky jsou pouze komprimační algoritmy, jenž mají jediný účel a to zmenšit velikost souboru.
Opět existují různé video nebo audio kodeky (někdy pojmenované jako video/audio kompresní formáty). U video kodeků to jsou např. Xvid, DivX, h264, h265, mpeg2, mpeg4 apod. a u audio kodeků např. aac, Vorbis, mp3, Opus, či audio kodeky známé z VoIP typu G.711, G.722 apod.
Funkce FFmpeg
FFmpeg zastřešuje tyto činnosti:
- Encode (kódování) - Data představující multimediální obsah zakóduje do definovaného kodeku (kompresního algoritmu)
- Decode (dekódování) - Data představující multimediální obsah zakódované kompresním algoritmem dekóduje tak, aby se dala používat
- Transcode (překódování) - převádění multimediálních souborů do jiného souborového kontejneru, do jiného kodeku, jiné snímkovací frekvence (framerate), apod.
- Mux (spojování stop) - kombinování dvou a více stop do jednoho souborového kontejneru. Např. video stopa + audio stopa 1 + audio stopa 2 + stopa titulků
- Demux (odstraňování stop) - opak Muxu, odstraňování nebo rozdělení multimediálního kontejneru (souboru) na více stop (souborů)
- Streaming (vysílání na síť) - umožňuje multimediální obsah (soubor) vysílat ve formě proudu (streamu) po síti (LAN/MAN/WAN). Více info případně na https://trac.ffmpeg.org/…reamingGuide
- Filtering (úprava přes filtry) - umožňuje provést vámi nadefinované filtry na multimediální soubory
- Play (přehrávání) - ano, FFmpeg umožňuje i dané multimediální soubory přehrávat
Stažení a instalace
Takže to je pro úvod vše. FFmpeg si stáhneme zde. Sjedeme na ikonu Windows (případně jinou, pokud máte jiný OS), a pod ní se nám objeví text Windows Builds, na který klikneme:

Přesměruje nás to na stránku s buildy. My si vybereme poslední stabilní verzi (je označena číslem verze), pak typ architektury (Win64 či Win32) a u linkingu si vybereme shared (sdílenou). Pak zvolíme přímo Download Build. Daná varianta bude mít méně než 30 MB a bude zkomprimovaná v *.zip.
Daný soubor si rozbalte kam chcete (např. do
C:\Program Files\FFmpeg\
) a nakopírujte (program se neinstaluje).
V případě, že se ho budete chtít zbavit, stačí jej pouze smazat, není
nutná odinstalace. V adresáři doc/
naleznete dokumentaci a v
bin/
najdete naše programy, které budeme využívat.
Nastavení PATH
Nyní je nutné nastavit systémovou proměnnou
PATH
tak, abychom při práci s FFmpeg nemuseli stále
znovu a znovu vypisovat cestu k daným programům. Ve Windows (v mém případě
ve Windows 10) si najdeme Ovládací panely a budeme postupovat takto (je nutné
mít práva administrátora ve Windows): Ovládací panely –> Systém
–> Upřesnit nastavení systému –> Upřesnit –> Prostředí
proměnných –> vybereme PATH a zvolíme upravit –> a zde vybereme
Nový a vy jen nastavte cestu tak, aby vedla k programům umístěným v
adresáři bin/
, např. C:\Program Files\FFmpeg\bin\
.
A restartujte PC.

Programy FFmpeg umístěné v
bin/
Na konec úvodní lekce se podívejme jaké programy máme ve frameworku vlastně k dispozici:
FFprobe.exe
- program, který vypisuje metainformace (rozlišení, framerate, typ kodeku atd.) u multimediálních souborůFFmpeg.exe
- program, který provádí úpravy multimediálních souborůFFplay.exe
- program, který umožňuje přehrávání multimediálních souborů
Hardwarové požadavky
Co se týká hardwarových požadavků, program je plně vícevláknový (multithreaded). Při kódování/dekódování plně využívá všechna logická jádra. Ve zkratce se dá říci, čím více logických jader, tím rychleji kódování/dekódování probíhá a přibližně s přímou úměrou (4 jádra jsou přibližně 2x rychlejší než 2 jádra, 16 jader je 4x rychlejší než 4 jádra). Pod FFmpeg existuje i podpora hardwarové akcelerace přes grafické karty. Nicméně to jsem ještě nezkoušel. Co se týká pevných disků, při kódování/dekódování se nepřenáší moc rychle data, takže není podstatné, jestli máte SSD nebo standardní plotnový disk (zn. HDD). To samé platí i o operačních pamětích. Rychlost a velikost není moc podstatná. Ale min 4GB RAM byste měli mít. Takže závěrem u FFmpeg zásadním způsobem ovlivňuje rychlost kódování/dekódování pouze počet jader vč. hyper-threadingu.
V příští lekci, FFprobe - Analýza multimediálních souborů, se budeme věnovat prvnímu ze zmíněných nástrojů, tedy analýze multimediálních souborů.