FFmpeg alapok, pár példával

FFmpeg alapok
FFmpeg alapok
Az utóbbi időben pár valóban egyszerű, de ismétlődő feladatot az FFmpeg segítségével oldottam meg. Már régóta használom, így be szeretném mutatni. Bár sokaknak idegen lesz, mert terminálos, de biztosan lesz olyan akinek hasznos, ha ismeri a lehetőségeket.

Az "FFmpeg" egy nyílt forráskódú multimédiás keretrendszer és szoftvercsomag, amelyet a digitális audio- és videofájlok feldolgozására használnak. A név eredetileg a "Fast Forward MPEG" kifejezés rövidítése volt, mivel az FFmpeg képes kezelni és átalakítani MPEG videofájlokat, de azóta kibővült és támogatja számos más multimédiás formátumot is.

Az FFmpeg lehetővé teszi a multimédiás adatfolyamok lejátszását, kódolását, dekódolását, transzkódolását és manipulálását. Sokféle formátumot és kodeket támogat, ideértve a hangformátumokat (például MP3, AAC, WAV) és videoformátumokat (például H.264, AVI, MPEG-4). Emellett az FFmpeg számos egyéb funkciót is kínál, például szűrők alkalmazását a videofelvétel javításához, képmanipulációt, hangszinkronizációt és még sok mást.

Az FFmpeg nagyon népszerű a multimédiafejlesztők és a videószerkesztők körében, mivel számos platformon és operációs rendszeren elérhető: Windows, macOS, Linux stb. A fejlesztők széles körű dokumentációt és eszközöket biztosítanak az FFmpeg használatához, és az API-ját is beágyazhatják más alkalmazásokba a multimédiás feldolgozás megkönnyítése érdekében.
Azaz egy a multimédia svájci bicskája.

Kinek nem jó az FFmpeg?

Olyan feladatokra nem érdemes használni, amihez van megfelelő grafikus program. Ezek kényelmesebbek, sok esetben átláthatóbbak. Az FFmpeg szerepe akkor kerül elő, ha a feladathoz nincs megfelelő grafikus megoldás. Az FFmpeg összetett kapcsolórendszerrel rendelkezik, aminak az ismerete fontos. Egy rossz paraméter már nem kívánatos eredményt ad.
Akkor sem feltétlen az FFmpeg a megoldás, ha egyszeri feladatot kell ellátni. A nagy előnye a szkriptesíthetőség, azaz szabványosított tömegtermelés.
Amit mindenképp érdemes tudni: az FFmpeg komoly használatához nem csak a programot kell ismerni, hanem azt a célt is, amit el akarunk érni. Rengeteg olyan ismeret kell, ami inkább az audió, videó témát érinti: milyen kodek, milyen bitráta stb. a cél. Ha ezt nem tudod, akkor a grafikus felületű programok nagyobb eligazítást adnak.

Ha ennyire összetett, akkor miért is érdemes használni?

Miért érdemes használni az FFmpeg-et

