FFmpeg

A Unix/Linux szerverek üzemeltetése wikiből
(Változatok közti eltérés)
a (olvasószerkesztés)
 
(2 szerkesztő 12 közbeeső változata nincs mutatva)
1. sor: 1. sor:
== Mi is az az FFMPEG? ==
+
Az FFmpeg programokból és programkönyvtárakból tevődik össze. Ezek azt a feladatot hivatottak ellátni, hogy multimédiás tartalmat dolgozzanak fel. Így ugyanúgy felhasználhatóak hang, videó, átkódolására, mint közzétételére (broadcasting) és megtekintésére is.
   
Az FFMPEG programokból és programkönyvtárakból tevődik össze. Ezek azt a feladatot hivatottak ellátni, hogy multimédiás tartalmat dolgozzanak fel. Így ugyanúgy felhasználhatóak hang, videó, átkódolására, mint közzétételére (broadcasting) és megtekintésére is.
+
A fejlesztést Fabrice Bellard kezdte, aki az FFmpegen kívül a [http://wiki.qemu.org/Main_Page QEMU] projekt alapítója is. 2004-től a projekt karbantartását Michael Niedermayer végzi. A fejlesztők többnyire az MPlayer lejátszó fejlesztésében is részt vesznek. A programot GNU/Linux alatt írják, de számos operációs rendszerre létezik változata. Fordították x86-64, ARM, PowerPC architekrúrájú számítógépekre is.[http://en.wikipedia.org/wiki/FFmpeg]
   
A fejlesztést Fabrice Bellard kezdte, aki az FFMPEG-en kívül a QEMU projekt alapítója is. Fabrice kétszer nyerte meg az IOCCC versenyt, egyszer 2000-ben, mikor saját algoritmusával sikerült az akkori legnagyobb prím számot kiszámítania, majd 2001-ben egy 3 KB forrású C fordító segítségével sikerült szabványos programot előállítani i386 processzorokra.[[http://en.wikipedia.org/wiki/Fabrice_Bellard 1]] 2004-től a projekt karbantartását Michael Niedermayer végzi.A lelkes fejlesztők többnyire az MPLAYER lejátszó fejlesztésében is részt vesznek. A programot GNU/Linux alatt írják, de számos operációs rendszerre létezik változata. Fordították x86-64, ARM, PowerPC architekrúrájú számítógépekre is.[[http://en.wikipedia.org/wiki/FFmpeg 2]]
+
Alapvetően videó és audió kódolására használják. Képes a feliratok kezelésére is. Szinte minden hang- és mozgóképformátumot kezel és ismeri a hálózati protokollokat is. A fejlesztők igen gyakran integrálják lejátszóikba az FFmpeg programkönyvtárat.
   
Alapvetően videó és audió kódolására használják. Képes a feliratok kezelésére is. Szinte minden formátumot kezel és ismeri a hálózati protokolokat is. A fejlesztők igen gyakran integrálják lejátszóikba az FFMPEG programokönyvtárat.
+
== Az FFmpeg működése ==
   
Maga az FFMPEG programcsomag az alábbi összetevőkből áll:
+
Az FFmpeg a mai elterjedt legtöbb videó- és hangkódolási szabványt ismeri. Első lépésben azonosítja a fájl kiterjesztése szerint vagy a fejléc szerint a container-t. A [http://en.wikipedia.org/wiki/Container_format_%28digital%29 container] a legkülső burok, ami tartalmazhatja a multiplexált audio, video adatfolyamokat vagy a feliratokat. MPEG2 szabvány esetén ezt transport streamnek(TS) is hívhatják, ami több különböző ún. program streamet (PS) tartalmaz. DVB-T esetén - ami a földi digitális műsorszolgáltatás alapja - egy analóg csatorna helyén egy digitális MPEG2 TS talállható, ami tartalmazza az MPEG2 PS-eket. Más containerek is léteznek: ilyen pl. az AVI, Matroska(mkv), OGG. A container megállapítása után megkeresi a különböző adatfolyamokat vagy stream-eket. Az adatfolyamok tartalmazzák az adott szabvány szerint kódolt hangot, képet vagy feliratot. A tömörítési szabványokat kodeknek is nevezik. Ezeket fogja sorrendhelyesen dekódolni lejátszásnál, átkódolásnál a program. A DVB-T-s példa esetén ez a video kodek a [http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC H.264], míg audio esetén az [http://en.wikipedia.org/wiki/Advanced_Audio_Coding AAC] kodek. A különböző nyelvek, külön streamként vannak elküldve.
   
FFMPEG program, mely képes a különböző fájlok dekódolására. A dekódolt videót/videókat képes újrakódolni és akár több kimenetre egyszerre átkódolni. Ez a kimenet lehet hálózati folyam is és egyszerű avi fájl egyaránt.
+
Minden kodeknek megvan a maga előnye és kora. A régebbi kodekeket, pl. [http://en.wikipedia.org/wiki/MPEG-2 MPEG2] video és [http://en.wikipedia.org/wiki/MP3 MP3] a régebbi eszközök is támogatják, általában könnyebben dekódolható. Az újabb kodekek alacsonyabb sávszélesség mellett, szebb képet és hangot biztosítanak, de a kódolás és dekódolás komplexitása nagyobb. Pl. a [http://en.wikipedia.org/wiki/WAV WAV] és a [http://en.wikipedia.org/wiki/FLAC FLAC] tömörítések képesek veszteségmentesen tömöríteni a hangot, míg a Canopus [http://en.wikipedia.org/wiki/Audio_Video_Interleave#DV_AVI DV avi] kb. [http://en.wikipedia.org/wiki/JPEG JPEG] fájlonként tömöríti a videót. MPEG2 esetén már csak a képkockák közötti különbségeket és jóslási hibákat viszi át a rendszer. MPEG4 esetén elég csak képrészleteket továbbítani.
   
Az FFSERVER egy kis erőforrás igényű streaming server, mely az FFMPEG programmal működik csak együtt. Az FFMPEG által átkódolt műsort képes szétszórni a kliensek között.
+
Ha a kezdő teljes képkockát átküldtük a dekódolónak, akkor elég csak az eltérést átvinni a következő képkocka megjelenítéséhez. A teljes képkocka, melyet I-vel szokás jelölni lehet tömörített kép is. A különbségi kép jele általában B. Ha rendelkezésre áll egy I kép és egy B kép, akkor a közte lévő képkockák kitalálhatóak pl. lineáris interpoláció segítségével, ez maga a jóslat. Ilyen esetben elég a jóslat és a valós kép közötti hibát átvinni a rendszeren, ezt végzik a P képek segítségével. Az I kép és I kép közötti szakaszt [http://en.wikipedia.org/wiki/Group_of_pictures Group of Pictures-nek (GOP)] hívják.
   
Az FFPLAY egy egyszerű videólejátszó, mely az FMPEG által kezelt formátumok megjelenítésére szolgál. Megjelenítéshez a platformfüggetlen SDL könyvtárat használja.
+
Az legtöbb tömörítés veszteséges és azt használja ki, hogy az emberi érzékelés nem tökéletes, így az amúgy sem érzékelhető jeleket kiszűrik. A veszteségesség határát, a tömörítés mértékét a rendelkezésre álló sávszélesség és a számítási kapacitás határozza meg. Ugyanabból a kodekből is léteznek különböző profilok, melyek különböző komplexitást jelentenek, pl. H264 baseline iPadre vagy H264 High Quality pc-re.
   
Maga a projekt nyílt forráskódú, szabad projekt, a GNU GPL vonatkozik rá. Néhány összetevője, pl. az AAC hangkódoló libfaac nem szabadon terjeszthető, így fordítástól függően GNU LGPL liszensz vonatkozik .Az FFMPEG fejlesztői komolyan veszik a jogi szabályozásokat, így létrehzoztak egy szégyenfalat azok számára, akik nem mellékelik a módosított FFMPEG programkönyvtár forrását alkalmazásaik mellé.
+
Az FFmpeg avcodec könyvtára ismeri a leggyakoribb kodekeket és hasonló egyéb esetén megpróbálja kitalálni. Ezt úgy végzi, hogy egy hasonló felépítésű kodekkel játssza le az ismeretlen videofolyamot. Ez pl. digitális kamerák saját formátumainál hasznos, mikor szabványos kodekeket használnak, csak átírnak pár metaadatot a fejlécben.
   
== Hol használják az FFMPEG-et? ==
+
== Összetevők ==
   
A Linux alapú Mplayer lejátszó fejlesztöi részt vesznek az FFMPEG fejlesztésében is. A lejátszó így az teljes egészében az FFMPEG-re épül, sőt forrásként is sokan az MPLAYER-hez csatolt programkönyvtár forrását használják. Windowsra az Mplayer-nek több változata is van, köztük a gyakran használt KMPLAYER is, ezek is mind az FFMPEG-re építenek.[[http://www1.mplayerhq.hu/DOCS/codecs-status.html 3]] Az MPLAYER-nek létezik egy átkódoló változata, az MENCODER, ami szintén FFMPEG alapú.
+
Maga az FFmpeg programcsomag az alábbi összetevőkből áll:
A VLC media player is használja az FFMPEG codec könyvtárát[[http://wiki.videolan.org/Contrib_Status#Codecs 4]].
 
A GOM player oldalán is sokáig lehetett találni linket az FFMPEG forrásához, azonban ez már nem elérhető.
 
A Youtube-ot[[http://multimedia.cx/eggs/googles-youtube-uses-ffmpeg/ 5]] és a Facebook-ot[[http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2009-June/070998.html 6]] is érte gyanusítás, hogy átkódolás során az FFMPEG-et használja. Ez azért is lehetséges, mert az FFMPEG-hez létezik API php alapú szkriptekhez is ffmpeg-php néven, melyet a Vimeo.com oldal is használ.[[http://ffmpeg-php.sourceforge.net/ 7]]
 
A HandBrake ingyenes MPEG4 kódoló is az FFMPEG könyvtárat használja.[[http://handbrake.fr/details.php 8]]
 
További számtalan program és szolgáltatás használja az FFMPEG-et,ezek csupán a legelterjedtebbek.
 
   
== Hogyan szerezhető meg az FFMPEG? ==
+
* FFmpeg program, mely képes a különböző fájlok dekódolására. A dekódolt videót/videókat képes újrakódolni és akár több kimenetre egyszerre átkódolni. Ez a kimenet lehet hálózati folyam is és egyszerű avi fájl egyaránt.
   
A program forrása letölthetõ a projekt hivatalos weboldaláról. Az oldal hivatkozik külsõ, megbízható forrásokra, ahonnan különbözõ platformokra lefordított binárisokat találunk. Az Ubuntu csomaglistájában is megtalálható a program. Azonban, ha a legfrissebb verziót kívánja használni a felhasználó, akkor saját magának célszerű lefordítani a programot forrásból. Általában ezek a verziók több hibajavítást és kísérleti kodeket tartalmaznak, valamint a többi repository van, hogy hónapokig nem frissül.
+
* Az FFserver egy kis erőforrás igényű streaming server, mely az FFmpeg programmal működik csak együtt. Az FFmpeg által átkódolt műsort képes szétszórni a kliensek között.
A fordításhoz Windows környezetben MinGW-re van szükségünk pontos leírás a honlapon található#. A fordítási paraméterek között adható meg, hogy a különböző programkönyvtárakat belefordítsa az exe-be vagy külön dll-ként tárolja. A másik fontos beállítás a licenszek meghatároása. Itt mondható meg, hogy a kapott dll tartalmazzon e LGPL alá tartozó elemeket is a GPL-eseken kívül.
 
A program alapvetően platform független, minden operációs rendszerre található lefordítható változata.
 
   
== Hogyan dolgozik az FFMPEG? ==
+
* Az FFplay egy egyszerű videólejátszó, mely az FFmpeg által kezelt formátumok megjelenítésére szolgál. Megjelenítéshez a platformfüggetlen SDL könyvtárat használja.
   
As FFMPEG a mai elterjedt legtöbb szabványt ismeri. Első lépésben azonosítja a fájl kiterjesztése szerint vagy a fejléc szerint a container-t. A Container a legkülső burok ami tartalmazhatja a multiplexált audio,video adatfolyamokat vagy a feliratokat. Mpeg2 szabvány esetén ezt transport streamnek is hívhatják, ami több különböző ún. program streamet tartalmaz. DVB-T esetén - ami a földi digitális műsorszolgáltatás alapja - egy analóg csatorna helyén egy digitális MPEG2 TS talállható,ami tartalmazza az MPEG2 PS-eket. Más Containerek is léteznek: ilyen pl. az AVI, Matroska(mkv), Ogg. A Container megállapítása után megkeresi a különböző adatfolyamokat.Ezek a kdekekkel tömörített video és audio streamek. Ezeket fogja sorrendhlyesen dekódolni lejátszásnál, átkódolásnál. A DVB-T-s példa esetén ez a video kodek a H.264, míg audio esetén az AAC kodek. A különböző nyelvek, külön stream-ként vannak elküldve.Minden kodeknek megvan a maga előnye és kora. A Wav és a Flac tömörítések képesek veszteségmentesen tömöríteni a hangot, míg a Canopus DV avi kb. JPEG fájlonként tömöríti a videót, míg az MPEG 2 kódolásnál már csak a képkockák közötti különbségeket és jóslási hibákat viszi át a rendszer. Természesen ezt már veszteséggel teszi arra alapozva, h. az emberi szem nem tökéletes (hang esetén a fül, pl. MP3). A veszteségesség határát, a tömörítés mértékét a rendelkezésre álló sávszélesség és a számítási kapacitás határozza meg. Ugyanabból a kodekből is léteznek különböző profilok, pl. H264 baseline iPadre vagy H264 High Quality pc-re. Az FFMPEG avcodec könyvtára ismeri a leggyakoribb kodekeket és hasonló egyéb esetén megpróbálja kitalálni.
+
* Az FFprobe egy segédprogram a multimédiás fájlok felépítésének meghatározására. Segítségével megvizsgálható a tömörítés típusa és néhány tulajdonsága.
   
== Mi is az FFPROBE? ==
+
Az alábbiakban részletesebben is bemutatom ezeket.
Maga a programcsomag rendelkezik egy segédeszközzel, mely csupán arra hivatott, hogy megállípítsa a videofájl felépítését. A Container típusát, a benne található streameket kiírja a standard kimenetre. Már az analízis során is több paraméter változtatható, pl. az analízis hossza, a titkosítás kulcsa(ha van). A parancs -h kapcsolóval az összes beállítható paraméterét kilistázza.
+
Egyszerű AVI fájl tulajdonságainak kilistázása:
+
=== FFprobe ===
  +
  +
Maga a programcsomag rendelkezik egy segédeszközzel, mely csupán arra hivatott, hogy megállapítsa a videofájl felépítését. A container típusát, a benne található streameket kiírja a standard kimenetre. Már az analízis során is több paraméter változtatható, pl. az analízis hossza, a titkosítás kulcsa(ha van). A parancs -h kapcsolóval az összes beállítható paraméterét kilistázza.
  +
Egyszerű AVI fájl tulajdonságainak listázása:
   
 
<pre>C:\ffmpeg-20121120-git-8b6aeb1-win32-static\bin>ffprobe.exe k:\mwt-hugo.avi
 
<pre>C:\ffmpeg-20121120-git-8b6aeb1-win32-static\bin>ffprobe.exe k:\mwt-hugo.avi
63. sor: 63. sor:
 
</pre>
 
</pre>
   
Látható, hogy a #0-s Container AVI-ként van multiplexálva és benne két stream található: egy mpeg4(XVID) videó és egy ac3 5.1-es hang. A parancs elején a fordítási kapcsolók is megjelenítésre kerülnek. Ez haszontalan információnak látszik, azonban ha a program nem ismer fel bizonyos formátumokat, érdemes ellenőrizni, hogy a dekódoláshoz szükséges modulokkal lett e lefordítva a program. Olyan fájloknál, amik metainformációként a fejezeteket is jelölik, ezek az adatok is kiolvashatóak a programból:
+
Látható, hogy a #0-s container AVI-ként van multiplexálva és benne két stream található: egy MPEG4(XVID) videó és egy AC3 5.1-es hang. A parancs elején a fordítási kapcsolók is megjelenítésre kerülnek. Ez haszontalan információnak látszik, azonban ha a program nem ismer fel bizonyos formátumokat, érdemes ellenőrizni, hogy a dekódoláshoz szükséges modulokkal lett-e lefordítva a program. Olyan fájloknál, amik metainformációként a fejezeteket is jelölik, ezek az adatok is kiolvashatóak a programból:
 
<pre>
 
<pre>
 
Input #0, matroska,webm, from 'k:\rep-sup.mkv':
 
Input #0, matroska,webm, from 'k:\rep-sup.mkv':
95. sor: 95. sor:
 
fault)
 
fault)
 
</pre>
 
</pre>
Érdekesség, hogy a program ezeket az információkat standard error kimenetre írja,így nem irányíthatóak szövegfájlba a tulajdonságok. (Ellenben a súgó igen).
+
Érdekesség, hogy a program ezeket az információkat standard error kimenetre írja.
   
== Mi is az az FFMPEG? ==
+
=== FFplay ===
Az FFMPEG program végzi a videófájlok átkódolását. Elős lépésben ugynúgy kiolvassa a beadott bemeneti fájl/fájlok paramétereit, mint az ffprobe. Ezután azonban dekódolja a videót és a paraméterként megadott formátumban újra összerakja. Képes több bemenetet is összerakni, valamint videófolyamból képsorozatot előállítani. A kódolás közben nem a teljesítés százalékát mutatja, hanem információkat a kódolásról. Pl. a végső bitrátát(mekkora helyet foglal el az 1 mp anyag) és az időbélyeget.
+
  +
A programcsomag egy videólejátszó programot is tartalmaz, ez az FFplay. A program a külső [http://www.libsdl.org/ SDL] könyvtár segítségével kezeli a képet és a hangot. A lejátszó felhasználói felülete parancssoros és rejtett. A lehetséges parancsok műsor közben nem lekérdezhetőek és egérkattintásra is csak beletekerni tudunk a lejátszott videóba (feltéve, hogy nem hálózati műsorfolyam).
  +
Billentyűparancsok:
  +
* q,ESC : kilépés
  +
* f : teljes képernyős mód/normál mód
  +
* p, SPACE : pillanatállj
  +
* a : audiofolyam váltás
  +
* v : videofolyam váltás
  +
* t : feliratfolyam váltás
  +
* w : hanghullámok mutatása
  +
* s : képkockánkénti léptetés aktiválása
  +
* Bal nyíl/jobb nyíl: 10 mp ugrás hátra,előre
  +
* Fel nyíl/le nyíl: 1 perc ugrás előre, hátra
  +
* PG UP/PG DN : 10 perc ugrás előre, hátra
  +
Indítása egyszerű, paraméterként szükséges átadni a megnyitandó fájlt.
  +
<pre>
  +
D:\ffmpeg\bin>ffplay video.mp4
  +
</pre>
  +
További beállítások is adhatóak, ezeket a -h kapcsolóval hívhatjuk elő.
  +
  +
=== FFmpeg ===
  +
  +
Az FFMPEG program végzi a videófájlok átkódolását. Első lépésben ugyanúgy kiolvassa a beadott bemeneti fájl/fájlok paramétereit, mint az FFprobe. Ezután azonban dekódolja a videót és a paraméterként megadott formátumban újra összerakja. Képes több bemenetet is összerakni, valamint videófolyamból képsorozatot előállítani. A kódolás közben nem a teljesítés százalékát mutatja, hanem információkat a kódolásról. Pl. a végső bitrátát(mekkora helyet foglal el az 1 mp anyag) és az időbélyeget.
 
Egy tetszőleges film átkódolása sok jpg fájlba az alábbi paranccsal lehetséges:
 
Egy tetszőleges film átkódolása sok jpg fájlba az alábbi paranccsal lehetséges:
 
<pre>D:\ffmpeg\bin>ffmpeg -i video.mpg image%d.jpg</pre>
 
<pre>D:\ffmpeg\bin>ffmpeg -i video.mpg image%d.jpg</pre>
107. sor: 107. sor:
 
-r 25 -acodec libvorbis -ac 2 -b:a 128k -f ogg out.ogv</pre>
 
-r 25 -acodec libvorbis -ac 2 -b:a 128k -f ogg out.ogv</pre>
   
A fenti paranccsal kiválasztottuk, hogy theora codec-kel tömörítse újra a videófolyamot, adatsebessége 1000kbps legyen, méretezze át a videót 640x480 méretűre és 25 kép adjon egy másodpercet. A hang tömörítésére a vorbis könyvtárat használja, a hang 2 csatornát tartalmaz, egy másodperc hang mérete átlagosan 128kbit, a container formátum ogg és a kimenetet out.ogv néven menti.
+
A fenti paranccsal kiválasztottuk, hogy Theora kodekkel tömörítse újra a videófolyamot, adatsebessége 1000kbps legyen, méretezze át a videót 640x480 méretűre és 25 kép adjon egy másodpercet. A hang tömörítésére a Vorbis könyvtárat használja, a hang 2 csatornát tartalmaz, egy másodperc hang mérete átlagosan 128kbit, a container formátum OGG és a kimenetet out.ogv néven menti.
Hibás vagy hiányzó adatok megadásakor a program egy beazonosíthatatlan hibaüzenettel lép ki, de az ezt megelőző sorok mi dig utalnak a hibás paraméterre. Egyes kodekek pl. h264 saját egyéb paramétereket igényelhetnek. A használható codeceket az ffmpeg -codecs, a containereket az ffmpeg -format parancs listázza ki. A fent megadot paraméterek a legtöbb kodek esetén elegendőek. A programmal különböző hangú anyagok is multiplexálhatóak, pl. több nyelvű filmek esetén. Ilyenkor a különböző streameket a map parancs segítségével kell átcsoportosítani.
+
  +
Hibás vagy hiányzó adatok megadásakor a program egy beazonosíthatatlan hibaüzenettel lép ki, de az ezt megelőző sorok mindig utalnak a hibás paraméterre. Egyes kodekek pl. h264 saját egyéb paramétereket igényelhetnek.
  +
  +
A használható kodekeket az ffmpeg -codecs, a containereket az ffmpeg -format parancs listázza ki. A fent megadott paraméterek a legtöbb kodek esetén elegendőek. A programmal különböző hangú anyagok is multiplexálhatóak, pl. több nyelvű filmek esetén. Ilyenkor a különböző streameket a map parancs segítségével kell átcsoportosítani.
   
 
<pre>d:\ffmpeg\bin>ffmpeg -i video.mpg -i audio_hun.aac -i audio_eng.aac \
 
<pre>d:\ffmpeg\bin>ffmpeg -i video.mpg -i audio_hun.aac -i audio_eng.aac \
114. sor: 114. sor:
 
-vcodec copy -acodec copy -acodec copy -f mpegts newmovie.mpg</pre>
 
-vcodec copy -acodec copy -acodec copy -f mpegts newmovie.mpg</pre>
   
A fenti parancs a hang nélküli video.mpg fájlból és az angol és magyar hangokból készít egy olyan mpeg fájlt, ahol már választhatóak a hangok. Átkódolást nem végez, csupán átmásolja a streameket. Érdemes megfigyelni, hogy a bemenetek sorrendje adja a többi paraméter sorrendjét is.
+
A fenti parancs a hang nélküli video.mpg fájlból és az angol és magyar hangokból készít egy olyan MPEG fájlt, ahol már választhatóak a hangok. Átkódolást nem végez, csupán átmásolja a streameket. Érdemes megfigyelni, hogy a bemenetek sorrendje adja a többi paraméter sorrendjét is.
Az fffmpeg képes rögtön hálózati műsorszórásra is.
+
Az FFmpeg képes rögtön hálózati műsorszórásra is.
   
 
<pre>d:\ffmpeg\bin>ffmpeg -re -i out.ogv -c copy -f ogg rtmp://localhost/musor</pre>
 
<pre>d:\ffmpeg\bin>ffmpeg -re -i out.ogv -c copy -f ogg rtmp://localhost/musor</pre>
   
A fenti parancs hatására rtmp protokollon keresztül kezdi el élő adatfolyamként sugározni a bemenetként megadott műsort. Ellenőrzéskor a kiválasztott protokollhoz tartozó port számot meg kell nyitni a tűzfalon.
+
A fenti parancs hatására RTMP protokollon keresztül kezdi el élő adatfolyamként sugározni a bemenetként megadott műsort. AZ RTMP protokoll egy elterjedt szabvány streamek továbbítására. TCP alapú, akár HTTP csomagba is csomagolható[http://en.wikipedia.org/wiki/Real_Time_Messaging_Protocol]. Ellenőrzéskor a kiválasztott protokollhoz tartozó port számot meg kell nyitni a tűzfalon.
Azért, hogy az internetes műsorszórás hatékonyabban működhessen, egy külső segédeszköz is létrejött FFSERVER néven.
+
  +
Azért, hogy az internetes műsorszórás hatékonyabban működhessen, egy külső segédeszköz is létrejött FFserver néven.
  +
  +
=== FFserver ===
  +
  +
Az FFserver egy speciális program a videók tömeges szórására. Az FFserver feladata, hogy az átkódolást és a műsorfolyam továbbítását szétválassza, a program a műsorszórásért felelős és az FFmpeg programmal szorosan összedolgozik. Többsoros ffmpeg utasítás helyett még több sorból álló, viszont könnyebben kezelhető és átláthatóbb konfigurációs fájlt kell készíteni. A konfigurációs fájl és az FFserver a kiszolgálón található, amely a műsorszórást végzi. Ezután két lehetőségünk van:
  +
  +
* A műsorforrásra csatlakozunk egy, a szerveren futtatott FFmpeggel és ez végzi az átkódolást a kívánt formátumokba.(pull)
  +
* A műsorforráson futtatunk egy FFmpeget, amely elvégzi az átkódolást és az FFserver ennek csupán elosztását végzi. (push)
  +
  +
Az első esetben nincs szükségünk a forrásgépen FFmpegre, a szerver konfigurációs fájljában nem kell engedélyezni a hozzáférést a forrás IP címéről és az átkódolást is a szerver végzi, ami több kimenet és erős szerver esetén hasznos lehet.
  +
  +
A második esetben nincs szükség dupla átkódolásra, és műsorszórásra (műsorforrás gépen is és a szerveren is), viszont a forrást engedélyezni kell. Ebben az esetben a forrás gépen kell, hogy fusson az FFmpeg, így nem végezhető el bármilyen programmal a stream előállítására.
   
== Hogyan használható az FFSERVER? ==
+
Az FFserver azért ragaszkodik az FFmpeghez, mivel a konfigurációs fájlja tulajdonképpen az elkészítendő adatfolyamokat határozza meg és ezt saját protokollon keresztül küldi át az átkódolást végző FFmpegnek. A program különlegessége, hogy egy bemenethez, amit feednek neveznek, több kimenet is tartozhat, ezeket streamnek hívják. A konfigurációs fájl viszonylag részletes leírást ad a lehetőségekről.
Az FFSERVER egy speciális program a videók tömeges szórására. Az FFSERVER feladata, hogy az átkódolást és a műsorfolyam továbbítását szétválassza, a program a műsorszórásért felelős és az FFMPEG programmal szorosan összedolgozik. Több soros ffmpeg utasítás helyett még több soros, viszont könnyebben kezelhető és átláthatóbb konfigurációs fájlt kell készíteni. A konfigurációs fájl és az FFSERVER a kiszolgálón található, amely a műsorszórást végzi. Ezután két lehetőségünk van:
 
* A műsorforrásra csatlakozunk egy, a szerveren futtatott FFMPEG-gel és ez végzi az átkódolást a kívánt formátumokba.(pull)
 
* A műsorforráson futtatunk egy FFMPEG-et, amely elvégzi az átkódolást és az FFSERVER ennek csupán elosztását végzi. (push)
 
Az első esetben nincs szükségünk a forrásgépen FFMPEG-re, a szerver konfigurációs fájljában nem kell engedélyezni a hozzáférést a forrás IP címéről és az átkódolást is a szerver végzi, ami több kimenet és erős szerver esetén hasznos lehet.
 
A második esetben nincs szükség dupla átkódolásra, és műsorszórásra (műsorforrás gépen is és a szerveren is), viszont a forrást engedélyezni kell. Ebben az esetben a forrás gépen kell, hogy fusson az FFMPEG, így nem végezhető el bármilyen programmal a stream előállítására.
 
Az FFSERVER azért ragaszkodik az FFMPEG-hez, mivel a konfigurációs fájlja tulajdonképpen az elkészítendő adatfolyamokat határozza meg és ezt saját protokollon keresztül küldi át az átkódolást végző FFMPEG-nek. A program különlegessége, hogy egy bemenethez, amit FEED-nek neveznek, több kimenet is tartozhat, ezeket STREAM-nek hívják. A konfigurációs fájl viszonylag részletes leírást ad a lehetőségekről.
 
 
Egy működő konfiguráció így néz ki:
 
Egy működő konfiguráció így néz ki:
 
<pre>
 
<pre>
147. sor: 147. sor:
   
 
# Ha pull módszerrel dolgozunk a következő paraméter hatására
 
# Ha pull módszerrel dolgozunk a következő paraméter hatására
# ffserver indításakor elindul egy ffmpeg is az alábbi bemeneti paraméterekkel
+
# FFserver indításakor elindul egy ffmpeg is az alábbi bemeneti paraméterekkel
 
# (kimenetet nem szabad megadni)
 
# (kimenetet nem szabad megadni)
 
#Launch ffmpeg -i http://1.6.2.8:8080/live
 
#Launch ffmpeg -i http://1.6.2.8:8080/live
196. sor: 196. sor:
 
</Redirect>
 
</Redirect>
 
</pre>
 
</pre>
A több stream szekció használatával több kimeneti formátum is előállítható. A példa esetén egy HTML5-ben, böngészőbe ágyazható videófolyam jön létre, melyet a mai modern eszközök többsége támogat. A stat.html egy egyszerű HTML oldal, mely fehér alapon fekete betűkkel kiírja a kapcsolódó klienseket és az elhasznált sávszélességet. Mivel a program C-ben van megírva, nagyon gyorsan reagál, felépítéséből adódóan kevés memóriát fogyaszt.
+
A több stream szekció használatával több kimeneti formátum is előállítható. A példa esetén egy HTML5-ben, böngészőbe ágyazható videófolyam jön létre, melyet a mai modern eszközök többsége támogat. A stat.html egy egyszerű HTML oldal, mely fehér alapon fekete betűkkel kiírja a kapcsolódó klienseket és az elhasznált sávszélességet.
Hátránya, hogy a biztonsági korlátozások gyengék, csupán IP címre lehet szűrni, és maga a feed titkosítatlan. Az adaható paraméterek kodekfüggőek és a dokumentáció nehezen elérhető.
 
Indítható Daemon módban is futtatható, ekkor háttérfolyamatként indul el. Célszerű indítószkriptet írni az automatikus indításához.
 
   
== Hogyan használható az FFPLAY? ==
+
Mivel a program C-ben van megírva, nagyon gyorsan reagál, felépítéséből adódóan kevés memóriát fogyaszt.
   
A programcsomag egy videó lejátszó programot is tartalmaz, ez az FFPLAY. A program a külső SDL könyvtár segítségével kezeli a képet és a hangot. A lejátszó felhasználói felülete parancssoros és rejtett. A lehetséges parancsok műsor közben nem lekérzdezhetőek és egérkattintásra is csak beletekerni tudunk a lejátszott videóba (feltéve, hogy nem hálózati műsorfolyam).
+
Hátránya, hogy a biztonsági korlátozások gyengék, csupán IP címre lehet szűrni, és maga a feed titkosítatlan. Az adható paraméterek kodekfüggőek és a dokumentáció nehezen elérhető.
Billentyűparancsok:
+
Indítható daemon-módban is, ekkor háttérfolyamatként indul el. Célszerű indítószkriptet írni az automatikus indításához.
* q,ESC : kilépés
+
* f : teljes képernyős mód/normál mód
+
== Az FFmpeg könyvtárra épülő programok ==
* p, SPACE : pillanatállj
+
* a : audio folyam váltás
+
Számtalan program és szolgáltatás használja az FFmpeget,az alábbiak a legelterjedtebbek.
* v : video folyam váltás
+
* t : felirat folyam váltás
+
* A főként Linuxra fejlesztett [http://www.mplayerhq.hu/design7/news.html MPlayer] lejátszó fejlesztői részt vesznek az FFmpeg fejlesztésében is. A lejátszó így az teljes egészében az FFmpegre épül, sőt forrásként is sokan az MPlayerhez csatolt programkönyvtárt fordítják le, ha FFmpegre van szükségük. Windowsra az MPlayer-nek több változata is van, köztük az egyik legelterjedtebb [http://www.kmplayer.com/ KMPlayer] is, melyek mind az FFmpegre építenek.[http://www1.mplayerhq.hu/DOCS/codecs-status.html]
* w : hanghullámok mutatása
+
* Az MPlayernek létezik egy átkódoló változata, az [http://en.wikipedia.org/wiki/MEncoder MEncoder], ami szintén FFmpeg alapú.
* s : képkockánkénti léptetés aktiválása
+
* Bal nyíl/jobb nyíl: 10 mp ugrás hátra,előre
+
* A [http://www.videolan.org/ VLC media player] is használja az FFmpeg kodek könyvtárát[http://wiki.videolan.org/Contrib_Status#Codecs].
* Fel nyíl/le nyíl: 1 perc ugrás előre, hátra
+
* PG UP/PG DN : 10 perc ugrás előre, hátra
+
* A [http://player.gomlab.com/eng/download/ GOM player] oldalán is sokáig lehetett találni linket az FFmpeg forrásához, azonban ez már nem elérhető.
Indítása egyszerű, paraméterknént szükséges átadni a megnyitandó fájlt.
+
<pre>
+
* A Youtube-ot[http://multimedia.cx/eggs/googles-youtube-uses-ffmpeg/] és a Facebook-ot[http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2009-June/070998.html] is érte gyanúsítás, hogy átkódolás során az FFmpeget futtatja. Ez azért is lehetséges, mert az FFmpeghez létezik API php alapú szkriptekhez is ffmpeg-php néven, mely a Vimeo.com oldalon is megtalálható.[http://ffmpeg-php.sourceforge.net/]
D:\ffmpeg\bin>ffplay video.mp4
+
</pre>
+
* A [http://handbrake.fr/ HandBrake] ingyenes MPEG4 kódoló is az FFmpeg könyvtárat használja.[http://handbrake.fr/details.php]
További beállítások is adhatóak, ezeket a -h kapcsolóval hívhatjuk elő.
+
+
== Az FFmpeg programcsomag beszerzése ==
  +
  +
A program forrása letölthető [http://www.ffmpeg.org/download.html a projekt hivatalos weboldaláról]. Az oldal hivatkozik külső, megbízható forrásokra, ahonnan különböző platformokra lefordított binárisokat találunk. Windows rendszerekre naprakész fordítások is [http://ffmpeg.zeranoe.com/builds/ elérhetőek]. A legtöbb Linux disztribúció csomaglistájában is megtalálható a program. Az FFmpeg fejlesztése folyamatos, ezért csomaglistákban lassan látszanak a változások. Ha a legfrissebb verziót kívánja használni a felhasználó, akkor saját magának célszerű lefordítani a programot forrásból. Általában ezek a verziók több hibajavítást és kísérleti kodeket tartalmaznak.
  +
  +
A fordításhoz Windows környezetben MinGW-re van szükségünk pontos leírás a honlapon található[http://ffmpeg.org/trac/ffmpeg/wiki/CompilationGuide]. A fordítási paraméterek között adható meg, hogy a különböző programkönyvtárakat belefordítsa az exe-be vagy külön dll-ként tárolja. A másik fontos beállítás a licencek meghatározása.
  +
A program alapvetően platformfüggetlen, a legtöbb operációs rendszerre található lefordítható változata.
  +
  +
== Licenc ==
  +
  +
Az FFmpeg egy nyílt forráskódú programcsomag, melyre alapesetben a [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU LGPLv2.1] vonatkozik.
  +
Elképzelhető, hogy egyes rendszereken az optimalizáció vagy bizonyos kodekek miatt szigorúbb licencek vonatkoznak rá, ekkor a [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU GPLv2] alá tartozik a lefordított program. Fordításkor a –enable-gpl és –enable-nonfree kapcsolók segítségével érhetjük el, hogy a GNU LGPLv2.1 vonatkozzon ránk.
  +
  +
Az FFmpeg ingyenesen hozzáférhető, nem kereskedelmi célú program.
   
== Hol található további információ? ==
+
== Ajánlott irodalom ==
   
 
* [http://www.ffmpeg.org FFMPEG honlap]
 
* [http://www.ffmpeg.org FFMPEG honlap]
  +
* [http://ffmpeg.mplayerhq.hu/faq.html FFMPEG FAQ]
 
* [http://sonnati.wordpress.com/2011/07/11/ffmpeg-the-swiss-army-knife-of-internet-streaming-part-i/ Stream howto]
 
* [http://sonnati.wordpress.com/2011/07/11/ffmpeg-the-swiss-army-knife-of-internet-streaming-part-i/ Stream howto]
 
* [http://howto-pages.org/ffmpeg/ FFMPEG átkódolás howto]
 
* [http://howto-pages.org/ffmpeg/ FFMPEG átkódolás howto]
   
(Velinszky László)
+
--[[Szerkesztő:Lancelot|Velinszky László]]; utolsó jelentős módosítás: 2012.12.08

A lap jelenlegi, 2012. december 11., 10:46-kori változata

Az FFmpeg programokból és programkönyvtárakból tevődik össze. Ezek azt a feladatot hivatottak ellátni, hogy multimédiás tartalmat dolgozzanak fel. Így ugyanúgy felhasználhatóak hang, videó, átkódolására, mint közzétételére (broadcasting) és megtekintésére is.

A fejlesztést Fabrice Bellard kezdte, aki az FFmpegen kívül a QEMU projekt alapítója is. 2004-től a projekt karbantartását Michael Niedermayer végzi. A fejlesztők többnyire az MPlayer lejátszó fejlesztésében is részt vesznek. A programot GNU/Linux alatt írják, de számos operációs rendszerre létezik változata. Fordították x86-64, ARM, PowerPC architekrúrájú számítógépekre is.[1]

Alapvetően videó és audió kódolására használják. Képes a feliratok kezelésére is. Szinte minden hang- és mozgóképformátumot kezel és ismeri a hálózati protokollokat is. A fejlesztők igen gyakran integrálják lejátszóikba az FFmpeg programkönyvtárat.

Tartalomjegyzék

[szerkesztés] 1 Az FFmpeg működése

Az FFmpeg a mai elterjedt legtöbb videó- és hangkódolási szabványt ismeri. Első lépésben azonosítja a fájl kiterjesztése szerint vagy a fejléc szerint a container-t. A container a legkülső burok, ami tartalmazhatja a multiplexált audio, video adatfolyamokat vagy a feliratokat. MPEG2 szabvány esetén ezt transport streamnek(TS) is hívhatják, ami több különböző ún. program streamet (PS) tartalmaz. DVB-T esetén - ami a földi digitális műsorszolgáltatás alapja - egy analóg csatorna helyén egy digitális MPEG2 TS talállható, ami tartalmazza az MPEG2 PS-eket. Más containerek is léteznek: ilyen pl. az AVI, Matroska(mkv), OGG. A container megállapítása után megkeresi a különböző adatfolyamokat vagy stream-eket. Az adatfolyamok tartalmazzák az adott szabvány szerint kódolt hangot, képet vagy feliratot. A tömörítési szabványokat kodeknek is nevezik. Ezeket fogja sorrendhelyesen dekódolni lejátszásnál, átkódolásnál a program. A DVB-T-s példa esetén ez a video kodek a H.264, míg audio esetén az AAC kodek. A különböző nyelvek, külön streamként vannak elküldve.

Minden kodeknek megvan a maga előnye és kora. A régebbi kodekeket, pl. MPEG2 video és MP3 a régebbi eszközök is támogatják, általában könnyebben dekódolható. Az újabb kodekek alacsonyabb sávszélesség mellett, szebb képet és hangot biztosítanak, de a kódolás és dekódolás komplexitása nagyobb. Pl. a WAV és a FLAC tömörítések képesek veszteségmentesen tömöríteni a hangot, míg a Canopus DV avi kb. JPEG fájlonként tömöríti a videót. MPEG2 esetén már csak a képkockák közötti különbségeket és jóslási hibákat viszi át a rendszer. MPEG4 esetén elég csak képrészleteket továbbítani.

Ha a kezdő teljes képkockát átküldtük a dekódolónak, akkor elég csak az eltérést átvinni a következő képkocka megjelenítéséhez. A teljes képkocka, melyet I-vel szokás jelölni lehet tömörített kép is. A különbségi kép jele általában B. Ha rendelkezésre áll egy I kép és egy B kép, akkor a közte lévő képkockák kitalálhatóak pl. lineáris interpoláció segítségével, ez maga a jóslat. Ilyen esetben elég a jóslat és a valós kép közötti hibát átvinni a rendszeren, ezt végzik a P képek segítségével. Az I kép és I kép közötti szakaszt Group of Pictures-nek (GOP) hívják.

Az legtöbb tömörítés veszteséges és azt használja ki, hogy az emberi érzékelés nem tökéletes, így az amúgy sem érzékelhető jeleket kiszűrik. A veszteségesség határát, a tömörítés mértékét a rendelkezésre álló sávszélesség és a számítási kapacitás határozza meg. Ugyanabból a kodekből is léteznek különböző profilok, melyek különböző komplexitást jelentenek, pl. H264 baseline iPadre vagy H264 High Quality pc-re.

Az FFmpeg avcodec könyvtára ismeri a leggyakoribb kodekeket és hasonló egyéb esetén megpróbálja kitalálni. Ezt úgy végzi, hogy egy hasonló felépítésű kodekkel játssza le az ismeretlen videofolyamot. Ez pl. digitális kamerák saját formátumainál hasznos, mikor szabványos kodekeket használnak, csak átírnak pár metaadatot a fejlécben.

[szerkesztés] 2 Összetevők

Maga az FFmpeg programcsomag az alábbi összetevőkből áll:

  • FFmpeg program, mely képes a különböző fájlok dekódolására. A dekódolt videót/videókat képes újrakódolni és akár több kimenetre egyszerre átkódolni. Ez a kimenet lehet hálózati folyam is és egyszerű avi fájl egyaránt.
  • Az FFserver egy kis erőforrás igényű streaming server, mely az FFmpeg programmal működik csak együtt. Az FFmpeg által átkódolt műsort képes szétszórni a kliensek között.
  • Az FFplay egy egyszerű videólejátszó, mely az FFmpeg által kezelt formátumok megjelenítésére szolgál. Megjelenítéshez a platformfüggetlen SDL könyvtárat használja.
  • Az FFprobe egy segédprogram a multimédiás fájlok felépítésének meghatározására. Segítségével megvizsgálható a tömörítés típusa és néhány tulajdonsága.

Az alábbiakban részletesebben is bemutatom ezeket.

[szerkesztés] 2.1 FFprobe

Maga a programcsomag rendelkezik egy segédeszközzel, mely csupán arra hivatott, hogy megállapítsa a videofájl felépítését. A container típusát, a benne található streameket kiírja a standard kimenetre. Már az analízis során is több paraméter változtatható, pl. az analízis hossza, a titkosítás kulcsa(ha van). A parancs -h kapcsolóval az összes beállítható paraméterét kilistázza. Egyszerű AVI fájl tulajdonságainak listázása:

C:\ffmpeg-20121120-git-8b6aeb1-win32-static\bin>ffprobe.exe k:\mwt-hugo.avi
ffprobe version N-46936-g8b6aeb1 Copyright (c) 2007-2012 the FFmpeg developers
 built on Nov 20 2012 19:34:37 with gcc 4.7.2 (GCC)
 configuration: --enable-gpl --enable-version3 --disable-pthreads --enable-runt
ime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libass -
-enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enab
le-libgsm --enable-libmp3lame --enable-libnut --enable-libopenjpeg --enable-libo
pus --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheo
ra --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-li
bvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --ena
ble-zlib
 libavutil      52.  8.100 / 52.  8.100
 libavcodec     54. 74.100 / 54. 74.100
 libavformat    54. 37.100 / 54. 37.100
 libavdevice    54.  3.100 / 54.  3.100
 libavfilter     3. 23.101 /  3. 23.101
 libswscale      2.  1.102 /  2.  1.102
 libswresample   0. 17.101 /  0. 17.101
 libpostproc    52.  2.100 / 52.  2.100
Input #0, avi, from 'k:\mwt-hugo.avi':
 Metadata:
    encoder         : VirtualDubMod 1.5.10.3 | www.virtualdub-fr.org || (build 2
550/release)
 Duration: 02:06:20.99, start: 0.000000, bitrate: 1982 kb/s
    Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID / 0x44495658), yuv
420p, 720x400 [SAR 1:1 DAR 9:5], 23.98 tbr, 23.98 tbn, 23.98 tbc
    Stream #0:1: Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, 5.1(side), s16, 448
kb/s

Látható, hogy a #0-s container AVI-ként van multiplexálva és benne két stream található: egy MPEG4(XVID) videó és egy AC3 5.1-es hang. A parancs elején a fordítási kapcsolók is megjelenítésre kerülnek. Ez haszontalan információnak látszik, azonban ha a program nem ismer fel bizonyos formátumokat, érdemes ellenőrizni, hogy a dekódoláshoz szükséges modulokkal lett-e lefordítva a program. Olyan fájloknál, amik metainformációként a fejezeteket is jelölik, ezek az adatok is kiolvashatóak a programból:

Input #0, matroska,webm, from 'k:\rep-sup.mkv':
 Metadata:
    creation_time   : 2012-11-09 01:30:59
 Duration: 01:38:38.97, start: 0.000000, bitrate: 6348 kb/s
    Chapter #0.0: start 0.000000, end 336.836000
    Metadata:
     title           : 00:00:00.000
    Chapter #0.1: start 336.836000, end 445.236000
    Metadata:
     title           : 00:05:36.836
    Chapter #0.2: start 445.236000, end 706.915000
    Metadata:
     title           : 00:07:25.236
    Chapter #0.3: start 706.915000, end 840.465000
    Metadata:
     title           : 00:11:46.915
    ...
    Metadata:
     title           : 01:17:22.847
    Chapter #0.22: start 5161.865000, end 5492.195000
    Metadata:
     title           : 01:26:01.865
    Chapter #0.23: start 5492.195000, end 5918.966000
    Metadata:
     title           : 01:31:32.195
    Stream #0:0(eng): Video: h264 (High), yuv420p, 1280x528, SAR 1:1 DAR 80:33,
23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
    Stream #0:1(eng): Audio: dts (DTS), 48000 Hz, 5.1(side), fltp, 1536 kb/s (de
fault)

Érdekesség, hogy a program ezeket az információkat standard error kimenetre írja.

[szerkesztés] 2.2 FFplay

A programcsomag egy videólejátszó programot is tartalmaz, ez az FFplay. A program a külső SDL könyvtár segítségével kezeli a képet és a hangot. A lejátszó felhasználói felülete parancssoros és rejtett. A lehetséges parancsok műsor közben nem lekérdezhetőek és egérkattintásra is csak beletekerni tudunk a lejátszott videóba (feltéve, hogy nem hálózati műsorfolyam). Billentyűparancsok:

  • q,ESC : kilépés
  • f : teljes képernyős mód/normál mód
  • p, SPACE : pillanatállj
  • a : audiofolyam váltás
  • v : videofolyam váltás
  • t : feliratfolyam váltás
  • w : hanghullámok mutatása
  • s : képkockánkénti léptetés aktiválása
  • Bal nyíl/jobb nyíl: 10 mp ugrás hátra,előre
  • Fel nyíl/le nyíl: 1 perc ugrás előre, hátra
  • PG UP/PG DN : 10 perc ugrás előre, hátra

Indítása egyszerű, paraméterként szükséges átadni a megnyitandó fájlt.

D:\ffmpeg\bin>ffplay video.mp4

További beállítások is adhatóak, ezeket a -h kapcsolóval hívhatjuk elő.

[szerkesztés] 2.3 FFmpeg

Az FFMPEG program végzi a videófájlok átkódolását. Első lépésben ugyanúgy kiolvassa a beadott bemeneti fájl/fájlok paramétereit, mint az FFprobe. Ezután azonban dekódolja a videót és a paraméterként megadott formátumban újra összerakja. Képes több bemenetet is összerakni, valamint videófolyamból képsorozatot előállítani. A kódolás közben nem a teljesítés százalékát mutatja, hanem információkat a kódolásról. Pl. a végső bitrátát(mekkora helyet foglal el az 1 mp anyag) és az időbélyeget. Egy tetszőleges film átkódolása sok jpg fájlba az alábbi paranccsal lehetséges:

D:\ffmpeg\bin>ffmpeg -i video.mpg image%d.jpg

A -i kapcsolóval adható meg a bemeneti fájl, míg a parancsot a kimeneti állomány zárja le. Bonyolultabb átkódolásoknál meg kell adni az átkódolás paramétereit. Pl. átkódolás OGG-be az alábbi módon tehető meg.

D:\ffmpeg\bin>ffmpeg -i d:\ffmpeg\test.m4v -vcodec theora -b:v 1000k -s 640x480
-r 25 -acodec libvorbis -ac 2 -b:a 128k -f ogg out.ogv

A fenti paranccsal kiválasztottuk, hogy Theora kodekkel tömörítse újra a videófolyamot, adatsebessége 1000kbps legyen, méretezze át a videót 640x480 méretűre és 25 kép adjon egy másodpercet. A hang tömörítésére a Vorbis könyvtárat használja, a hang 2 csatornát tartalmaz, egy másodperc hang mérete átlagosan 128kbit, a container formátum OGG és a kimenetet out.ogv néven menti.

Hibás vagy hiányzó adatok megadásakor a program egy beazonosíthatatlan hibaüzenettel lép ki, de az ezt megelőző sorok mindig utalnak a hibás paraméterre. Egyes kodekek pl. h264 saját egyéb paramétereket igényelhetnek.

A használható kodekeket az ffmpeg -codecs, a containereket az ffmpeg -format parancs listázza ki. A fent megadott paraméterek a legtöbb kodek esetén elegendőek. A programmal különböző hangú anyagok is multiplexálhatóak, pl. több nyelvű filmek esetén. Ilyenkor a különböző streameket a map parancs segítségével kell átcsoportosítani.

d:\ffmpeg\bin>ffmpeg -i video.mpg -i audio_hun.aac -i audio_eng.aac \
-map 0:0 -map 0:1 -map 0:2 \
-vcodec copy -acodec copy -acodec copy -f mpegts newmovie.mpg

A fenti parancs a hang nélküli video.mpg fájlból és az angol és magyar hangokból készít egy olyan MPEG fájlt, ahol már választhatóak a hangok. Átkódolást nem végez, csupán átmásolja a streameket. Érdemes megfigyelni, hogy a bemenetek sorrendje adja a többi paraméter sorrendjét is. Az FFmpeg képes rögtön hálózati műsorszórásra is.

d:\ffmpeg\bin>ffmpeg -re -i out.ogv -c copy -f ogg rtmp://localhost/musor

A fenti parancs hatására RTMP protokollon keresztül kezdi el élő adatfolyamként sugározni a bemenetként megadott műsort. AZ RTMP protokoll egy elterjedt szabvány streamek továbbítására. TCP alapú, akár HTTP csomagba is csomagolható[2]. Ellenőrzéskor a kiválasztott protokollhoz tartozó port számot meg kell nyitni a tűzfalon.

Azért, hogy az internetes műsorszórás hatékonyabban működhessen, egy külső segédeszköz is létrejött FFserver néven.

[szerkesztés] 2.4 FFserver

Az FFserver egy speciális program a videók tömeges szórására. Az FFserver feladata, hogy az átkódolást és a műsorfolyam továbbítását szétválassza, a program a műsorszórásért felelős és az FFmpeg programmal szorosan összedolgozik. Többsoros ffmpeg utasítás helyett még több sorból álló, viszont könnyebben kezelhető és átláthatóbb konfigurációs fájlt kell készíteni. A konfigurációs fájl és az FFserver a kiszolgálón található, amely a műsorszórást végzi. Ezután két lehetőségünk van:

  • A műsorforrásra csatlakozunk egy, a szerveren futtatott FFmpeggel és ez végzi az átkódolást a kívánt formátumokba.(pull)
  • A műsorforráson futtatunk egy FFmpeget, amely elvégzi az átkódolást és az FFserver ennek csupán elosztását végzi. (push)

Az első esetben nincs szükségünk a forrásgépen FFmpegre, a szerver konfigurációs fájljában nem kell engedélyezni a hozzáférést a forrás IP címéről és az átkódolást is a szerver végzi, ami több kimenet és erős szerver esetén hasznos lehet.

A második esetben nincs szükség dupla átkódolásra, és műsorszórásra (műsorforrás gépen is és a szerveren is), viszont a forrást engedélyezni kell. Ebben az esetben a forrás gépen kell, hogy fusson az FFmpeg, így nem végezhető el bármilyen programmal a stream előállítására.

Az FFserver azért ragaszkodik az FFmpeghez, mivel a konfigurációs fájlja tulajdonképpen az elkészítendő adatfolyamokat határozza meg és ezt saját protokollon keresztül küldi át az átkódolást végző FFmpegnek. A program különlegessége, hogy egy bemenethez, amit feednek neveznek, több kimenet is tartozhat, ezeket streamnek hívják. A konfigurációs fájl viszonylag részletes leírást ad a lehetőségekről. Egy működő konfiguráció így néz ki:

# A port, ahol a szolgáltatás alapból figyel
Port 8090
# A cím, amin hallgasson
BindAddress 0.0.0.0
# Maximális kapcsolatok száma
MaxHTTPConnections 2000
# Maximális kliensek száma
MaxClients 600
# Maximális kiosztható sávszélesség
MaxBandwidth 600000
# Log helye
CustomLog /var/log/ffmpeg.log

# Első feed, mely a ffmpeg http://localhost:8090/feed.ffm
# utasítással érhető el
<Feed feed.ffm>
# Fájlba mentés helye és a maximális fájlméret.
# (opcionális)
File /tmp/feed.ffm
FileMaxSize 500M

# Ha pull módszerrel dolgozunk a következő paraméter hatására
# FFserver indításakor elindul egy ffmpeg is az alábbi bemeneti paraméterekkel
# (kimenetet nem szabad megadni)
#Launch ffmpeg -i http://1.6.2.8:8080/live

# Az engedélyezett források
ACL allow 127.0.0.1
ACL allow 8.9.2.7
</Feed>

# Első Streamünk a localhost:8090/live.webm címen elérhető.
<Stream live.webm>
# Bemenete a feed.ffm feed.
Feed feed.ffm
# FFmpeg format paramétere webm, ez a container.
Format webm
# Hangkódolási bitráta 32kbps
AudioBitRate 32
# Monó
AudioChannels 1
# Hang mintavételi frekvencia (Hz)
AudioSampleRate 22050
# Videó bitráta 900kbps
VideoBitRate 900
# Videó mérete
VideoSize 640x480
# Formátumra jellemző egyéb paraméterek
AVOptionVideo flags +global_header
AVOptionAudio flags +global_header
# Hang kodek megadása
AudioCodec vorbis
# Videó kodek megadása
VideoCodec libvpx
</Stream>

#Státusz oldal a látogatókkal és pár statisztikával
<Stream stat.html>
Format status

#Kik érhetik el a státusz oldalt:
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255
ACL allow 8.9.2.7
</Stream>

# Index html helyett átirányít, az itt megadott címre
<Redirect index.html>
URL http://fizipedia.bme.hu/
</Redirect>

A több stream szekció használatával több kimeneti formátum is előállítható. A példa esetén egy HTML5-ben, böngészőbe ágyazható videófolyam jön létre, melyet a mai modern eszközök többsége támogat. A stat.html egy egyszerű HTML oldal, mely fehér alapon fekete betűkkel kiírja a kapcsolódó klienseket és az elhasznált sávszélességet.

Mivel a program C-ben van megírva, nagyon gyorsan reagál, felépítéséből adódóan kevés memóriát fogyaszt.

Hátránya, hogy a biztonsági korlátozások gyengék, csupán IP címre lehet szűrni, és maga a feed titkosítatlan. Az adható paraméterek kodekfüggőek és a dokumentáció nehezen elérhető. Indítható daemon-módban is, ekkor háttérfolyamatként indul el. Célszerű indítószkriptet írni az automatikus indításához.

[szerkesztés] 3 Az FFmpeg könyvtárra épülő programok

Számtalan program és szolgáltatás használja az FFmpeget,az alábbiak a legelterjedtebbek.

  • A főként Linuxra fejlesztett MPlayer lejátszó fejlesztői részt vesznek az FFmpeg fejlesztésében is. A lejátszó így az teljes egészében az FFmpegre épül, sőt forrásként is sokan az MPlayerhez csatolt programkönyvtárt fordítják le, ha FFmpegre van szükségük. Windowsra az MPlayer-nek több változata is van, köztük az egyik legelterjedtebb KMPlayer is, melyek mind az FFmpegre építenek.[3]
  • Az MPlayernek létezik egy átkódoló változata, az MEncoder, ami szintén FFmpeg alapú.
  • A GOM player oldalán is sokáig lehetett találni linket az FFmpeg forrásához, azonban ez már nem elérhető.
  • A Youtube-ot[5] és a Facebook-ot[6] is érte gyanúsítás, hogy átkódolás során az FFmpeget futtatja. Ez azért is lehetséges, mert az FFmpeghez létezik API php alapú szkriptekhez is ffmpeg-php néven, mely a Vimeo.com oldalon is megtalálható.[7]
  • A HandBrake ingyenes MPEG4 kódoló is az FFmpeg könyvtárat használja.[8]

[szerkesztés] 4 Az FFmpeg programcsomag beszerzése

A program forrása letölthető a projekt hivatalos weboldaláról. Az oldal hivatkozik külső, megbízható forrásokra, ahonnan különböző platformokra lefordított binárisokat találunk. Windows rendszerekre naprakész fordítások is elérhetőek. A legtöbb Linux disztribúció csomaglistájában is megtalálható a program. Az FFmpeg fejlesztése folyamatos, ezért csomaglistákban lassan látszanak a változások. Ha a legfrissebb verziót kívánja használni a felhasználó, akkor saját magának célszerű lefordítani a programot forrásból. Általában ezek a verziók több hibajavítást és kísérleti kodeket tartalmaznak.

A fordításhoz Windows környezetben MinGW-re van szükségünk pontos leírás a honlapon található[9]. A fordítási paraméterek között adható meg, hogy a különböző programkönyvtárakat belefordítsa az exe-be vagy külön dll-ként tárolja. A másik fontos beállítás a licencek meghatározása. A program alapvetően platformfüggetlen, a legtöbb operációs rendszerre található lefordítható változata.

[szerkesztés] 5 Licenc

Az FFmpeg egy nyílt forráskódú programcsomag, melyre alapesetben a GNU LGPLv2.1 vonatkozik. Elképzelhető, hogy egyes rendszereken az optimalizáció vagy bizonyos kodekek miatt szigorúbb licencek vonatkoznak rá, ekkor a GNU GPLv2 alá tartozik a lefordított program. Fordításkor a –enable-gpl és –enable-nonfree kapcsolók segítségével érhetjük el, hogy a GNU LGPLv2.1 vonatkozzon ránk.

Az FFmpeg ingyenesen hozzáférhető, nem kereskedelmi célú program.

[szerkesztés] 6 Ajánlott irodalom

--Velinszky László; utolsó jelentős módosítás: 2012.12.08

Személyes eszközök