采集屏幕、摄像头与麦克风
本教程共 32 篇 · 第 30 篇 · 更新于 2026-08-09 · 约 5 分钟阅读
本节目标:在三大系统上用对应设备采集屏幕、摄像头和麦克风;会先列出设备再录制;知道怎么配硬编降低 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。