Az FFmpeg egy nyílt forráskódú multimédia keretrendszer és szoftvercsomag, amely számos multimédia fájlformátum és kódolás támogatását teszi lehetővé. A FFmpeg előnyei között számos olyan tulajdonság szerepel, amelyek széleskörű felhasználást tesznek lehetővé multimédia alkalmazásokban. Ezek közé tartoznak:

  1. Képesség a széleskörű multimédia formátumok támogatására: Az FFmpeg támogatja a videók, hangfájlok és képek számos formátumát, így lehetővé teszi a fájlok konvertálását és manipulálását különböző formátumok között. Olyan videó és audió állomonyok is kezelhetőek, melyet egy fősodrú grafikus program érdemtelennek tart a kezelésre. Kevés, ritka, senki nem használja… ezeknél jöhet jól a CLI-s megoldás.
  2. Egyszerű parancssoros használat: Az FFmpeg könnyen használható a parancssoros interfészének köszönhetően. Felhasználók parancsokat adhatnak a konzolon keresztül a kívánt műveletek elvégzéséhez.
  3. Rugalmasság és testreszabhatóság: Az FFmpeg számos paraméterrel és beállítással rendelkezik, amelyek lehetővé teszik a felhasználók számára, hogy finomhangolják a konvertálási vagy kódolási folyamatokat az igényeik szerint. nagyon sok paraméter miatt érdemes mindig az adott feladatra koncentrálni és a google segítségével megoldásokat keresni. Majd azt - utánanézve a pontos paraméterezésnek - finomítani.
  4. Magas minőségű kódolás: Az FFmpeg képes magas minőségű videók és hangfájlok kódolására, ami fontos a multimédiás tartalom létrehozásában és megosztásában.
  5. Platformfüggetlenség: Az FFmpeg elérhető számos operációs rendszeren, beleértve a Windows-t, a macOS-t és a Linuxot, így használható különböző környezetekben.
  6. Aktív fejlesztői közösség: Az FFmpeg egy aktív és fejlődő fejlesztői közösség által támogatott projekt, ami azt jelenti, hogy folyamatosan frissítik és javítják a szoftvert. Ennek ellenére azt tapasztalhatjuk, hogy sok disztribúció kissé régebbi FFmpeg-et ad. Nem frissítsük, amíg a disztribútor nem adja a frissebb verziót. Nagyon sok grafikus program használja, egy újabb verzió okozhat fennakadást, ha nem mindegyik grafikus program lett felkészítve rá.
  7. Ingyenes és nyílt forráskód: Az FFmpeg nyílt forráskódú szoftver, így ingyenesen hozzáférhető és használható, anélkül hogy licencdíjat kellene fizetni érte.

A következő példák random és alapvető példák. Messze nem mutatják a teljes képet, inkább csak kedvcsinálónak szánom őket.

Alapok

Az FFmpeg parancs tipikus szintaxisa a következő:

ffmpeg [global_options] {[input_file_options] -i input}  {[output_file_options] output} 

Fontos, hogy az elején megadjuk általában a teendőket, majd megadjuk mi a bemenet és azután a kimenetről rendelkezünk. Bizonyos szinten ezek felcserélhetőek, de tartsuk be a szabványt sorrendet. Nekem sok esetben átláthatatlanná válik egy hosszabb sor és maradok a megszokott rendszeremnél.

A médiafájl részleteinek megjelenítéséhez:

ffmpeg -i video.mp4

Tipp: másolj be egy külön könyvtárba egypár médiafájl, amivel kísérletezhetsz.

Amint a kimeneten látható, az FFmpeg megjeleníti a médiafájl-információkat az FFmpeg-adatokkal együtt, például a verziót, a konfigurációs részleteket, a szerzői jogi megjegyzéseket, a build- és könyvtár beállításokat stb. Ez zavaró lehet, sőt szerintem felesleges is, így egy rövidebb verzióra állítom be a lekérdezést.

ffmpeg -i video.mp4 -hide_banner 

Így kevesebb az infó. Bár ezek jellemzően technikai adatok, hasznosak lehetnek egy konverziónál. Akár az eredeti állomány, akár egy minta célállomány (ilyennek kell lenni az eredménybek) adatait lekérdezve sok hasznos értéket kinyerhetünk.

Konverziók

Mivel az FFmpeg egy funkciókban gazdag és hatékony audio- és videokonvertáló, így lehetőség van a médiafájlok különböző formátumok közötti konvertálására. A sima konverzióhoz (itt mp4-ból lesz avi):

ffmpeg -i video.mp4 video.avi 

Gyakorlatilag majdnem mindenből majdnem mindent tud készíteni.

Ha meg szeretnéd őrizni a forrás videofájl minőségét:

ffmpeg -i input.webm -qscale 0 output.mp4

A '-qscale 0'paraméter biztosítja, hogy semmilyen minőségbeli változtatás nem lesz. Általában elegendő megadni a kimeneti fájl kiterjesztését, az FFmpeg felismeri azt és már mindent be is állít.

Az ismert alapformátumokat a

ffmpeg -formats

paranccsal kapjuk meg. Pár hasznosabb kapcsoló a lehetőségekhez:

  • -formats show available formats
  • -codecs show available codecs
  • -decoders show available decoders
  • -encoders show available encoders

A kódolási lehetőségek az esetek nagy részében elegendőek, én nem találkoztam eddig olyan kódolással, vagy olyan cél kódolási lehetőséggel, amit ne ismerne.

Érdekesebb megoldások FFmpeg segítségével

Videofájl audiofájllá konvertálásához csak add meg a kimeneti formátumot pld. .mp3, vagy .ogg, vagy bármilyen más hangformátumot.

