概述

FFmpeg Windows 设备操作 Windows 采集设备的主要方式是 dshow vfwcap gdigrab 其中

  • dshow 可以用来抓 取摄像头、采集卡、麦克风等,- vfwcap 主要用来采集摄像头类设备,- gdigrab 则是抓取 Windows 窗口程序

FFmpeg 使用 dshow 采集音视频设备

使用 dshow 枚举设备

ffmpeg -f dshow -list_devices true -i dymmy

输出

[dshow @ 000002622302e340] DirectShow video devices (some may be both video and audio devices)
[dshow @ 000002622302e340]  "Altair USB2.0 Camera"
[dshow @ 000002622302e340]     Alternative name "@device_pnp_\\?\usb#vid_0ac8&pid_3450&mi_00#6&3b01315a&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"
[dshow @ 000002622302e340] DirectShow audio devices

``
使用 dshow 展示摄像头, 摄像头的参数为 video=“摄像头名称”

ffplay -f dshow  -i video="Altair USB2.0 Camera"

``
获得摄像头支持的分辨率

ffmpeg -list_options true -f dshow -i video="Altair USB2.0 Camera"

输出

[dshow @ 000001b88b90e380] DirectShow video device options (from video devices)
[dshow @ 000001b88b90e380]  Pin "捕获" (alternative pin name "0")
[dshow @ 000001b88b90e380]   pixel_format=yuyv422  min s=640x480 fps=15 max s=640x480 fps=30
[dshow @ 000001b88b90e380]   pixel_format=yuyv422  min s=640x480 fps=15 max s=640x480 fps=30
[dshow @ 000001b88b90e380]   pixel_format=yuyv422  min s=352x288 fps=15 max s=352x288 fps=30
[dshow @ 000001b88b90e380]   pixel_format=yuyv422  min s=352x288 fps=15 max s=352x288 fps=30
[dshow @ 000001b88b90e380]   pixel_format=yuyv422  min s=320x240 fps=30 max s=320x240 fps=60.0002
[dshow @ 000001b88b90e380]   pixel_format=yuyv422  min s=320x240 fps=30 max s=320x240 fps=60.0002
[dshow @ 000001b88b90e380]   pixel_format=yuyv422  min s=176x144 fps=30 max s=176x144 fps=60.0002
[dshow @ 000001b88b90e380]   pixel_format=yuyv422  min s=176x144 fps=30 max s=176x144 fps=60.0002
[dshow @ 000001b88b90e380]   pixel_format=yuyv422  min s=160x120 fps=30 max s=160x120 fps=60.0002
[dshow @ 000001b88b90e380]   pixel_format=yuyv422  min s=160x120 fps=30 max s=160x120 fps=60.0002

可以加上分辨率的参数 -video_size

ffplay -f dshow -video_size 640x480  -i video="Altair USB2.0 Camera"

FFmpeg 使用 vfwcap 采集视频设备

vfwcap 主要支持两个参数 video_size framerate ,分别指示采集图像的大小和帧率
使用 vfwcap 枚举支持采集的设备

ffmpeg -f vfwcap -i list

输出

[vfwcap @ 0000025a6d60d080] Driver 0
[vfwcap @ 0000025a6d60d080]  Microsoft WDM Image Capture (Win32)
[vfwcap @ 0000025a6d60d080]  Version:  10.0.17134.1
list: I/O error

使用 vfwcap 生成 MP4 文件

ffmpeg -f vfwcap -i 0 -r 25 -vcodec libx264 out.mp4

我们通过 -i 指定了待录像的摄像头 索引号,-r 则指定了 需要录像 的帧, -vcodec 指定了录像视频的编码格式,输出 out.mp4

FFmpeg 使用 gdigrab 采集窗口

Windows 平台, FFmpeg 支持采集基于 gdi 的屏幕采集设备,这个设备同时支持采 集显示器的某 块区域, gdigrab 支持的主要参数如表 7-5 所示
4438f7c7f5f2079933d3db9b77bfe333.png

gdigrab 的输入主要有两种方式:

  1. desktop title = window_title ,其中 desktop 代表采 集整个桌面,1. ttitle = window title 则是采集标题为 window title 的窗口 使用 gdigrab 采集整个桌面
ffmpeg -f gdigrab -framerate 6 -i desktop screen.mp4

使用gdigrab采集某个窗口

ffmpeg -f gdigrab -framerate 6 -i title="TTR-TEST: ~/DetectAV/src/LiveDetect - Xshell 6" gdi.mp4

该窗口是我用spy++抓的

--完--