Számos nyílt forráskódú eszköz áll rendelkezésre a multimédia szerkesztéséhez, finomhangolásához és átalakításához pontosan azzá, amire szükséged van. Az olyan eszközök, mint az Audacity vagy a Handbrake fantasztikusak, de néha csak gyorsan szeretnénk egy fájlt egyik formátumból egy másikba átváltani. Lépjen be az FFmpeg-be.
AFFmpeg különböző projektek gyűjteménye a multimédia fájlok kezelésére. Gyakran használják a színfalak mögött sok más médiával kapcsolatos projektben. Neve ellenére semmi köze a Moving Picture Experts Grouphoz vagy az általa létrehozott számtalan multimédiás formátumhoz.
Ebben a cikkben az FFmpeg-et az ffmpeg parancssori eszközön keresztül fogom használni, amely csak egyetlen, kis darabja az FFmpeg projektnek. Számos különböző operációs rendszeren elérhető, és néhány operációs rendszerben alapértelmezés szerint benne van. Letölthető az FFmpeg weboldaláról vagy a legtöbb csomagkezelőn keresztül.
Az FFmpeg egy nagy teljesítményű eszköz, amely szinte bármit meg tud csinálni, amit csak el tudsz képzelni a multimédia fájlokkal. Ebben a cikkben a fájlok konvertálására szeretnénk használni, ezért nem fogunk mélyen belemerülni a teljes funkciókészletébe. Mielőtt megnéznénk az FFmpeg használatát, először egy gyors pillantást kell vetnünk arra, hogy mi is pontosan egy médiafájl.
Médiafájlok
Egy nagyon magas szintű nézetben egy médiafájl egy konténerre és a hozzá tartozó streamekre bomlik. A streamek tartalmazzák a tényleges AV-összetevőket, például egy film hangját vagy videóját, és egy adott médiakódolással vagy codec-kel vannak kódolva. Minden kodek saját tulajdonságokkal, erősségekkel és gyengeségekkel rendelkezik. Az FLAC kodek például kiváló minőségű, veszteségmentes audióra alkalmas, míg a Vorbis arra lett tervezve, hogy az MP3-mal versenyezzen a fájlméret tekintetében, miközben jobb hangminőséget kínál. Ez azt jelenti, hogy egy FLAC formátumú fájl sokkal nagyobb lesz, mint egy Vorbis hangfolyam, de jobban kell szólnia. Egyik sem eredendően jobb, mint a másik, mivel mindegyik más-más dolgot próbál megvalósítani.
A konténer a csomagolást jelenti az adatfolyamok számára. Egyetlen felületet jelenít meg, amellyel a médialejátszók és eszközök kölcsönhatásba léphetnek. Egyes konténerek rendkívül fejlettek, és lehetővé tesznek bármilyen adatfolyamot, beleértve több videó- és hangfolyamot is egyetlen konténeren belül. A konténerben lévő streameknek azonban nem feltétlenül csak audio- vagy videostreameknek kell lenniük. A különböző konténerek különböző streameket tesznek lehetővé, például feliratokat, fejezetinformációkat vagy egyéb metaadatokat. Minden attól függ, hogy a konténer mit engedélyez.
Ez a médiafájlok absztrakt ábrázolása, és átugorja a konténerek közötti sok különbséget. Sokan megkövetelnek bizonyos folyamokat és metaadatokat, vagy korlátozzák a megengedett codec-eket vagy tartalmakat. Ez a magyarázat elég ahhoz, hogy végigjusson ezen a cikken. Ha többet szeretne megtudni, kattintson a fenti linkekre.
Figyeljen arra, hogy a videó- és hangkódolás nagyon sokáig tarthat. Fel kell készülnie arra, hogy az FFmpeg használatakor egy időre be kell rendezkednie.
Az alapkonvertálás
Az, ami a legtöbb embert megbuktatja a hang és videó konvertálásakor, a megfelelő formátumok és konténerek kiválasztása. Szerencsére az FFmpeg elég okos az alapértelmezett beállításokkal. Általában automatikusan kiválasztja a megfelelő kodekeket és tárolókat, mindenféle bonyolult beállítás nélkül.
Tegyük fel például, hogy van egy MP3 fájlunk, és azt szeretnénk, hogy OGG fájlba konvertáljuk:
ffmpeg -i input.mp3 output.ogg
Ez a parancs fog egy input.mp3 nevű MP3 fájlt, és átalakítja egy output.ogg nevű OGG fájlba. Az FFmpeg szempontjából ez azt jelenti, hogy az MP3 hangfolyamot Vorbis hangfolyammá alakítja, és ezt a hangfolyamot egy OGG konténerbe csomagolja. Nem kellett megadni a stream vagy a konténer típusát, mert az FFmpeg ezt kitalálta Ön helyett.
Ez videókkal is működik:
ffmpeg -i input.mp4 output.webm
Mivel a WebM egy jól definiált formátum, az FFmpeg automatikusan tudja, hogy milyen videót és hangot támogat, és a streameket érvényes WebM-fájlokká konvertálja.
A választott konténertől függően ez nem mindig fog működni. Például az olyan konténerek, mint a Matroska, úgy vannak kialakítva, hogy szinte bármilyen streamet kezelni tudjanak, amit bele akarsz tenni, függetlenül attól, hogy érvényesek-e vagy sem. Ez azt jelenti, hogy a:
ffmpeg -i input.mp4 output.mkv
parancs egy olyan fájlt eredményezhet, amelynek ugyanazok a codec-jei vannak, mint az input.mp4-nek, ami lehet, hogy az Ön által kívánt, de lehet, hogy nem.
A codec-ek kiválasztása
Mi a teendő tehát, ha egy olyan konténert szeretne használni, mint a Matroska (amely szinte bármilyen streamet képes kezelni), de mégis befolyásolni szeretné, hogy milyen codec-ek legyenek a kimeneten? FFmpeg a megmentő! A szükséges codec-eket a -c flag használatával választhatod ki.
Ezzel a flaggel beállíthatod, hogy melyik codec-et használd az egyes streamekhez. Ha például a hangfolyamot Vorbisra szeretnénk állítani, akkor a következő parancsot használjuk:
ffmpeg -i input.mp3 -c:a libvorbis output.ogg
Az audiófolyam mellett a videó- is megváltoztatható:
ffmpeg -i input.mp4 -c:v vp9 -c:a libvorbis output.mkv
Ezzel egy Matroska konténert készítünk VP9 videó- és Vorbis audiófolyammal, ami lényegében megegyezik a korábban készített WebM-mel.
Az ffmpeg -codecs parancs minden olyan codecet kiír, amit az FFmpeg ismer. Ennek a parancsnak a kimenete az FFmpeg telepített verziójától függően változik.
Egyetlen stream megváltoztatása
Többször előfordul, mint szeretnénk, hogy a birtokunkban lévő fájl részben helyes, csak egyetlen stream van rossz formátumban. Nagyon időigényes lehet a helyes stream újrakódolása. Az FFmpeg segíthet ebben a helyzetben:
ffmpeg -i input.webm -c:v copy -c:a flac output.mkv
Ez a parancs az input.webm fájlból a video streamet az output.mkv fájlba másolja, a Vorbis audio streamet pedig FLAC fájlba kódolja. A -c flag igazán hatékony.
Konténer módosítása
Az előző példa mind az audio-, mind a videófolyamra alkalmazható, így egyik konténerformátumról a másikra konvertálhatunk anélkül, hogy további folyamkódolást kellene végeznünk:
ffmpeg -i input.webm -c:av copy output.mkv
A minőség befolyásolása
Most, hogy már tudjuk kezelni a kodekeket, a következő kérdés: Hogyan állíthatjuk be az egyes folyam minőségét?
A legegyszerűbb módszer a bitráta megváltoztatása, ami vagy más minőséget eredményez, vagy nem. Az emberek látási és hallási képessége nem olyan tiszta és egyértelmű, mint szeretnénk hinni. Néha a bitráták megváltoztatása óriási különbséget jelent a szubjektív minőségben. Máskor viszont csak a fájlméretet változtatja meg. Néha nagyon nehéz megmondani, hogy mi fog történni anélkül, hogy kipróbálnánk.
Az egyes adatfolyamok bitrátájának beállításához a -b flag-et használjuk, amely hasonlóan működik, mint a -c flag, csak a codec opciók helyett a bitrátát állítjuk be.
A videó bitrátájának módosításához például így használjuk:
ffmpeg -i input.webm -c:a copy -c:v vp9 -b:v 1M output.mkv
Ez a bemenetről a hangot másolja (-c:a copy).webm-ből, és a videót VP9 kodekbe konvertálja (-c:v vp9) 1M/s bitsebességgel (-b:v), mindezt egy Matroska konténerbe (output.mkv) csomagolva.
Egy másik mód, amivel befolyásolhatjuk a minőséget, ha a videó képkockasebességét a -r opcióval állítjuk be:
ffmpeg -i input.webm -c:a copy -c:v vp9 -r 30 output.mkv
Ez egy új Matroska-t hoz létre a hangfolyam átmásolásával és a videófolyam képkockasebességének másodpercenkénti 30 képkockára kényszerítésével, a bemeneti képkockasebesség helyett (-r 30).
A videó méreteit is beállíthatjuk az FFmpeg segítségével. A legegyszerűbb, ha egy előre megadott videóméretet használsz:
ffmpeg -i input.mkv -c:a copy -s hd720 output.mkv
Ez a videót 1280×720-ra módosítja a kimeneten, de ha akarod, kézzel is beállíthatod a szélességet és a magasságot:
ffmpeg -i input.mkv -c:a copy -s 1280x720 output.mkv
Ez pontosan ugyanazt a kimenetet eredményezi, mint a korábbi parancs. Ha egyéni méreteket szeretne beállítani az FFmpegben, ne feledje, hogy a szélesség paraméter (1280) a magasság (720) előtt áll.
A képkockasebesség és a bitráta beállítása két durva, de hatékony módszer a média minőségének befolyásolására. Ezen értékek nagyon magasra állítása nem képes javítani egy meglévő forrás minőségét, ha annak minősége már eleve alacsony.
A beállítások módosítása a leghatékonyabb egy jó minőségű adatfolyam gyors csökkentésére, hogy kisebb fájlméretű legyen. A videó méretének beállítása nem javíthat a minőségen, de jobban elfér egy táblagépen a tévé helyett. Egy 640×480-as videó méretének 4K-ra történő módosítása nem javítja azt.
A fájlok minőségének módosítása nagyon szubjektív dolog, ami azt jelenti, hogy nincs egyetlen, minden alkalommal működő módszer. A legjobb módszer, ha elvégez néhány változtatást, és kipróbálja, hogy jobban néz ki vagy jobban hangzik-e az Ön számára.
A streamek módosítása
Gyakran van olyan fájlja, amely majdnem tökéletes, és csak néhány részt kell levágnia belőle. Ezt könnyebben megteheted egy olyan eszközzel, amely megmutatja, hogy mit változtatsz, de ha pontosan tudod, hogy hol akarod levágni, akkor nagyon könnyen megteheted az FFmpegben:
ffmpeg -i input.mkv -c:av copy -ss 00:01:00 -t 10 output.mkv
Ez a videó- és hangfolyamokat másolja (-c:av copy), de a videót vágja le. A -t opció 10 másodpercre állítja be a vágás időtartamát, a -ss opció pedig a videó vágás kezdőpontját, jelen esetben egy percnél (00:01:00). Az óráknál, perceknél és másodperceknél pontosabb is lehet, ha szükséges, akár ezredmásodpercekig is lemehet.
A hang kivonása
Néha nem igazán érdekel a videó, csak a hangra van szükséged. Szerencsére ez nagyon egyszerű az FFmpegben a -vn jelzővel:
ffmpeg -i input.mkv -vn audio_only.ogg
Ez a parancs csak a hangot vonja ki a bemenetből, Vorbis-kódolja, és az audio_only.ogg fájlba menti. Most már van egy izolált hangfolyamod. Ugyanígy használhatod a -an és -sn jelzőket is a hang- és feliratfolyam leválasztásához.
GIF-et csinálni belőle
A közelmúltban az animált GIF-ek (kemény g-vel, mert nem vagyok egy szörnyeteg) visszatértek. Személy szerint úgy gondolom, hogy a GIF a legrosszabb formátum, amit videónak választhatsz. Borzalmas a tömörítési minősége és mérete; nagyon kemény korlátok vannak a színek, a képkocka sebesség és a konténer metaadatok körül; és nem támogatja a hangot. Mégis elég népszerű. Hogyan lehet tehát egy videoklipből animált GIF-et készíteni?
A -an jelző használata, hasonlóan a fentiekhez, jobb, mint az animált GIF létrehozása, ha hang nélküli videót szeretne készíteni, de rengeteg olyan hely van, amely támogatja a GIF-eket, de nem támogat más videóformátumot. Mindezek számára:
ffmpeg -i input.mkv output.gif
Ez a parancs a bemeneti fájl méretével megegyező méretű GIF-et hoz létre. Ez gyakran rossz ötlet, mivel a GIF-ek nem tömörülnek jól más videóformátumokhoz képest (tapasztalatom szerint egy GIF körülbelül nyolcszor nagyobb lesz, mint a forrásvideó). Hasznos lehet az -s opció használata a GIF átméretezéséhez, különösen, ha a bemeneti forrás elég nagy, például HD videó.
Más eszközök
Míg az FFmpeg a legtöbb AV feladathoz a legmegfelelőbb eszköz, nem mindenre tökéletes. Vannak olyan eszközök, amelyek az FFmpeggel együtt használva mindent egy kicsit megkönnyíthetnek.
Videók elkapása a YouTube-ról
Nagyon könnyen előfordulhat, hogy feltöltünk valamit a YouTube-ra, elveszítjük az eredeti forrásvideót, és csak a YouTube verzió marad meg. Mi a legegyszerűbb módja annak, hogy visszaszerezze a YouTube-videók másolatát?
A YouTube-dl egy ügyes kis eszköz, amellyel videókat szerezhet a YouTube-ról és számos más videó-streaming szolgáltatásról. Használata szuperegyszerű:
youtube-dl https://www.youtube.com/watch?v=2m5nW9CQLJ0
Ez a parancs letölti a videót a megadott URL címen, és helyileg elmenti.
A Youtube-dl-nek számos lehetősége van a letöltött videó minőségének és formátumának szabályozására, de szerintem egyszerűbb a fenti parancsot használni. Ez a legjobb minőségű hangot és videót tölti le egyetlen fájlba, majd az FFmpeg segítségével konvertálom őket a kívánt formátumba.
Információk lekérése a médiáról
Néha csak annyit kell tudni, hogy mi van a médiatárolóban. Bár több olyan eszköz is létezik, amely képes erre, én a MediaInfo-t részesítem előnyben. A MediaInfo megmutatja az összes információt a médiakonténeren belül, a különböző streamek mindegyikére, valamint a bemeneti fájl metaadatait. Ez mindent megad, amit tudni akarsz – és valószínűleg egy csomó mindent, amit nem.
A mediainfo inputFile.mkv parancs futtatása kiköp egy listát a bemeneti fájlra vonatkozó információkról ember által olvasható formában.
És még többet…
Ez csak a felszínét karcolja annak, amit az FFmpeg tud. Szerencsére az FFmpeg és a projekt többi eszközének dokumentációja nagyon jó, és érdemes megnézni. Ebből mindent megtudhatsz arról a sok különböző trükkről, amire ez a kutya képes.
Ha egy grafikus felülettel rendelkező eszközt keresel a multimédia konvertálásához, a Handbrake egy kivételesen jó eszköz, amely elérhető Linuxon, Mac OS X-en és Windowson. A Handbrake az FFmpeg-et használja (más eszközök mellett) a motorháztető alatt.