Hlavní navigace

Ohlédnutí za historií projektu FFmpeg: čtvrt století digitálního videa

27. 1. 2023
Doba čtení: 6 minut

Sdílet

 Autor: © HaywireMedia - Fotolia.com
Kostya Shishkov se teď v lednu rozpovídal o historií FFmpegu. Je to místy čtení zajímavé a sluší se připomenout si, jak to bylo, je, bude s jedním z významných open-source projektů audio/video světa.

V případě zájmu můžete rovnou ke Kosťovi zavítat, já si na tomto místě dovolím vypíchnout některé zajímavosti. Kosťa zahajuje ještě v prosinci 2022 vzpomínkou na již ukončený projekt forku FFmpegu, známý jako Libav. Pamatuji si, kterak jsem o něm v roce 2011 psal, včetně prorocké myšlenky: „… libav, který založili, … někteří vývojáři FFmpeg po vnitřních neshodách se zbývajícími. Jakým směrem se bude libav ubírat, není v tuto chvíli moc jasné, doufejme, že toto štěpení sil příliš projektu neublíží (ať FFMpeg, nebo libav).“. Slova se nakonec naplnila, Libav vydržel pouze do roku 2018.

Založení projektu

Připomíná také otce zakladatele, francouzského vývojáře Fabrice Bellarda, který FFmpeg v roce 2000 založil a kterého můžeme znát jako autora i dalších zajímavých projektů jako BPG, QuickJS či TinyCC. Vzpomíná také Michaela Niedermayera, který po pár letech převzal otěže vedení projektu, za jehož éry nastal velký vzestup FFmpegu (ostatně například kdo dnes používá mencoder?).

Vzpomíná též na dobu, kdy byl poměrně provázán vývoj FFmpegu a přehrávače MPlayer, kdy na obou projektech současně pracovalo několik vývojářů (včetně již zmíněného Michaela Niedermayera). Léta mezi 2003 a 2009 považuje Kosťa za zlatou éru FFmpegu, kdy přicházely řady nových vývojářů (i kdyby jen nakrátko v rámci GSoC) a rychle se implementovaly nové věci a projekt výrazně rostl. FFmpegu si všímal širší svět, balík se stal často i standardním průmyslovým řešením na mnohé úlohy (včetně třeba broadcastingu díky podpoře specifických kontejnerů).

Objevovaly se ale i obvyklé problémy z růstu, Kosťa zmiňuje dohady kolem migrace na Git (projekt původně začínal na SourceForge) či snahy některých o vydávání pravidelných nových verzí, namísto neustálého setrvávání na vývojových značeních typu 0.4.9pre1, nebo třeba pro mnohé nemyslitelné vyhazování zastaralé funkcionality (ostatně to byl jeden z důvodů vzniku Libav, stejně platí i pro poslední jmenovaný v řetězci MPlayer → MPlayer2 → MPV).

Pak přišel Jean-Baptiste Kempf z VideoLAN a FFmpeg začal dostávat lepší architektonickou strukturu a blížila se doba, kdy na vývoj třeba začnou přispívat mnohé bohaté firmy z projektu žijící. Ostatně VLC jako ukázkový projekt přehrávače se zabudovanými kodeky nesmíme opomenout, se svými schopnostmi streamingu a transcodingu též změnil svět (snad to nezní příliš nadneseně).

Kosťa dále vzpomíná i na projekt Xine. Marně jsem vzpomínal, kdy jsem na něj narazil naposledy, bude to už několik let. Wikipedia hlásí, že poslední verze je z roku 2017, web projektu uvádí jako aktuální xine-lib 1.2.11 z prosince 2020. Tak jako tak lze vyvozovat, že i Xine dochází dech.

FFmpeg a MPlayer

Dále připomíná, kterak krátce po zveřejnění projektu jej zaregistrovali lidé z MPlayeru a ihned nabídli vývojáře i hosting a začala vzájemná spolupráce. Mezi lidmi, kteří se o FFmpeg zasloužili, tak nalezneme i Árpáda Gereöffyho, zakladatele MPlayeru (a samozřejmě mnohé další). Kosťa vzpomíná, kterak Árpi zabodoval hláškou, že nepotřebuje backupy, protože má RAID, jen k jeho smůle měl RAID tvořený disky IBM Deskstar se skleněnými plotnami, známými též jako DeathStar, neb víceméně 100% těchto disků nedlouho po uvedení do provozu selhalo a spektakulárně sebou vzalo všechna data, včetně záznamové vrstvy na plotnách (šlo o legendární produktovou řadu IBM Deskstar 75GXP). Jeho styl psaní kódu byl hrozný a původní vývojáři dodnes s hrůzou vzpomínají na originální soubory mplayer.c a mencoder.c obsahujícími úžasná řešení přehrávání MPEG videa ve stylu „když to hodí segfault, zachyť signál a restartni dekódování“. Ale i tak začínají slavné projekty.

Ale tím, kdo vytesal FFmpeg do podoby, jakou má dnes, je Michael Niedermayer. Začínal na MPlayeru, aby následně přesměroval svoji pozornost na FFmpeg. Za ta léta, co projekt de facto vedl, si připsal věci jako zrychlení kódování i dekódování zavedením spousty pro x86 specifických optimalizací a celkovým vyladěním C-čkového kódu, vylepšení podpory MPEG-4 Part 2, implementace formátů jako H.264, vymyšlení vlastních formátů (FFV1, Snow), přidání klíčových prvků (nahrazení imgconvert za novější libswscale a jeho pozdější relicencování pod LGPL), spousta testování, oprav chyb a vedení projektu.

