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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2022-02-12 Java基础系列(17)- 反射