První novoroční výprodej PHP týden
80 % bodů zdarma díky akci Black Friday!
Pouze tento týden sleva až 80 % na e-learning týkající se PHP

Lekce 1 - Framework FFmpeg - Představení a nastavení

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

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/u­pravovat/přeh­rá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/de­komprimačních algoritmů, jenž jsou známé jako kodeky.

Kodeky

Kodeky nejsou prakticky nic jiného než komprimační/de­komprimač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í

Naši partneři možná hledají právě tebe!

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.

Schéma multimediálního souboru

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:

Stažení FFmpeg

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.

Nastavení PATH pro FFmpeg

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ů.


 

 

Článek pro vás napsal Robert Michalovič
Avatar
Jak se ti líbí článek?
2 hlasů
Programuji převážně v Javě SE,EE a trochu nativním C a CUDA. více viz.https://cz.linkedin.com/in/robert-michalovic
Všechny články v sekci
Úprava audio a video souborů pomocí frameworku FFmpeg
Miniatura
Následující článek
FFprobe - Analýza multimediálních souborů
Aktivity (6)

 

 

Komentáře

Avatar
tesař.tech
Redaktor
Avatar
tesař.tech:23. ledna 12:39

Pěkné. Přidám k tomu pár informací:

  • Na windows je ffmpeg nejjednodušší nainstalovat pomocí chocolatey (stejně jako většinou softu), nastaví se sama path, a je to najeden příkaz v cmd..
  • Dobrým UI pro ffmpeg je WinFF

A mám k tomu jednu otázku: Máš nějakou zkušenost s ffmpeg na Androidu?

 
Odpovědět
23. ledna 12:39
Naši partneři možná hledají právě tebe!
Avatar
Robert Michalovič:24. ledna 5:40

Ne, ffmpeg jsem na Androidu nezkoušel.

 
Odpovědět
24. ledna 5:40
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.