在使用 FFmpeg 作為編碼器時,可以使用FFmpeg采集本地的音視頻采集設備的數據,然后進行編碼、封裝、傳輸等操作。
例如,我們可以采集攝像頭的圖像作為視頻,采集麥克風的數據作為音頻,然后對采集的音視頻數據進行編碼,最后將編碼后的數據封裝成多媒體文件或者作為音視頻流發送到服務器上(流媒體)。
出於硬件環境和篇幅的限制,本文主要講的時Mac平台下通過FFmpeg采集的方法和步驟。通常Mac上采集數據主要使用的是avfoundation進行采集。
一、Mac 下查看設備列表
FFmpeg可以直接從Mac系統的采集設備中采集攝像頭、桌面、麥克風等。在采集設備之前,我們需要知道當前系統都支持哪些設備。
在終端上輸入以下命令行,即可查看當前系統支持的設備基本信息:
ffmpeg -devices
輸出如下:
Devices: D. = Demuxing supported .E = Muxing supported -- D avfoundation AVFoundation input device D lavfi Libavfilter virtual input device
從輸出內容中可以看到,通過ffmpeg -devices查看的信息分為兩大部分:
- 解封裝或封裝的支持情況
- 設備列表
系統當前可以支持的設備具體如下:
- 輸出設備:avfoundation、lavfi
本文重點介紹設備avfoundation。下面我們先看一下avfoundation的參數。
在終端上輸入命令行,可以查看avfoundation的參數:
ffmpeg -h demuxer=avfoundation
輸出如下:
Demuxer avfoundation [AVFoundation input device]: AVFoundation input device AVOptions: -list_devices <int> .D...... list available devices (from 0 to 1) (default false) true .D...... false .D...... -video_device_index <int> .D...... select video device by index for devices with same name (starts at 0) (from -1 to INT_MAX) (default -1) -audio_device_index <int> .D...... select audio device by index for devices with same name (starts at 0) (from -1 to INT_MAX) (default -1) -pixel_format <pix_fmt> .D...... set pixel format (default yuv420p) -framerate <video_rate> .D...... set frame rate (default "ntsc") -video_size <image_size> .D...... set video size -capture_cursor <int> .D...... capture the screen cursor (from 0 to 1) (default 0) -capture_mouse_clicks <int> .D...... capture the screen mouse clicks (from 0 to 1) (default 0)
FFmpeg對avfoundation設備操作可以使用的參數已經列舉在上面了,主要涉及枚舉設備、音視頻設備編號、像素格式、幀率、圖像分辨率等,接下來,我們來講解一下這些參數使用的例子。
二、Mac 下查看采集設備列表
在使用avfoundation操作設備采集之前,需要枚舉avfoundation支持的輸入設備,可以通過以下命令行來進行查看:
ffmpeg -f avfoundation -list_devices true -i ""
執行命令后,輸入如下:
[AVFoundation input device @ 0x7feb49c04040] AVFoundation video devices: [AVFoundation input device @ 0x7feb49c04040] [0] FaceTime HD Camera [AVFoundation input device @ 0x7feb49c04040] [1] Capture screen 0 [AVFoundation input device @ 0x7feb49c04040] AVFoundation audio devices: [AVFoundation input device @ 0x7feb49c04040] [0] Built-in Microphone
從輸出的信息可以看到,當前系統包含了三個設備,分別是:
視頻輸入設備:
-
[0] FaceTime HD Camera -
[1] Capture screen 0
音頻輸入設備:
-
[0] Built-in Microphone
三、Mac 下采集設備
1、采集內置攝像頭
執行以下命令可以直接獲得攝像頭並將攝像頭內容錄制下來或者直播推出去,以下命令就是采集命令行:
ffmpeg -f avfoundation -s 1280x720 -r 30 -i 0 out.mp4
執行命令后,會生成out.mp4視頻文件,播放out.mp4就能看到FFmpeg從電腦攝像頭采集到的圖像:
ffplay out.mp4
2、采集Mac桌面
執行以下命令,就可以采集到桌面圖像:
ffmpeg -f avfoundation -i 1 -r 30 out.yuv
命令執行后,就會錄制桌面的畫面為out.yuv,然后我們播放以下,就可以看到錄制的效果了。
如果需要錄制下來鼠標,則可以修改命令,增加capture_cursor來指定:
ffmpeg -f avfoundation -capture_cursor 1 -i 1 -r 30 out.yuv
播放的時候可以使用以下類型的命令行,來檢測之前的錄制是否成功:
ffplay -s 3360x2100 -pix_fmt uyvy422 out.yuv
其中,-s的參數,需要根據自己的電腦的狀態來調整。-pix_fmt的參數,根據錄制時的格式輸出來調整。
3、采集麥克風
我們使用ffmpeg除了可以獲得頭像之外,還可以獲得音頻數據,命令如下:
ffmpeg -f avfoundation -i :0 out.wav
如果需要同時錄制音視頻,那么可以使用如下命令行:
ffmpeg -f avfoundation -video_device_index 0 -r 30 -s 1280x720 -i :0 out.mp4
注意:采集攝像頭或者桌面,只需要改一下index的值就可以。
