1. 程式人生 > >mac ffmpeg 中的錄製命令和分解與複用命令

mac ffmpeg 中的錄製命令和分解與複用命令

mac中螢幕錄製命令:

  1. 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 後面數值的來源。

  2. ffmpeg -framerate 30 -f avfoundation -i 0 out.mp4
    -framerate 限制視訊的採集幀率。這個必須要根據提示要求進行設定,如果不設定就會報錯。
    -f 指定使用 avfoundation 採集資料。
    -i 指定視訊裝置的索引號。
    播放命令:
    ffplay out.mp4

mac中聲音錄製命令:

  1. ffmpeg -f avfoundation -i :0 out.wav
    -f 指定使用 avfoundation 採集資料。
    -i 指定從哪兒採集資料,它是一個檔案索引號。
    : 冒號前面的是視訊採集索引號,冒號後面是音訊採集索引號
    播放聲音的命令:
    ffplay out.wav

  2. 錄製音訊裸資料
    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庫,需要安裝該庫:

  1. git clone git://git.videolan.org/x264.git

  2. cd x264

  3. ./configure --enable-static --enable-share --disable-asm

  4. make

  5. sudo make install

問題2

Unknown encoder ‘libfdk_aac’
缺少fdk_aac庫需要安裝該庫:
1)git clone https://github.com/mstorsjo/fdk-aac.git

  1. ./autogen.sh

  2. ./configure

  3. make

  4. make install

安裝完libx264和fdk-aac,需要重新編譯安裝ffmpeg

  1. 配置ffmpeg時,加上x264和fdk-aac,如:
    ./configure --enable-version3 --enable-libfdk-aac --enable-nonfree --enable-gpl --enable-libx264

  2. make clean

  3. make

  4. 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