ffmpeg摄像头录制+屏幕录制问题
确保权限
系统该打开的权限都打开
设备枚举
查看设备列表
在这个命令中,-devices选项用于列出可用的输入和输出设备。其中,D代表输入设备,E代表输出设备。D通常表示输入设备,如摄像头或麦克风,E通常表示输出设备,如显示器或扬声器。
$ ffmpeg -hide_banner -devices
Devices:
D. = Demuxing supported
.E = Muxing supported
--
D avfoundation AVFoundation input device
D lavfi Libavfilter virtual input device
E sdl,sdl2 SDL2 output device
可以看到输入设备有:avfoundation,lavfi
输出设备有:sdl
设备采集举例:
在这个命令中,-f avfoundation 表示使用 AVFoundation 框架作为 ffmpeg 的输入设备。AVFoundation 是 macOS 和 iOS 平台上的一个多媒体框架,用于捕获、处理和输出音频视频数据。在这里,-f avfoundation 表示使用 AVFoundation 框架来作为 ffmpeg 的输入设备,这通常用于从摄像头、屏幕等设备中捕获音视频数据。
$ ffmpeg -f avfoundation -list_devices true -i " "
看到了 如下设备
[AVFoundation indev @ 0x14e605840] AVFoundation video devices:
[AVFoundation indev @ 0x14e605840] [0] FaceTime高清摄像头
[AVFoundation indev @ 0x14e605840] [1] Capture screen 0
[AVFoundation indev @ 0x14e605840] AVFoundation audio devices:
[AVFoundation indev @ 0x14e605840] [0] Cast Audio
[AVFoundation indev @ 0x14e605840] [1] MacBook Pro麦克风
[AVFoundation indev @ 0x14e605840] [2] Cast Audio (UI Sounds)
[AVFoundation indev @ 0x14e605840] [3] HIKAudioDevice 2ch
[AVFoundation indev @ 0x14e605840] [4] Aunboxsoft Audio Device
采集摄像头
采集内置摄像头
$ ffmpeg -f avfoundation -i "FaceTime高清摄像头" out.mp4
//或者使用索引号 0 来代替摄像头设备名称
ffmpeg -f avfoundation -i 0 out.mp4
[avfoundation @ 0x7fbf16808200] Selected framerate (29.970030) is not supported by the device.
[avfoundation @ 0x7fbf16808200] Supported modes:
[avfoundation @ 0x7fbf16808200] 640x480@[30.000030 30.000030]fps
[avfoundation @ 0x7fbf16808200] 640x480@[29.000049 29.000049]fps
[avfoundation @ 0x7fbf16808200] 640x480@[28.000067 28.000067]fps
[avfoundation @ 0x7fbf16808200] 640x480@[27.000027 27.000027]fps
[avfoundation @ 0x7fbf16808200] 640x480@[26.000026 26.000026]fps
[avfoundation @ 0x7fbf16808200] 640x480@[25.000000 25.000000]fps
日志告诉我们 *Selected framerate (29.970030) is not supported by the device*
,默认的framerate 不被设备支持,下面也给出了支持的分辨率和 framerate
所以我们要改一下命令,选取第一个吧 *640x480@[30.000030 30.000030]fps*
ffmpeg -f avfoundation -video_size 640x480 -framerate 30 -i "FaceTime高清摄像头" out.mp4
把摄像头和麦克风的数据存到一个文件里,使用命令:
ffmpeg -f avfoundation -video_size 640x480 -framerate 30 -video_device_index 0 -i ":0" out.mp4
//或者
ffmpeg -f avfoundation -video_size 640x480 -framerate 30 -i "0:0" out.mp4
!!!!!录制完成不要 control + c结束,要在终端使用q正常结束!!!!!不然可能造成视频无法正常结束,是黑屏
播放录制的视频数据
ffplay out.mp4
采集桌面
ffmpeg -f avfoundation -i "Capture screen 0" -r:v 30 screen.mp4
//或者使用索引号1 来代替屏幕设备名称
ffmpeg -f avfoundation -i 1 -r:v 30 screen.mp4
播放采集到的桌面数据
ffplay screen.mp4
参数"Capture screen 0"指定了输入设备,我们也可以将桌面图像带上鼠标一起录制下来,加上参数-capture_cursor
ffmpeg -f avfoundation -capture-cursor 1 -i "Capture screen 0" -r:v 30 screen.mp4