Co to jest FFmpeg?
Narzędzie do obróbki wszystkiego co się wiąże w dzisiejszym świecie z plikami wideo. Koduje, transkoduje, mixuje, strumieniuje i pozwala manipulować filtrami w ścieżkach wideo 🙂 Jest parataktycznie dostępny na wszystkich platformach jakie człowiek stworzył. Za darmo i ciągle rozwijany na nowe potrzeby rynku.
W skład komponentu wchodzą cztery narzędzia :
- ffmpeg – narzędzie konsolowe do robienia wszystkiego co nam się podoba z pilakami video.
- ffserver – Serwer do strumieniowania na żywo.
- ffplay – prosty odtwarzać wideo.
- ffprobe – Analizator plików lub strumienia wideo.
Narzędzie używamy poprzez konsole poleceń ( w Windows -> Uruchom jako.. -> cmd.exe ), wydajać potrzebną komendę dla danej sytuacji 🙂
Składnia programu przedstawia się następująco:
ffmpeg [ opcje dla pliku wejściowego] -i [plik/strumień wejściowy] [opcja dla pliku/strumienia wyjściowego] plik_wyjściowy #Ogólne -f wymuś format -i wejściowy plik -v włączenie debugowania -target wybranie juz gotowego typu formatu ( vcd, svcd, dvd,pal-vcd ) #Opcje dla Video -r ustawienie ilości klatek na sekundę, domyślnie 25. -s ustawienie wielkości klatki (wxh ) 1920x1080. -vn wyłączenie video. -sameq używaj podobnego bitretu jak w źródle. -maxbitrate maksymalny bitrate. -minbitrate minimalny bitrate. # Opcje dla Audio -an wyłączenie audio.
informacje o dostępnych formatach i kodekach
ffmpeg -formats # D - możemy dekodowac z danego formatu # E - możemy encodowac do danego formatu ffmpeg -codecs # D - możemy dekodowac z danego kodeku # E - możemy encodowac do danego kodeku #V/A/S - informacja do czego ten kodek sie nadaje Video/Audio/Subtitle
Informacja o pliku video:
ffmpeg -i video.mp4 ffprobe video.mp4 mediainfo video.mp4
Przekształcenie video na zdjęcia i zdjęcia na video:
Nasze przykładowe video.mp4 ma 19,669 sekund, które było nagrywane 50 klatek na sekundę (fps). Wiec możemy się spodziewać 19,669*50 ~= 984 zdjęć ( zaokrągli w gore) .
%d - Generuje w wystąpieniu liczbę. Domyślnie, numeracja w gore od 1 ( img1.jpg, img2.jpg ...) f - wymusza użycie danego formatu framrate - ustawia ilość klatek na sekunde, domyślnie jest 25.
## Stream #0:0 -> #0:0 (h264 (native) -> mjpeg (native)) ffmpeg -i video.mp4 img%d.jpg ## Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264)) ffmpeg -f image2 -framerate 50 -i img%d.jpg vid.mp4 ## Stream #0:0 -> #0:0 (mjpeg (native) -> gif (native)) ffmpeg -f image2 -framerate 50 -i img%d.jpg vid.gif
Przekształcenie video do innego formatu pliku:
## AVI do MPG ffmpeg -i video.avi video.mpg ## mp4 do gif ffmpeg -i video.mp4 video.gif ## mp4 do flv ffmpeg -i video.mp4 video.flv ## mp4 do SVCD mpeg2 ( standard na płyty dvd ) ffmpeg -i video.mp4 -target pal-svcd vid.mpg # PAL ffmpeg -i video.mp4 -target ntsc-svcd vid.mpg # NTSC
Wyciąganie dźwięku z video i mixowanie dodatkowego dźwięku:
vn - wyłączenie ścieżki video
## video z formatem dźwięku ACC do mp3 ## Stream #0:1 -> #0:0 (aac (native) -> mp3 (libmp3lame)) ffmpeg -i video.mp4 -vn -f mp3 audio,mp3 ffmpeg -i video,mp4 -map 0:1 -acodec copy -vn adio.mp3 # gdy jest dostępne kilka ścieżek audio ## Mixowanie audio ## Stream #1:0 -> #0:0 (h264 (native) -> h264 (libx264)) ## Stream #0:0 -> #0:1 (mp3 (native) -> aac (native)) ffmpeg -i audio.mp3 -i video.mp4 vid.mp4
Obniżenie / Zwiększenie prędkości odtwarzanego video:
Cala sztuczka polega na manipulacji rekordu PTS , dzieląc go o polowe zwiększamy dwukrotnie prędkość odtwarzania w jednej sekundzie.
PTS () - znacznik czasu prezentacji, wartość mówiąca o tym kiedy powinien zostać zaprezentowana klatka. vf - deklaracja użycia filtru video
## Zwiększenie ffmpeg -i video.mp4 -vf "setpts=0.5*PTS" vid.mp4 ## Zmniejszenie ffmpeg -i video.mp4 -vf "setpts=1.5*PTS" vid.mp4 ## Analiza co sie dokładnie zmieniło w ramkach ffprobe -show_frames video.mp4
Skalowanie zdjęć:
ffmpeg -i img.jpg -vf scale=320:240 out.jpg
Wycięcie kawałku obrazka/video:
## x:y:width:height ffmpeg -i img.jpg -vf crop 0:0:600:600 out.png ffmpeg -i video.mp4 -vf crop=100:100:900:900 out.mp4
Odwrócenie kolorów obrazka/wideo (negatyw):
ffmpeg -i video.mp4 -vf lutrgb="r=negval:g=negval:b=negval" out.mp4 ffmpeg -i img.jpg -vf lutrgb="r=negval:g=negval:b=negval" out.jpg
Rysowanie box na video lub zdjęciu:
ffmpeg -i video.mp4 -vf drawbox=x=0:y=0:w=200:h=60:color=red@0.5 out.mp4
Wyłączenie dźwięku lub ściszenie:
## mute ffmpeg -i video.mp4 -an out.mp4 ## Zmiana głośności dźwięku ffmpeg -i video.mp4 -af 'volume=0.5' output.mp4
Obrócenie wideo / zdjęcia:
# o 90 stopni ffmpeg -i video.mp4 -filter:v 'transpose=1' vid.mp4 # o 180 stopni ffmpeg -i video.mp4 -vf "transpose=2" vid.mp4