Videóból hang FFmpeg segítségével

Ez a parancs konvertálja input.mp4 videofájlt output.mp3 hangfájlt, gyakorlatilag a lehető legegyszerűbben:

ffmpeg -i input.mp4 -vn output.mp3 

Én a -vn kapcsolót a "videó nem kell" segítségével jegyeztem meg.
Ezenkívül különféle audio-átkódolási beállításokat is használhatunk a kimeneti fájlba:

ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -ab 320 -f mp3 output.mp3 

Itt,

  • -vn- Azt jelzi, hogy letiltottuk a videofelvételt a kimeneti fájlban. Videó az nem kell.
  • -ar- Állítsa be a kimeneti fájl hangfrekvenciáját. Az általánosan használt értékek a következők 22050, 44100, 48000Hz.
  • -ac- Állítsa be az audio csatornák számát.
  • -ab- Az audio bitrátát jelzi.
  • -f- Kimeneti fájl formátum. A mi esetünkben az mp3 formátum.

A fenti parancs az alábbihoz hasonló figyelmeztető üzenetet jelenít meg.

A példa két kitérőre ad lehetőséget:

  • kitérő1: Általánosan igaz, hogy minél jobban haladunk az FFmpeg használatával, annál jobban elmerülünk a videó és hangformátumok ismeretében, a technikai részletekben. Azaz nem elég csak a paramétereket megadni, azok mögöttes értelmét, jelentését is ismerni kell. Itt is fontos, hogy nézd meg mit jelent a hangfrekvencia, a bitráta és egyéb jellemző. Az interneten sok felparaméterezett FFmpeg parancssor van, amik jellemzően jók, de az értékeket ellenőrzi kell.
  • kitérő2: ha point így futtatjuk le a parancsot és egy normálisabb állományról van sz, akkor majdnem biztosan egy figyelmeztetést kapunk. Ha rosszabb minőség a kimenet, mint az eredeti, akkor általában figyelmeztetnek, hogy ez rosszabb lesz. Bár elvileg ez így van, de ne hagyatkozzunk erre. Mindig kétszer gondoljuk át az értékeket, majd készítsünk egy próbát.

    MP3-ból "videó", képpel

for i in *.mp3; do
ffmpeg -loop 1 -framerate 2 -i ./bitkép.png -i $i -c:v libx264 -preset medium \
-tune stillimage -crf 18 -c:a copy -shortest -pix_fmt yuv420p "${i%.*}".mkv
done

A beállításokra nem térek ki, ami a technikai lényeg: minden, a könyvtárban lévő mp3 állományból a megadott bitkép.png képet berakva készít egy mkv videót. Ha videómegosztó oldalra szeretnél zenét feltölteni, és az nem egy videófelvétel, akkor ez hasznos lehet.

Hangerő manipulása FFmpeg-gel

Módosíthatjuk az audiofájlok hangerejét gyorsan. Az FFmpeg segítségével módosíthatjuk egy hangfájl hangerejét "volume filter"választási lehetőséggel.
Például a következő parancs a felére csökkenti a hangerőt.

ffmpeg -i input.mp3 -af 'volume=0,5' output.mp3 

Hasonlóképpen növelhetjük a hangerőt az alábbiak szerint:

ffmpeg -i input.mp3 -af 'volume=1,5' output.mp3

Itt is használható a fent bemutatott egyszerű ciklikus végrehajtás:

for i in *.mp3; do
ide a parancsok jönnek
done

Az ilyen, vagy hasonló megoldások miatt is kedvelt a parancssori megoldás, gyorssá teheti a tömeges konverziókat.

Konverzió?

Igen, a legtöbb módosítás átkonvertálást jelen, ami időigényes lehet. Sok vagy nagy fájlok esetén erre figyeljünk! Az ideális eredmények érdekében egy kisebb állományon végezzünk el próba konvertálást, és csak akkor kezdjünk neki egy munkamenetnek, ha az eredmény kielégítő.

Videó felbontás változtatása

Ha egy adott felbontást szeretnéd beállítani egy videofájlhoz, használd a következő parancsot:

ffmpeg -i input.mp4 -filter:v scale=1280:720 -c:a copy kimenet.mp4 

Vagy,

