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
posted @ 2024-02-12 14:48  dongye95  阅读(135)  评论(0编辑  收藏  举报