精品軟體與實用教程
如何在CentOS 8 / RHEL 8 Linux系統上安裝FFmpeg? FFmpeg是一個免費的開源多媒體框架,用於播放,編碼,解碼,串流傳輸,轉碼,多路復用,多路復用和過濾各種格式的多媒體文件,包括MPEG1音頻和視頻,MPEG4,h263,ac3,asf,avi,real, mjpeg和Flash。
FFmpeg是一個跨平台應用程序,可以在各種構建環境,配置和機器架構下的Linux,macOS,Windows,BSD,Solaris等上運行。大多數可用於Linux的媒體播放器以及音訊/視訊下載器和轉換器(例如youtube-dl)都需要FFmpeg才能運作。
FFmpeg工具
這些是FFmpeg的主要建構基塊:
ffmpeg –用於在格式之間轉換多媒體檔案的命令列工具
ffplay –基於SDL和FFmpeg庫的簡單媒體播放器
ffprobe –簡單的多媒體串流分析儀
FFmpeg也包含開發人員函式庫– libavutil,libavcodec,libavformat,libavdevice,libavfilter,libswscale和libswresample。
ffmpeg 下圖描述了每個輸出的轉碼過程:
如何在CentOS 8 / RHEL 8上安裝FFmpeg
在CentOS 8 / RHEL 8 Linux上安裝FFmpeg之前,請確保系統環境已配置完全。
安裝RPMfusion Yum儲存庫
建立RPM Fusion資料來源是為了提供Fedora和基於Red Hat的發行版未提供的軟體。此資料來源中可用的軟體應用程式均以預編譯的RPM檔案的形式提供。以下將使用RPMfusion資料來源在CentOS 8 / RHEL 8上安裝FFmpeg。
在安裝RPM Fusion資料來源之前,需要在系統上安裝EPEL資料來源。
sudo dnf -y install https://download.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm sudo dnf localinstall --nogpgcheck https://download1.rpmfusion. https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-8.noarch.rpm
在CentOS 8 / RHEL 8 Linux上安裝FFmpeg
新增EPEL和RPM Fusion儲存庫後,在終端機中執行以下命令以在CentOS 8 / RHEL 8 Linux系統上安裝FFmpeg。
sudo dnf install http://rpmfind.net/linux/epel/7/x86_64/Packages/s/SDL2-2.0.10-1.el7.x86_64.rpm sudo dnf install ffmpeg sudo dnf -y install ffmpeg-devel
使用以下命令檢查RHEL / CentOS系統上安裝的FFmpeg版本。
rpm -qi ffmpeg ffmpeg -version
命令
1:錄製影片:
-f:指定從使用mac的avfoundation收集資料。
-i:就是input,輸入串流,後面的1是裝置編號,表示螢幕(錄影)
i處理輸入流)。-r:指定幀率,一般來說25幀就比較流暢,15幀就勉強夠用了。
out.yuv:採集後的數據保存成yuv格式,這是一種原始格式的數據,比較大。
ffmpeg -f avfoundation -i 1 -r 30 out.yuv
播放影片:
-s 指定分辨率
-pix_fmt 指定原始影片格式
ffplay -s 2560*1600 -pix_fmt uyvy422
擷取音訊
冒號之前代表視訊設備,冒號之後代表音訊設備
ffmpeg -f avfoundation -i :1 out.wav
播放音訊
這裡由於是有格式的音訊數據,直接播放就可以了。
ffplay out.wav
2:分解與復用
用於更換多媒體資料的格式(封裝格式)
解復用- 本質是音視頻資料的分離。
重複使用- 將音視頻資料重新封裝。
轉換音視訊格式
-vcodec 影片解復用
-acodec 音訊解復用
copy 表示不更改變解復用後的編碼格式,完全copy
ffmpeg -i test.mp4 -vcodec copy -acodec copy out.flv
擷取視訊串流
-an 表示不要音頻流
ffmpeg -i test.mp4 -an -vcodec copy out.h264
提取音訊串流
ffmpeg -i test.mp4 -acodec copy -vn out.h264
3:處理原始數據
擷取影片原數據
-c:v 對影片進行解碼,使用的編解碼器是rawvideo
-pix_fmt 每一幀影像編碼為yuv 4:2:0
ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv
播放影片原數據
提取音訊原始數據
-ar 即audio read,音訊取樣率為44100
-ac 即audio channel,聲道,ac2表示雙聲道
-f 抽取的音訊pcm資料的格式,s16le s表示有符號,16位,le-little end 表示小頭。
ffmpeg -i out.mp4 -vn -ar 44100 ac 2 -f s16le out.pcm
播放音訊原始資料
ffplay -ar 44100 -ac 2 -f s16le out.pcm
4:濾鏡指令
-vf 指定濾鏡
crop,一個濾鏡的名字,=後面是參數,in_w 表示寬度減少200,in_h表示高度減少200
-c:v 指定使用的編解碼器,前面有說過
-c:a copy 不對音訊做處理
ffmpeg -i test.mov -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy out.mp4
5:ffmpeg 裁切與合併指令
裁剪:
-ss 裁剪的時間點
-t 裁切的時長,以秒為單位
ffmpeg -i in.mp4 -ss 00:00:00 -t 10 out.ts
合併:
-f concat 表示要對後面的檔案進行拼接
-i 指定輸入文件,inputs.txt 中是一個文件列表,指定了要拼接的視頻
out.flv 輸出
ffmpeg -f concat -i inputs.txt out.flv
其中,inputs.txt中文件的格式為
file '1.mp4' file '2.mp4'
加上copy,會使用目前的編碼方式,不會執行解碼的流程,速度更快:
ffmpeg -f concat -i files.txt -c copy output.mp4
6:圖片與影片互轉指令
影片轉圖片
-r 1 表示一秒鐘轉一張圖片
-f 指定轉出檔案格式,這裡為image2
image-%3d.jpeg 表示图片名,%3d表示图片编号由3个数字组成。
ffmpeg -i in.flv -r 1 -f image2 image-%3.jpeg
圖片轉視頻
ffmpeg -i image-%3d.jpeg out.mp4
7:直播推/拉流
直播推流
#-c 音視頻編解碼,-a是音訊編解碼-v是視訊編解碼#-f 指定格式
#-re 表示幀率和真正的幀率保持同步ffmpeg -re -i out.mp4 -c copy -f flv rtmp://server/live/streamName
直播拉流
ffmpeg -i rtmp://server/live.streamName -c copy dump.flv
更多操作方法可以查看幫助。或瀏覽FFmpeg官方文檔
ffmpeg --help
好了到這裡FFmpeg就安裝成功了!