ffmpeg -i input.mp4 -s 1280x720 -c:a copy kimenet.mp4 

A fenti parancs az adott videofájl felbontását állítja be 1280x720 méretre.

Hasonlóképpen a fenti fájl konvertálásához 640x480 méretre:

ffmpeg -i input.mp4 -filter:v scale=640:480 -c:a copy kimenet.mp4 

Vagy,

ffmpeg -i input.mp4 -s 640x480 -c:a copy kimenet.mp4 

Ez a trükk segít a videofájlok méretezésében kisebb megjelenítő eszközökre, például táblagépekre és mobilokra.

Átméretezés bármelyik irányba működik, de a felbontás durva emelése nem hoz jobb minőséget! Ami nincs az eredeti felvételen, azt nem tudjuk rávarázsolni! Felvételnél, legyen az hang vagy videó, a lehető legjobb minőséget használjuk. Bár logikus, de megemlítem: ha valaminek a felbontását lejjebb vesszük, akkor azt felkonvertálni nem tudjuk a régi minőségben. A lekonvertálás nem azt jelenti, hogy egy érték megadásával kisebb méretben jelenik meg a videó, hanem a képpontok számát fizikailag is megváltoztatjuk.

Videó tömörítése

Mindig célszerű kisebbre csökkenteni a médiafájlok méretét a lemezterület megtakarítása érdekében. Ezt szokták mondani, de a fenti figyelmeztetés érvényes: ha egy videofájlt a méret drasztikus csökkentése érdekében túlzottam tömörítünk, akkor azt visszafordítani nem tudjuk. Tartsunk mértéket!

A következő parancs tömöríti és csökkenti a kimeneti fájl méretét.

ffmpeg -i input.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 output.mp4

Itt a crf adja meg a tömörítés mértékét, amit érdemes lehet kisebbre venni.

A hangot egy kicsit lejjebb is kódolhatjuk, és sztereóvá tehetjük a méret csökkentése érdekében a következő opciókkal:

-ac 2 -c:a aac -strict -2 -b:a 128k 

Hangfájl tömörítése FFmpeg segítségével

A videofájlok tömörítéséhez hasonlóan az audiofájlokat is tömöríthetjük az FFMpeg használatával -ab kapcsolóval, hogy lemezterületet takarítsunk meg. Tegyük fel, hogy van egy hangfájl 320kbps bitrátával. Tömöríteni szeretnénk a bitrátának bármely alacsonyabb értékre. Ez egy logikus lépés, kisebb méretet ad, nem sokkal rosszabb minőséggel.

ffmpeg -i input.mp3 -ab 128 output.mp3 

A különféle elérhető bitráták listája a következő: 96 kbps, 112 kbps, 128 kbps, 160 kbps, 192 kbps, 256 kbps, 320 kbps.

Adatfolyam eltávolítása videofájlból

Ha nem szeretnénk hangot egy videóban, -an kapcsolóval eltávolíthatjuk.

ffmpeg -i input.mp4 -an output.mp4 

Más szóval, ez az opció elnémítja a hangot. A fenti parancs letiltja az összes hanggal kapcsolatos beállítás, ha valamilyen hangkonverziós beállítást tettél. Más hang kapcsolót nem érdemes mellé tenni!

Videofolyam eltávolítása médiafájlból

Hasonlóképpen, ha nem szeretnénk videofolyamot, könnyen eltávolíthatjuk azt a médiafájlból vn kapcsolóval. A vn azt jelenti, hogy nincs videofelvétel, azaz a parancs az adott médiafájlt audiofájllá alakítja.

ffmpeg -i input.mp4 -vn output.mp3 

igény szerint a kimeneti fájl bitsebességét is megadhatjuk -ab kapcsolóval.

ffmpeg -i input.mp4 -vn -ab 320 output.mp3 

Itt is igaz: elegendő a kimeneti fájl kiterjesztését megadni, az FFmpeg felismeri milyen formátumot akarunk.

Képek kinyerése a videóból

Az FFmpeg másik hasznos funkciója, hogy könnyedén kinyerhetjük a képeket egy videofájlból. Ez nagyon hasznos lehet, ha fotóalbumot szeretnénk létrehozni egy videofájlból.

ffmpeg -i input.mp4 -r 1 -f image2 image-%2d.png 

