FFmpeg處理音視頻流程
ffmpeg的安裝
在macbook下的安裝
- 使用Homebrew安裝庶灿,打開(kāi)終端(Terminal)應(yīng)用程序。
- 如果您尚未安裝Homebrew违柏,請(qǐng)?jiān)诮K端中輸入以下命令并按Enter鍵來(lái)安裝Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- 安裝FFmpeg为肮。在終端中輸入以下命令并按Enter鍵:
brew install ffmpeg
- 等待安裝完成口注。Homebrew將下載并安裝FFmpeg及其相關(guān)依賴(lài)項(xiàng)。
- 安裝完成后分俯,您可以通過(guò)輸入以下命令來(lái)驗(yàn)證安裝:
ffmpeg -version
在Windows上安裝FFmpeg
- 使用Windows包管理器Chocolatey安裝肾筐,打開(kāi)命令提示符或PowerShell(以管理員身份運(yùn)行)。
- 如果尚未安裝Chocolatey缸剪,請(qǐng)?jiān)诿钐崾痉騊owerShell中輸入以下命令并按Enter鍵安裝Chocolatey:
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
- 安裝FFmpeg吗铐。在命令提示符或PowerShell中輸入以下命令并按Enter鍵:
choco install ffmpeg
- 等待安裝完成。Chocolatey將下載并安裝FFmpeg杏节。
- 安裝完成后唬渗,您可以在命令提示符或PowerShell中輸入以下命令來(lái)驗(yàn)證安裝:
ffmpeg -version
FFmpeg基本信息查詢(xún)命令
-versio 顯示版本
-formats 顯示可用的格式
-demuxers 顯示可用的demuxers
-protocols 顯示可用的協(xié)議
-muxers 顯示可用的muxers
-filters 顯示可用的過(guò)濾器
-devices 顯示可用的設(shè)備
-pix_fmts 顯示可用的像素格式
-codecs 顯示所有編解碼器
-sample_fmts 顯示可用的采樣格式
-decoders 顯示可用的解碼器
-layouts 顯示channel名稱(chēng)
-encoders 顯示所有的編碼器
-colors 顯示識(shí)別的顏色名稱(chēng)
-bsfs 顯示比特流filter
FFmpeg錄制命令
ffmpeg -f avfoundation -i 1 -r 30 out.yuv
-f :指定使用avfoundation采集數(shù)據(jù)
-i :指定從哪兒采集數(shù)據(jù),它是- -個(gè)文件索引號(hào)
-r :指定幀率
-f 指定使用 avfoundation 采集數(shù)據(jù)。
-i 指定從哪兒采集數(shù)據(jù)奋渔,它是一個(gè)文件索引號(hào)镊逝。在我的MAC上,1和2(外界顯示器)都代表桌面(可以通過(guò)上面的命令查詢(xún)?cè)O(shè)備索引號(hào))嫉鲸。
-r 指定幀率撑蒜。按ffmpeg官方文檔說(shuō)-r與-framerate作用相同,但實(shí)際測(cè)試時(shí)發(fā)現(xiàn)不同充坑。-framerate 用于限制輸入减江,而-r用于限制輸出。
播放
ffplay -s 2560x1600 -pix_fmt uyvy422 out.yuv
錄制的格式為yuv422捻爷,分辨率 2560x1600,所以要告訴ffplay 播放格式為uyuv422辈灼,通過(guò) -pix_fmt參數(shù)
支持設(shè)備的索引號(hào)
macOS系統(tǒng)
ffmpeg -f avfoundation -list_devices true -i ""
windows系統(tǒng)
ffmpeg -list_devices true -f dshow -i dummy
ffmpeg -f avfoundation -i "<video device index>:<audio device index>" av-out.mov
??視頻錄制案例
# macOS系統(tǒng)中執(zhí)行
ffmpeg -f avfoundation -i "2:0" -c:v libx264 -r 20 -preset ultrafast -crf 0 -pix_fmt yuv420p output.mp4
# Windows系統(tǒng)中執(zhí)行
ffmpeg -f dshow -i video="Integrated Camera":audio="Microphone Array (Realtek High Definition Audio)" -c:v libx264 -r 20 -preset ultrafast -crf 0 -pix_fmt yuv420p output.mp4
-f :指定使用avfoundation采集數(shù)據(jù)
-c:v libx264rgb: 指定使用libx264rgb編碼器。
-qp 0: 設(shè)置視頻質(zhì)量參數(shù)也榄,0代表質(zhì)量高巡莹,越大代表質(zhì)量越低
-crf 10:10 來(lái)設(shè)定比較高的畫(huà)質(zhì),默認(rèn)是23甜紫;和 -qp 0 同理效果降宅,crf更常用;同時(shí)使用-qp和-crf時(shí)囚霸,-qp通常會(huì)覆蓋-crf的效果
-i: 表示錄制的屏幕序號(hào)或者 屏幕序號(hào):音頻設(shè)備序號(hào)
-r 23: 表示音頻碼率腰根,如出現(xiàn)畫(huà)面和音頻不一致,可通過(guò)此參數(shù)調(diào)整
-preset ultrafast: 速度優(yōu)先ultrafast>superfast>veryfast>faster>fast>medium>slow>slower>veryslow
速度遞減拓型,畫(huà)質(zhì)遞增
-pix_fmt yuv420p : 表示指定輸出視頻的像素格式
抓取鼠標(biāo)
ffmpeg -f x11grab -capture_cursor 1 -i :0.0 output.mp4
-f x11grab: 表示使用X11抓取屏幕
-capture_cursor 1: 用于指定是否捕獲屏幕錄制時(shí)的鼠標(biāo)光標(biāo);1表示啟用捕獲鼠標(biāo)光標(biāo)额嘿,0則表示禁用
FFmpeg錄音命令
ffmpeg -f avfoundation -i :0 out.wav
:0 代表音頻設(shè)備
開(kāi)始錄制音頻
ffmpeg -f avfoundation -i :1 out.wav
播放
ffplay out.wav
yuv 是原始視頻數(shù)據(jù)瘸恼,ffplay 播放該類(lèi)型視頻時(shí),需要指定分表率册养,分辨率從錄制日志里可以看到
FFmpeg分解與復(fù)用
多媒體格式轉(zhuǎn)換
ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv
-i :輸入文件
-vcodec copy :視頻編碼處理方式
-acodec copy :音頻編碼處理方式
抽取視頻
ffmpeg -i f35.mov -an -vcodec copy out.h264
抽取音頻
ffmpeg -i f35.mov -acodec copy -vn out.aac
FFmpeg處理原始數(shù)據(jù)命令
FFmpeg提取YUV數(shù)據(jù)
ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmts yuv420p out.yuv
帶分辨率播放
ffplay -s 638x358 out.yuv
FFmpeg提取PCM數(shù)據(jù)
ffmpeg -i out.mp4 -vn -ar 44100 -ac2 -f s16le out.pcm
FFmpeg濾鏡命令
ffmpeg -i in.mov -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy out.mp4
crop 格式 : crop=out_w:out_h:x:y
FFmpeg裁剪與合并命令
裁剪
ffmpeg -i in.mp4 -ss 00:00:00 -t 10 out.ts
合并
ffmpeq -f concat -i inputs.txt out.flv
inputs.txt 內(nèi)容為 'file filename'格式东帅。
FFmpeg圖片/視頻互轉(zhuǎn)命令
視頻轉(zhuǎn)圖片
ffmpeg -i in.flv -r 1 -f image2 image-%3d.jpeg
圖片轉(zhuǎn)視頻
ffmpeg -i image-%3d jpeg out.mp4
FFmpeg直播推/拉流
直播推流
ffmpeg -re -i out.mp4 -c copy -f flv rtmp://server/live/streamName
直播拉流
ffmpeg -i rtmp://server/live/streamName -c copy dump.flv
實(shí)戰(zhàn)
推流地址
拉流地址
http://www.xypsp.com/live/4K.m3u8
http://47.98.37.74/live/4K.m3u8