FFmpeg to wieloplatformowy projekt, mający na celu dostarczenie kompletnej platformy do nagrywania, konwertowania oraz przesyłania strumieni audio i video. Obsługuje on bardzo wiele kodeków i kontenerów multimedialnych. FFmpeg jest wiodącym frameworkiem multimedialnym, ma możliwość dekodowania, kodowania, transkodowania, multipleksowania, demultipleksowania, strumieniowania, filtrowania i odtwarzania prawie wszystkiego, co ludzie i maszyny stworzyli. Obsługuje formaty od tych najbardziej „starożytnych” i mało znanych aż do najnowocześniejszych.
FFmpeg dostarcza m.in kilka narzędzi:
- ffmpeg – program służący do konwertowania plików multimedialnych z jednego formatu na inny oraz podstawowej obróbki,
- ffserver – serwer do przesyłania strumieni audio i wideo na żywo,
- ffplay – prosty odtwarzacz oparty na SDL i bibliotekach FFmpeg,
- ffprobe – prosty analizer plików / strumieni multimedialnych.
Możliwości programu ffmpeg są bardzo duże.
Przykładowe zastosowania programu ffmpeg
Bezstratna zmiana kontenera multimedialnego, bez zmiany użytych kodeków
ffmpeg -i plik_we.mts -acodec copy -vcodec copy plik_wy.mp4
Po parametrze -i
podajemy ścieżkę do pliku wejściowego. Parametry -acodec
i -vcodec
określają użyte kodeki audio i wideo — w tym przykładzie to skopiowane strumieni bez zmiany kodeka.
Bezstratne uzyskanie wycinka filmu
ffmpeg -i plik_we.avi -acodec copy -vcodec copy -ss 15 -t 00:10:10 plik_wy.avi
W podanym przykładzie uzyskamy wycinek o długości 10 min 10 sekund, zaczynający się od 15 sekundy oryginalnego filmu. Czas można podawać jako liczbę sekund, albo w formacie gg:mm:ss[.xxx] gdzie xxx to tysięczne sekundy i ich podane jest nieobowiązkowe.
Stworzenie filmu z pliku audio i obrazka
ffmpeg -r 1 -loop 1 -i grafika.png -i muzyka.acc -acodec copy \ -vcodec libx264 -shortest -crf 18 -tune stillimage plik_wy.mp4
Obraz będzie powtarzany w pętli (-loop 1
) z częstotliwością 1 klatkę na sekundę (-r 1
). Strumień audio zostanie przekopiowany z pliku muzycznego bez straty jakości. Obraz zostanie zakodowany przy pomocy kodera H.264/MPEG-4 AVC, a konkretnie przy użyciu kodeka x264. Film będzie miał długość taką jaką ma plik muzyczny (-shortest
). W kodeku x264 zostanie zastosowana optymalizacja dla obrazów nieruchomych (-tune stillimage
). Możliwe wartości parametru -tune
to:
- film – przeznaczona dla filmów o wysokiej przepływności oraz jakości
- animation – przeznaczona dla kreskówek
- grain – optymalizacja do materiałów, które są już „ziarniste”. Przy jej zastosowaniu ziarno nie zostanie odfiltrowane tak bardzo.
- stillimage – przeznacona dla nieruchomych obrazów
- psnr – tryb debugowania z optymalizacją tylko na dobrą wartość szczytowego stosuneku sygnału do szumu (PSNR, ang. peak signal-to-noise ratio)
- ssim – tryb debugowania z optymalizacją tylko na dobrą wartość SSIM (ang. structural similarity)
- fastdecode – optymalizacja dla szybkiego dekodowania na urządzeniach o niskiej mocy obliczeniowej
- zerolatency – optymalizacja dla szybkiego kodowania i strumieniowania z niskimi opóźnieniami
Parametr -crf
określa żądaną jakość strumienia wideo. Parametr ten może przyjmować wartości całkowite nieujemne. Rozsądny zakres tego parametru to 18-28. Znaczenie jego wartości można opisać następująco:
- 0 – kodowanie bezstratne
- 18 – kodowanie wizualnie bezstratne
- 23 – wartość domyślna
Zmiana Constant Rate Factor o 6 powoduje zmianę przepływności strumienia wideo o połowę.
Dwie ścieżki dźwiękowe w jednym pliku
Załóżmy, że mamy dwa pliki z filmem, każdy plik z inną ścieżka dźwiękową (np. z dubbingiem i z lektorem). Możemy z tych dwóch plików stworzyć jeden, zawierający dwie ścieżki dźwiękowe i strumień wideo.
ffmpeg -i film_oryg.mp4 -i film_lektor.mp4 -acodec copy -vcodec copy -map 0:v:0 -map 1:a:0 -map 0:a:0 film_lektor+oryg.mp4
Stworzony w ten sposób plik będzie zawierał pierwszy strumień wideo z pierwszego pliku (-map 0:v:0
), pierwszy strumień audio z drugiego pliku (-map 1:a:0
), pierwszy strumień audio z pierwszego pliku (-map 0:a:0
). Czyli domyślną ścieżka dźwiękową będzie ta z pliku film_lektor.mp4
. Zarówno dźwięk jak i obraz zostaną skopiowane bez utraty jakości.