Itt,

  • -r - Állítsd be a képkocka sebességet! Azaz a képkockák száma másodpercenként. Az alapértelmezett érték 25. Ez elég nagy érték, másodpercenként 25 kép elég sok lehet egy hosszabb videónál.
  • -f - Jelzi a kimeneti formátumot, azaz esetünkben a képformátumot.
  • image-%2d.png - Jelzi, hogyan akarjuk elnevezni a kinyert képeket. Ebben az esetben a neveknek így kell kezdődniük image-01.png, image-02.png, image-03.png stb. Ha %3d, akkor a képek neve így fog kinézni image-001.png, image-002.png stb. Ha utómunkának (pld. diavetítés) vetjük alá a képeket, akkor a nevekre figyeljünk, egyes programok, ha megfelelő a nevezék, automatikusan elkészítik a diavetítést.

Videó körbevágása FFmpeg segítségével

Körbe fekete vagy fehér keret, alul-felül fekete csík? Zavaró lehet. Ezt is megoldja az FFmpeg. Ha egy részt szeretnénk kivági (corp) a videó képből, akkor:

ffmpeg -i input.mp4 -filter:v "crop=w:h:x:y" output.mp4 

Itt,

  • input.mp4 - forrás videó fájl.
  • -filter:v - A videoszűrőt jelzi.
  • crop - A szűrőt jelzi. Sokféle van, jelenleg a körbevágást használjuk.
  • w - A forrásvideóból kivágni kívánt téglalap szélessége.
  • h - A téglalap magassága.
  • x - A forrásvideóból kivágni kívánt téglalap x koordinátája
  • y - A téglalap y koordinátája.

Tegyük fel, hogy szeretnénk egy videót, amelynek szélessége : 640pixel és magassága 480pixel, a kezdő pozíció ( 200,150), a parancs:

ffmpeg -i input.mp4 -filter:v "crop=640:480:200:150" output.mp4

Kis próbálkozás után már nagyon jól behatárolhatjuk a felesleges részt, így hatékonyabb lehet, mintha videóvágó programmal grafikusan dolgoznánk.

Képarány beállítása

Nagyon zavaró, ha egy videó képaránya nem megfelelő, főleg a régebbi videóknál, házi megoldásokkal készített kópiáknál fordul elő, ha videószalagról mentik le. Itt az -aspect kapcsolóval átállíthatjuk a megfelelő arányra:

ffmpeg -i input.mp4 -aspect 16:9 output.mp4 

Az általánosan használt képarányok a következők:

  • 16:9
  • 4:3
  • 16:10
  • 5:4
  • 2:21:1
  • 2:35:1
  • 2:39:1

Részlet kivágása, konvertálása

Ha csak egy magadott rész kell a videóból, akkor azt is megoldhatjuk.

Tegyük fel például, hogy a következő parancs konvertálja az elsőt 10másodpercnyi kell a video.mp4 fájlból video.avi formátumba konvertálva:

ffmpeg -i input.mp4 -t 10 output.avi 

Itt megadjuk az időt másodpercben. Ezenkívül lehetőség van az idő megadására is hh.mm.ss formátum.
Ha pedig nem az elejéről akarunk kivágni, hanem egy adott időponttól, akkor:

ffmpeg -i input.mp4 -ss 00:00:50 -codec copy -t 50 output.mp4
  • -ss - A videóklip kezdési időpontját jelzi. Példánkban a kezdési idő az 50. másodperc.
  • -t - A teljes időtartamot jelzi.

Megadhatunk egy tól-ig tartományt is, a példában egy hanganyagból vágunk ki részletet:

ffmpeg -i audio.mp3 -ss 00:01:54 -to 00:06:53 -c copy output.mp3

Tipp: ahol lehet, illetve ha nem akarunk átkódolást használjuk a copy kapcsolót. Ilyenkor gyorsabb lesz a művelet, hiszen csak másolni fogja az adatokat.

Összefoglalva

Az FFmpeg minden Linux rendszeren ott van, ha nincs, akkor érdemes telepíteni. Nagyon sok olyant tud, ami hasznos egy médiafájl kezeléséhez. A bemutatott példák valóban csak kiragadott lehetőségek, ennél sokkal több lehetősége van. Az interneten rengeteg példa található, amiket gyorsan átalakíthatunk a saját igényeinkhez.