首页 / FFmpeg 入门教程 / 采集屏幕、摄像头与麦克风

FFmpeg 入门教程

采集屏幕、摄像头与麦克风

本教程共 32 篇 · 第 30 篇 · 更新于 2026-08-09 · 约 5 分钟阅读

FFmpeg采集dshowgdigrabavfoundationx11grab屏幕录制

本节目标:在三大系统上用对应设备采集屏幕、摄像头和麦克风;会先列出设备再录制;知道怎么配硬编降低 CPU 占用。

FFmpeg 不只处理文件,也能直接采集设备输入:录屏、录摄像头、录麦克风,甚至同步录制。不同系统的采集 API 不一样,这章按系统讲。

一、采集前先列设备

录制前最重要的一步:先列出本机有哪些设备、名字是什么。设备名写错是最常见的报错原因。

Windows:dshow

ffmpeg -list_devices true -f dshow -i dummy

会输出类似:

[dshow @ ...] "USB Camera"             (video)
[dshow @ ...] "Microphone (Realtek)"   (audio)

记下设备名字,后面命令要用引号包住这个名字。

macOS:avfoundation

ffmpeg -f avfoundation -list_devices true -i ""

输出带索引,屏幕和摄像头都在里面,用 [屏幕索引]:[音频索引] 引用。

Linux:v4l2 / ALSA

v4l2-ctl --list-devices              # 视频设备
arecord -l                           # 音频设备

摄像头通常是 /dev/video0,麦克风用 hw:0 或 PulseAudio 的 default

二、Windows 采集

1. 录屏幕

Windows 有三种方式。

gdigrab(最省事,内置)

ffmpeg -f gdigrab -framerate 30 -i desktop output.mp4
  • -i desktop 抓整个桌面
  • 录某个窗口:-i title=计算器
  • 录区域:-offset_x 100 -offset_y 100 -video_size 1280x720 -i desktop
  • -show_region 1 会在屏幕上画框标示录制区域

gdigrab 兼容好、无需装驱动,但抓不到硬件光标、性能一般。

ddagrab(Windows 8+,GPU 加速)

通过 Desktop Duplication API 在 GPU 上抓帧,性能好,可直接喂给硬编码器:

ffmpeg -init_hw_device d3d11va -filter_complex ddagrab=0 -c:v h264_nvenc -cq 20 output.mp4

ddagrab=0 里的 0 是显示器索引。它输出 D3D11 硬件帧,配 NVENC/QSV 硬编几乎不占 CPU。

gfxcapture(Win10+,最新)

基于 Windows.Graphics.Capture,能抓被遮挡的窗口,输出硬件帧:

ffmpeg -filter_complex gfxcapture=window_title='记事本',hwdownload,format=bgra,format=yuv420p -c:v libx264 -crf 18 output.mp4

需要稳定帧率时在后面加 fps=30

2. 录摄像头和麦克风

用 dshow,视频和音频是两个输入:

ffmpeg -f dshow -i video="USB Camera" -f dshow -i audio="Microphone (Realtek)" output.mp4

可以合在一个 -i 里:

ffmpeg -f dshow -i video="USB Camera":audio="Microphone (Realtek)" output.mp4

指定分辨率和帧率:

ffmpeg -f dshow -framerate 30 -video_size 1280x720 -i video="USB Camera":audio="Microphone (Realtek)" output.mp4

3. 同时录屏幕和麦克风

ffmpeg -f gdigrab -framerate 30 -i desktop -f dshow -i audio="Microphone" output.mp4

gdigrab 抓屏幕,dshow 抓麦克风,自动合到一个文件。

4. 只录系统声音(扬声器输出)

dshow 默认只能录麦克风。要录电脑播放的声音,需要在 Windows 声音设置里启用”立体声混音”(Stereo Mix),然后:

ffmpeg -f dshow -i audio="Stereo Mix" output.wav

部分声卡不支持立体声混音,可用虚拟音频设备(如 VB-Cable)替代。

三、macOS 采集

macOS 用 avfoundation,屏幕、摄像头、麦克风统一管理。

ffmpeg -f avfoundation -i "1:0" output.mkv

"1:0" 表示屏幕索引 1、音频索引 0。从 -list_devices 的输出里挑。

ffmpeg -f avfoundation -i "0:" -c:v h264_videotoolbox output.mp4    # 只录摄像头/屏幕
ffmpeg -f avfoundation -i ":0" output.m4a                          # 只录麦克风

macOS 首次录制会弹出系统权限请求,需要允许终端/FFmpeg 访问屏幕录制和麦克风。

四、Linux 采集

录屏幕:x11grab

ffmpeg -video_size 1920x1080 -framerate 25 -f x11grab -i :0.0 output.mp4

:0.0 是 X11 显示号。从 (100,200) 开始抓 1024×768:

ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 output.mp4

录麦克风:ALSA 或 PulseAudio

ffmpeg -f alsa -ac 2 -i hw:0 output.mp4                 # ALSA
ffmpeg -f pulse -ac 2 -i default output.mp4             # PulseAudio

摄像头:v4l2

ffmpeg -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video0 output.mp4

屏麦同步录制

ffmpeg -video_size 1920x1080 -framerate 25 -f x11grab -i :0.0 \
  -f pulse -ac 2 -i default output.mkv

五、降低录制的 CPU 占用

录屏最忌讳的就是卡。纯软件 x264 录 1080p30 在弱机器上可能掉帧,两个办法:

1. 用快 preset + 低 CRF 保画质

ffmpeg -f gdigrab -framerate 30 -i desktop \
  -c:v libx264 -crf 18 -preset ultrafast output.mp4

ultrafast 编码压力小,先保证不丢帧;录完后再用 slow preset 重压归档。

2. 用硬件编码

N 卡:

ffmpeg -f gdigrab -framerate 30 -i desktop -c:v h264_nvenc -cq 20 output.mp4

Intel(QSV)、AMD(AMF)、macOS(VideoToolbox)同理,第 31 章会细讲。硬件编码录屏几乎不占 CPU,是最推荐的方式。

3. 无损录制

追求完全不损失画质(比如要做后期):

ffmpeg -video_size 1920x1080 -framerate 30 -f x11grab -i :0.0 \
  -c:v libx264rgb -crf 0 -preset ultrafast output.mkv

-crf 0 是无损。文件很大,但 CPU 占用反而低(不用做复杂压缩),适合临时采集,事后再重压。

Tip

录制用 MKV 比 MP4 安全。MP4 写文件头在末尾,如果中途崩溃或断电,整个文件就废了;MKV 边录边写,崩了至少前面的能救回来。录完想给别人发,再无损转封装成 MP4:ffmpeg -i output.mkv -c copy output.mp4