FFmpeg
FFmpeg je svobodný a otevřený softwarový projekt, který se skládá ze sady knihoven a programů pro práci s videem, zvukem a dalšími multimediálními soubory a datovými proudy. Jeho jádrem je samotný nástroj ffmpeg
pro příkazový řádek, určený pro zpracování video a audio souborů. Je široce používán pro překódování formátů, základní úpravy (stříhání a spojování), škálování videa, postprodukční efekty videa a dodržování standardů (SMPTE, Mezinárodní telekomunikační unie).
Vývojář | FFmpeg tým |
---|---|
První vydání | 20. prosince 2000 |
Aktuální verze | 7.1 (30. září 2024) |
Operační systém | multiplatformní software |
Platforma | x86 architektura ARM PowerPC Architektura MIPS DEC Alpha Blackfin AVR32 SPARC |
Vyvíjeno v | C, jazyk symbolických adres a C++ |
Typ softwaru | multimediální framework |
Licence | LGPL nebo GPL |
Web | ffmpeg.org |
Některá data mohou pocházet z datové položky. |
FFmpeg obsahuje také další nástroje: ffplay
, jednoduchý přehrávač médií, a ffprobe
, nástroj příkazového řádku pro zobrazení informací o médiích. Mezi obsažené knihovny patří libavcodec, knihovna audio/video kodeků používaná mnoha komerčními i svobodnými softwarovými produkty, libavformat (Lavf),[1] knihovna pro multiplexování audio/video kontejnerů, a libavfilter, knihovna pro vylepšování a úpravu filtrů přes filtrgraf, podobný Gstreameru.[2]
FFmpeg je součástí pracovních postupů mnoha dalších softwarových projektů a jeho knihovny jsou základní součástí softwarových přehrávačů médií, jako je VLC, a byl zahrnut do jádra pro zpracování videí YouTube a BiliBili.[3] Obsahuje kodéry a dekodéry pro mnoho formátů zvukových a video souborů, takže je velmi užitečný pro překódování běžných i neobvyklých mediálních souborů.
FFmpeg je zveřejněn pod licencí LGPL (verze 2.1 či novější) nebo GPL (verze 2.0 či novější), podle toho, které možnosti jsou povoleny.[4]
Historie
editovatProjekt založil vývojář Fabrice Bellard (pod pseudonymem Gerard Lantau) a v současnosti jej udržuje Michael Niedermayer.[5][6] FFmpeg je vyvíjen pod systémem Linux, ale může být zkompilován pod většinou operačních systémů (včetně Microsoft Windows).
Součásti
editovatProjekt se skládá z několika komponent.
- Nástroje
- ffmpeg je utilita pro příkazový řádek pro konverzi video formátů. Podporuje také grabování a kódování v reálném čase z TV karty.
- ffplay je jednoduchý multimediální přehrávač založený na SDL a knihovnách FFmpeg.
- ffprobe je jednoduchý analyzátor multimediálních streamů.
- Odstraněno od verze 4.0: ffserver je HTTP a RTSP multimediální streamovací server pro živá broadcastová vysílání. Podporuje také posun času.
- Knihovny
- libavcodec je knihovna obsahující všechny audio a video kodéry a dekodéry. Většina kodeků byla vyvinuta s úsilím pro maximální výkon a znovupoužitelnost kódu.
- libavformat je knihovna obsahující demuxery a muxery pro audio/video kontejnerové formáty.
- libavutil je pomocná knihovna obsahující rutiny společné pro jednotlivé části kolekce FFmpeg.
- libavdevice je knihovna umožňuje komunikovat se zařízeními přes mnoho multimediálních rozhraní (Video4Linux, Video4Linux2, Video for Windows, ALSA).
- libpostproc je knihovna obsahující rutiny pro postprocessing videa.
- libavfilter je knihovna obsahující filtry (efekty, filtry OpenCV a frei0r).
- libswscale je knihovna obsahující rutiny pro změnu rozlišení a barevného modelu videa.
- libswresample, libavresample jsou knihovny implementující optimalizované převzorkování audia a změnu jeho formátu.
FFmpeg je uvolněn pro LGPL nebo GPL (závisí na konkrétní knihovně / části kódu).
Vývojáři FFmpeg rozkryli (reverzním inženýrstvím) a reimplementovali následující formáty (kvůli tomu může být část projektu v některých zemích nelegální):
- Sorenson 3 Codec použitý v mnoha filmech pro QuickTime
- Advanced Streaming Format
- Windows Media Audio
- Windows Media Video
- QDesign Music Codec 2, použitý v mnoha filmech pro QuickTime před verzí QuickTime 7.
Standardní MPEG-4 kodek použitý v FFmpeg má přiřazen FourCC kód FMP4
.
Funkce FFmpeg
editovat- Kódování - zakóduje data podle kompresního algoritmu
- Dekódování - dekóduje data zakódované kompresním algoritmem
- Překódování (transcode) - překóduje soubor do jiného kontejneru
- Spojování stop (mux) - kombinuje několik stop do jednoho kontejneru
- Odstraňování stop (demux) - odstraní nebo rozdělí soubor na více stop
- Vysílání na síť - vysílá soubor ve formě proudu
- Úprava přes filtry - provede filtry na soubory
- Přehrávání - přehrává soubory[7]
Hardwarová podpora
editovatFFmpeg je vícevláknový program. Podporuje akceleraci přes grafické karty.[8] Podporuje architektury x86, PPC (PowerPC), ARM, DEC Alpha, SPARC, a MIPS.
FFmpeg podporuje následující aplikačně specifické integrované obvody (anglicky application-specific integrated circuit)[8]:
ASIC | Podpora v FFmpeg |
---|---|
UVD | Dekódování |
VCE | Kódování |
Crystal HD | Dekódování |
Hexagon | Kódování a dekódování |
Intel Clear Video | Dekódování |
Intel Quick Sync Video | Kódování a dekódování |
PureVideo/NVDEC | Dekódování |
Ukázka použití
editovatNásledující kód demonstruje použití FFmpeg na otevření souboru s videem.
#include <avcodec.h>
#include <avformat.h>
int main(int argc, char *argv[])
{
av_register_all();
AVFormatContext *pFormatCtx;
if(av_open_input_file(&pFormatCtx, argv[1], NULL, 0, NULL) != 0)
return -1;
…
Grafy filtrů
editovatFFmpeg umožňuje specifikovat na příkazové řádce graf filtrů, kterým mají multimediální data procházet. Následující příkaz vloží před zobrazení snímků filtr, který překlopí obraz podle vertikální osy.
ffplay -vf vflip clock.avi
Filtrům je možno předávat parametry. Další příkaz vloží to řetězce filtr, který provede ořez snímku. Ořez má rozměry pixelů a počíná na souřadnicích (0,0).
ffplay -vf crop=256:256:0:0 clock.avi
Poslední příkaz zařadí řetězec filtrů. Každý snímek je nejprve transponován, a poté negován.
ffplay -vf "transpose, negate" clock.avi
Historie vydání
editovatMajoritní verze FFmpegu vycházejí přibližně každé 3 měsíce. Mezi majoritními verzemi jsou vydávány pouze opravy důležitých chyb.
větev | krycí jméno | první vydání | poslední vydání | aktivní vývoj |
---|---|---|---|---|
5.0 | Lorentz[9] | 2022-01-17 | 2022-04-04 | ano |
4.4 | Rao[9] | 2021-04-08 | 2022-04-14 | ano |
4.3 | 4:3[9] | 2020-06-15 | 2022-04-16 | ano |
4.2 | Ada[9] | 2019-08-05 | 2022-04-16 | ano |
4.1 | al-Khwarizmi | 2018-11-06 | 2022-04-17 | ano |
4.0 | Wu | 2018-04-20 | 2020-07-03 | ne |
3.4 | Cantor | 2017-10-15 | 2022-04-22 | ano |
3.3 | Hilbert | 2017-04-13 | 2018-11-18 | ne |
3.2 | Hypatia | 2016-10-27 | 2022-04-23 | ano |
3.1 | Laplace | 2016-06-27 | 2017-09-25 | ne |
3.0 | Einstein | 2016-02-15 | 2018-10-28 | ne |
2.8 | Feynman | 2015-09-09 | 2021-10-21 | ne |
2.7 | Nash | 2015-06-10 | 2016-04-30 | ne |
2.6 | Grothendieck | 2015-03-07 | 2016-05-03 | ne |
2.5 | Bohr | 2014-12-04 | 2016-02-02 | ne |
2.4 | Fresnel | 2014-09-14 | 2017-12-31 | ne |
2.3 | Mandelbrot | 2014-07-16 | 2015-01-06 | ne |
2.2 | Muybridge | 2014-03-23 | 2015-06-18 | ne |
2.1 | Fourier | 2013-10-28 | 2015-04-30 | ne |
2.0 | Nameless | 2013-07-10 | 2015-06-10 | ne |
1.2 | Magic | 2013-03-15 | 2015-02-12 | ne |
1.1 | Fire Flower | 2013-01-07 | 2015-03-13 | ne |
1.0 | Angel | 2012-09-28 | 2014-07-20 | ne |
0.11 | Happiness | 2012-05-25 | 2014-03-10 | ne |
0.10 | Freedom | 2012-01-27 | 2015-03-12 | ne |
0.9 | Harmony | 2011-12-11 | 2014-03-21 | ne |
0.8 | Love | 2011-06-21 | 2013-10-06 | ne |
0.7 | Peace | 2011-06-21 | 2015-03-12 | ne |
0.6 | Works with HTML5 | 2010-06-15 | 2013-09-23 | ne |
0.5 | half-way to world domination A.K.A. the belligerent blue bike shed | 2009-03-10 | 2014-11-29 | ne |
Zajímavost
editovatV letech 2020 a 2021 NASA uskutečnilo misi Mars 2020, kde jejich vozítko Perseverance použilo FFmpeg pro kompresi fotografií a videa odeslaného zpět na Zemi.[10]
Reference
editovatV tomto článku byl použit překlad textu z článku FFmpeg na anglické Wikipedii.
- ↑ FFmpeg: Lavf: I/O and Muxing/Demuxing Library [online]. [cit. 2016-10-21]. Dostupné online.
- ↑ Libavfilter Documentation [online]. [cit. 2021-10-07]. Dostupné online.
- ↑ ijkplayer. [s.l.]: bilibili, 2021-10-05. Dostupné online.
- ↑ FFmpeg License and Legal Considerations [online]. ffmpeg.org [cit. 2012-01-04]. Dostupné online.
- ↑ A Group Of FFmpeg Developers Just Forked As Libav [online]. Phoronix, 2011-03-14 [cit. 2011-03-17]. Dostupné online. (anglicky)
- ↑ Libav News [online]. Libav, 2011-03-13 [cit. 2011-03-17]. Dostupné v archivu pořízeném dne 2011-06-05. (anglicky)
- ↑ MICHALOVIČ, Robert. Lekce 1 - Framework FFmpeg - Představení a nastavení. www.itnetwork.cz [online]. [cit. 2021-04-16]. Dostupné online.
- ↑ a b HWAccelIntro – FFmpeg. trac.ffmpeg.org [online]. [cit. 2021-04-16]. Dostupné online.
- ↑ a b c d FFmpeg. ffmpeg.org [online]. [cit. 2021-04-16]. Dostupné online.
- ↑ MAKI, J. N.; GRUEL, D.; MCKINNEY, C. The Mars 2020 Engineering Cameras and Microphone on the Perseverance Rover: A Next-Generation Imaging System for Mars Exploration. Space Science Reviews. 2020-11-24, roč. 216, čís. 8, s. 137. Dostupné online [cit. 2021-04-16]. ISSN 1572-9672. DOI 10.1007/s11214-020-00765-9. PMID 33268910. (anglicky)
Související články
editovat- MPlayer a MEncoder (využívající libavcodec a libavformat)
- ffdshow (využívající libavcodec)
- xine (využívající libavcodec)
- VLC media player (využívající libavcodec)
Externí odkazy
editovat- Obrázky, zvuky či videa k tématu FFmpeg na Wikimedia Commons
- Ohlédnutí za historií projektu FFmpeg: čtvrt století digitálního videa
- Oficiální stránka projektu FFmpeg (anglicky)
- Oficiální stránka projektu Libav Archivováno 5. 6. 2011 na Wayback Machine. (anglicky)