mac ffmpeg 中的錄製命令和分解與複用命令
mac中螢幕錄製命令:
-
ffmpeg -f avfoundation -i 1 -r 30 out.yuv
-f 指定使用 avfoundation 採集資料。
-i 指定從哪兒採集資料,它是一個檔案索引號。在我的MAC上,1代表桌面。
-r 指定幀率。按ffmpeg官方文件說-r與-framerate作用相同,但實際測試時發現不同。-framerate 用於限制輸入,而-r用於限制輸出。
可以使用下面的命令檢視mac上有哪些裝置:
ffmpeg -f avfoundation -list_devices true -i “”
查詢結果:
錄製命令的截圖:
錄製完視訊的播放命令是:
ffplay -s 1400x900 -pix_fmt uyvy422 out.yuv
截圖上紅色標出的就是-s 和-pix_fmt 後面數值的來源。 -
ffmpeg -framerate 30 -f avfoundation -i 0 out.mp4
-framerate 限制視訊的採集幀率。這個必須要根據提示要求進行設定,如果不設定就會報錯。
-f 指定使用 avfoundation 採集資料。
-i 指定視訊裝置的索引號。
播放命令:
ffplay out.mp4
mac中聲音錄製命令:
-
ffmpeg -f avfoundation -i :0 out.wav
-f 指定使用 avfoundation 採集資料。
-i 指定從哪兒採集資料,它是一個檔案索引號。
: 冒號前面的是視訊採集索引號,冒號後面是音訊採集索引號
播放聲音的命令:
ffplay out.wav -
錄製音訊裸資料
ffmpeg -f avfoundation -i :0 -ar 44100 -f s16le out.pcm
mac錄製視訊與聲音:
在執行這個命令之前先檢查下面的問題1和問題2所需要的庫是否安裝,如果沒有安裝,先安裝下面的兩個庫,然後重新編譯ffmpeg,免得浪費時間
第一種錄製聲音和視訊的命令
ffmpeg -f avfoundation -i 1:0 -r 29.97 -c:v libx264 -c:a libfdk_aac -profile:a aac_he_v2 -b:a 32k out.flv
-i 1:0 冒號前面的 “1” 代表的螢幕索引號。冒號後面的"0"代表的聲音索相號。
-c:v 與引數 -vcodec 一樣,表示視訊編碼器。c 是 codec 的縮寫,v 是video的縮寫。
-crf 是 x264 的引數。 0 表式無失真壓縮。
-c:a 與引數 -acodec 一樣,表示音訊編碼器。
-profile 是 fdk_aac 的引數。 aac_he_v2 表式使用 AAC_HE v2 壓縮資料。
-b:a 指定音訊位元速率。 b 是 bitrate的縮寫, a是 audio的縮與。
問題1
Unknown encoder ‘libx264’
即,缺少libx264庫,需要安裝該庫:
-
git clone git://git.videolan.org/x264.git
-
cd x264
-
./configure --enable-static --enable-share --disable-asm
-
make
-
sudo make install
問題2
Unknown encoder ‘libfdk_aac’
缺少fdk_aac庫需要安裝該庫:
1)git clone https://github.com/mstorsjo/fdk-aac.git
-
./autogen.sh
-
./configure
-
make
-
make install
安裝完libx264和fdk-aac,需要重新編譯安裝ffmpeg
-
配置ffmpeg時,加上x264和fdk-aac,如:
./configure --enable-version3 --enable-libfdk-aac --enable-nonfree --enable-gpl --enable-libx264 -
make clean
-
make
-
make install(或者 sudo make install)
ffmpeg -framerate 30 -vsync 2 -f avfoundation -i 0:0 out.mp4
(這個命令沒有坑)
分解與複用
流拷貝是通過將 copy 引數提供給-codec選項來選擇流的模式。它使得ffmpeg省略了指定流的解碼和編碼步驟,所以它只能進行多路分解和多路複用。 這對於更改容器格式或修改容器級元資料很有用。 在這種情況下,流程如圖:
_______ ______________ ________
| | | | | |
| input | demuxer | encoded data | muxer | output |
| file | ---------> | packets | -------> | file |
|_______| |______________| |________|
由於沒有解碼或編碼,速度非常快,沒有質量損失。 但是,由於許多因素,在某些情況下可能無法正常工作。 應用過濾器顯然也是不可能的,因為過濾器處理未壓縮的資料。
抽取音訊流
ffmpeg -i input.mp4 -acodec copy -vn out.aac
acodec: 指定音訊編碼器,copy 指明只拷貝,不做編解碼。
vn: v 代表視訊,n 代表 no 也就是無視訊的意思。
抽取視訊流
ffmpeg -i input.mp4 -vcodec copy -an out.h264
vcodec: 指定視訊編碼器,copy 指明只拷貝,不做編解碼。
an: a 代表視訊,n 代表 no 也就是無音訊的意思。
轉格式
ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv
上面的命令表式的是音訊、視訊都直接 copy,只是將 mp4 的封裝格式轉成了flv。
音視訊合併
ffmpeg -i out.h264 -i out.aac -vcodec copy -acodec copy out.mp4