Vedle výše uvedených se Kosťa věnuje i mnoha a mnoha dalším vývojářům a jejich příspěvkům do projektu, ať již ve vývoji, nebo reverzním inženýrství, přidávání doprovodných vlastností atd. Věnuje se samostatně i audiu a popisuje vše až do éry VP9 a AV1, v mých silách však není zde vše přepisovat a vyzobávat zajímavé. Vřele Kosťův miniseriál doporučuji k samostudiu. V něm se mimochodem autor záměrně vyhýbá vývojářům projektu x264, který představuje ve světě open-source videa stěžejní projekt, v jehož rámci vznikla spousta úžasného, z čehož těží (nejen) FFmpeg dodnes – není to ale v Kosťových silách, do x264 tolik nevidí.

Motivace pro projekt

Ale proč vlastně to všechno? Otázka pochopitelně sahá zhruba čtvrt století do minulosti, možná až 30 let zpět. Zvukový formát MP3 je tu s námi od roku 1993, přičemž kolem 1997/1998 se stal mainstreamově používaným. DVD-Video, tedy MPEG-2 komprimované video, je tu s námi od roku 1996, přičemž běžně používaným se stalo o pár let později. K tomu se zhruba kolem roku 2000 přidal Microsoft s jeho implementací video standardu MPEG-4 ASP v rámci balíku Windows Media Tools 4, jejichž součástí byl kodek Microsoft MPEG-4 Version 3, jehož hacknutím a vyvedením mimo vlastní aplikaci Microsoftu do podoby univerzálně použitelného video kodeku vznikl DivX (tehdy jako DivX ;-) verze 3.xx). Toto vše byly atributy, které připravily půdu pro potřebu nějakého budoucího balíku kodeků pro video, audio, muxerů pro používané multimediální kontejnery (vzpomeňme kontejner Ogg, případně Matrošku) a další související věci.

Trh zkrátka před čtvrt stoletím dosměřoval od analogového audia a videa k digitálnímu. Vyvstala nejen potřeba digitalizace analogu, ale i transcodingu digitálního videa. To první reprezentovaly třeba TVripy do DivX+MP3/avi a legendární grafické karty ATI All-in-Wonder (se silnou českou komunitou na tzv. Mischově diskusi, později ATifanově diskusi), to druhé třeba DVDripy do téže kombinace formátů a kodeků. Kdo tehdy vstával v noci, aby z ČT2 na své Bt878 kartě ripnul reprízu filmu z cyklu Americké nezávislé léto na nestabilních Windows 98 SE do M-JPEGu s následnou X-hodinovou rekompresí do DivXu, jistě nyní zatlačil slzu.

Právě tito nadšenci byli tahouny vývoje. Tam, kde by nám korporát dal QuickTime a Windows Media Encoder s jejich omezeními, dala nám komunita nejprve „ukradený“ DivX, později překopaný do otevřené, průběžně vylepšované podoby, která vyvrcholila kodekem XviD, aby na ni navázaly zejména projekty x264 – x265 – x266 (na spandutí). Fabrice Bellard byl prostě první, ale jak dnes už víme z historie, otěží vývoje se posléze chopili další vynikající vývojáři jako Fiona Glaserová (dříve známá jako Jason Garrett-Glaser alias Dark Shikari na fóru Doom9 specializovaném na video a vývoj kodeků), která se podílela na vylepšení x264 pomocí adaptivní kvantizace, později backportovanou i do kodérů starších video formátů.

Proto je jedině logické, že vznikaly projekty jako FFmpeg či Mencoder. A z podstaty rostoucí složitosti a náročnosti vývoje je též logické, že postupně projektů ubývalo, až vedle přežívajících majorita používá onen vítězný projektu, v našem případě tedy FFmpeg. Ostatně kdo si vzpomene, že vedle MS MPEG-4 a DivX či XviD existoval třeba také kodek 3ivX?

UX DAy - tip 2

Nejen ffdshow

Osobně jsem FFmpeg vlastně poprvé potkal díky projektu ffdshow. Tento ryze windowsový build FFmpegu do podoby VFW (Video for Windows – pro Windows 9×) / DirectShow (primárně pro Windows NT / 2000 / XP a výš) byl úchvatnou věcí: oproti referenčním kodekům typu XviD nabízel myriády nastavení pro všemožné filtry ve FFmpegu, vše v dobře fungujícím GUI, vše skvěle připravné pro stsandardní cestu přehrávání videí na Windows ve Windows Media Playeru 6.4 (později komunitou pokračujícím jako Media Player Classic (MPC), resp. MPC-HC – Home Cinema, již s podpoou hardwarové akcelerace na GPU). Tam, kde linuxový svět měl své úžasně zjevení v podobě MPlayeru (a tudíž i FFmpeg), měli lidé na Windows k dispozici ffdshow.

Desítkám vývojářů patří dík, že tento často zmatený balík všeho možného s často (na první pohled) zmatenou syntaxí stále vyvíjejí a na jejich práci mohou stavět další, nabízet světu něco víc, s FFmpegem pod kapotou. Vždyť kdo by tomu věřil, že na Marsu jezdí vozítko Perseverance, využívající FFmpeg pro kompresi obrazových a video dat před jejich odesláním na zem. Před 20 lety asi málokdo, dnes je však právě toto realitou.

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

Autor článku

Příznivec open-source rád píšící i o ne-IT tématech. Odpůrce softwarových patentů a omezování občanských svobod ve prospěch korporací.