FFmpeg常用命令總結
ffmpeg命令分為8大類
-
查詢命令
ffmpeg -devices
檢視當前電腦的錄製裝置架構
ffmpeg -f avfoundation -list_devices true -i ""
檢視當前電腦的錄製裝置列表
ffmpeg f
檢視當前ffmpeg的各類詳細資訊
ffmpeg -help
檢視ffmpeg的幫助文件
-
錄製命令
ffmpeg -f avfoundation -i 1 -r 30 out.yuv
使用1影象裝置(0:攝像頭;1:錄屏)錄製檔名為out.yuv的30fps的視訊
ffmpeg -f avfoundation -i :0 out.aac
使用0音訊裝置(0:電腦自帶的麥克風)錄製名為out.aac的音訊
-
解複用命令
ffmpeg -i demo.mp4 -vcodec copy -acodec copy demo.flv
將demo.mp4檔案的音訊和視訊原封不動的拷貝成demo.flv檔案,不改變其解析度,格式,濾鏡等
ffmpeg -i demo.mp4 -vcodec copy -an demo.h264
將demo.mp4檔案的視訊原封不動的拷貝成demo.flv檔案,但是不含音訊
ffmpeg -i demo.mp4 -vn -acodec copy demo.aac
將demo.mp4檔案中的音訊原封不動的拷貝成demo.aac檔案,但是不含視訊
-
處理原始資料命令
ffmpeg -i demo.mp4 -an -c:v rawvideo -pix_fmt yuv420p demo.yuv
將demo.mp4檔案轉成demo.yuv這樣的原始視訊資料檔案,其中不包含音訊。並且編碼為rawvideo原始視訊檔案畫素格式是yuv420p。yuv常用畫素格式444p,422p,420p
ffmpeg -i demo.mp4 -vn -ar 44100 -ac 2 -f s16le demo.pcm
將demo.mp4檔案中的音訊抽取出來轉成demo.pcm這樣的音訊原始檔案,其中不包含視訊。其中音訊取樣率(audio rate)為44100,音訊聲道為2聲道(audio channel)音訊編碼格式是s16le(s代表有符號的,即正負;16代表16進位制;le代表小的little end)
-
音視訊裁剪命令
ffmpeg -i demo.mp4 -ss 00:02:00 -t 20 demo.ts
將demo,mp4從2分鐘進行裁剪,裁剪成10秒的一個視訊
-ss代表從什麼時間點開始裁剪
-t代表裁剪的時長
.ts格式是一種日本高清攝像機錄製之後封裝的視訊格式
-
視訊圖片互轉命令
ffmpeg -i demo.mp4 -r 1 -f image2 image_%3d.jpeg
將demo.mp4視訊按照1秒鐘1張圖片的方式截成image2格式的圖片,如果視訊有22秒,那麼最終就是22張
-r代表按照多少秒的間隔擷取圖片
image2是一種圖片格式
image_%3d代表一種動態的命名規範,比如:image_001.jpeg
ffmpeg -i image_%3d.jpeg demoImage.mp4
將符合image_%3.jpeg檔案格式的所有檔案轉成mp4檔案
-
直播流命令
推流命令
ffmpeg -re -i demo.mp4 -c copy -f flvrtmp://server/live/streamName
將demo.mp4檔案推送到直播流地址中
-re代表減慢推流速度,讓當前錄製的視訊和推流視訊保持一致
-c代表音視訊同時編碼,如果只對視訊編碼-vcodec,音訊就是-acodec
-f代表格式
拉流命令
ffmpegrtmp://server/live/steamName -c copy demo.flv
將rtmp地址上的視訊拉到本地,同時對音視訊編碼儲存到本地
-
濾鏡命令
濾鏡原理:
1. 拿到解碼後的原始視訊資料幀
2. 對原始視訊資料幀進行加濾鏡
3. 再進行編碼得到濾鏡後的編碼資料包
ffmpeg -i demo.mp4 -vf crop=demo_w-200:demo_h-200 -c:v libx264 -c:a copy demo.mp4
將demo.mp4進行寬高各裁剪200畫素的濾鏡操作
-vf是對視訊進行操作,crop是裁剪的意思後面跟著引數
-c:v 是對視訊進行編碼,後面跟著視訊編碼器,這裡用的是lib264x
-c:a 是對音訊進行編碼,後面跟著音訊編碼器,這裡用copy就是不變動音訊
-
其他命令
ffplay demo.mp4
播放demo.mp4檔案
ffplay -s 1280x800 -pix_fmt uyvy422 demo.yuv
播放解析度是1280x800的畫素格式是uyvy422的demo.yuv視訊原始檔案
附錄:
-i:後面接檔名,“i”是“index”索引的簡稱,用於找到檔案
-s:後面接一個解析度或者大小,“s”是“size”大小的簡稱,用於指定原始視訊檔案(如:yuv格式)的解析度,如果不指定的話,視訊無法正常播放
-c:後面接編碼命令,-c代表對音視訊同時編碼,如果單獨對音訊或者視訊編碼使用-acodec或者-vcodec
-pix_fmt:後面接一個視訊格式,如:yuv420p,uyvy422等。“pix”是“pixel”畫素的簡稱,“fmt”是“fomat”格式的簡稱。同樣,如果不指定的話,原始視訊檔案無法正常播放
-f:後面接一個格式,比如:flv,MP4等
-vn:不對視訊編輯或者遮蔽視訊的命令,“v”代表“video”視訊,“n”代表“no”
-an:不對音訊編輯或者遮蔽音訊的命令,“a”代表“audio”音訊,“n”代表“no”
-vcodec:對視訊進行編碼
-avodec:對音訊進行編碼
copy:拷貝命令,一般用於更改視訊或者音訊格式
-ac:代表音訊聲道,“a”代表“audio”,“c”代表“channel”
-ar:代表音訊取樣率,“a”代表“audio”,“r”代表“rate”