6月1日 23:57

FFmpeg 怎么录屏和录制摄像头?macOS/Linux/Windows 命令详解

FFmpeg 可以直接从屏幕或摄像头捕获视频,不需要额外安装录屏软件。命令行录制的好处是可以精确控制编码参数、方便脚本化、资源占用低。坏处是参数复杂,初次配置容易踩坑。

macOS 录屏

macOS 用 avfoundation 设备采集:

bash
# 列出可用设备(先看看屏幕和摄像头编号) ffmpeg -f avfoundation -list_devices true -i "" # 录制整个屏幕(假设屏幕编号是 1) ffmpeg -f avfoundation -i "1" -r 30 -c:v libx264 -preset ultrafast -crf 23 output.mp4 # 录制屏幕 + 系统音频 ffmpeg -f avfoundation -i "1:0" -r 30 -c:v libx264 -preset ultrafast -crf 23 -c:a aac output.mp4

-preset ultrafast 是录屏必备——实时编码用 slow 的话 CPU 扛不住,画面会卡。录完之后如果觉得文件太大,可以再用 slow preset 重新转码一遍。

Linux 录屏

Linux 用 x11grab 采集 X11 桌面:

bash
# 录制 1080p 屏幕 ffmpeg -f x11grab -video_size 1920x1080 -framerate 30 -i :0.0 -c:v libx264 -preset ultrafast -crf 23 output.mp4 # 录制指定区域(从坐标 100,100 开始,宽 800 高 600) ffmpeg -f x11grab -video_size 800x600 -framerate 30 -i :0.0+100,100 -c:v libx264 -preset ultrafast -crf 23 output.mp4 # Wayland 用户用 wf-recorder 更方便,ffmpeg 对 Wayland 支持不完善

:0.0 是 DISPLAY 环境变量的值,多显示器时可能需要调整。Wayland 下 x11grab 可能不工作,需要装 xdotool 或者换用 wf-recorder。

Windows 录屏

Windows 用 gdigrab 或 dshow:

bash
# gdigrab 录制整个桌面 ffmpeg -f gdigrab -framerate 30 -i desktop -c:v libx264 -preset ultrafast -crf 23 output.mp4 # 录制指定窗口 ffmpeg -f gdigrab -framerate 30 -i title="Window Title" -c:v libx264 -preset ultrafast -crf 23 output.mp4

Windows 10+ 也可以用 -f dshow 配合摄像头设备名录制。

摄像头录制

bash
# macOS:列出设备后用摄像头编号(通常是 0) ffmpeg -f avfoundation -i "0" -r 30 -c:v libx264 -preset ultrafast -crf 23 output.mp4 # Linux:用 v4l2 ffmpeg -f v4l2 -video_size 640x480 -framerate 30 -i /dev/video0 -c:v libx264 -preset ultrafast -crf 23 output.mp4 # 摄像头 + 麦克风 ffmpeg -f avfoundation -i "0:0" -r 30 -c:v libx264 -preset ultrafast -crf 23 -c:a aac -b:a 128k output.mp4

摄像头编号需要先 -list_devices true 查一下,不同机器编号可能不同。

录屏实战技巧

1. 录制时显示光标:默认录屏可能看不到鼠标光标。macOS 下加 -capture_cursor 1,Linux 下 x11grab 默认会包含光标。

2. 控制录制时长-t 60 只录 60 秒。方便做定时录制,不用手动按 Ctrl+C。

3. 停止录制:按 Ctrl+C。有时候 ffmpeg 不会正常写入 MP4 尾部,导致文件打不开。解决办法:改用 MKV 容器(output.mkv),MKV 即使没正常关闭也能播放;或者事后修复 MP4:

bash
ffmpeg -i broken.mp4 -c copy fixed.mp4

4. 同时录屏和摄像头画中画:高级场景,用 overlay 滤镜把摄像头画面叠到屏幕录制上。这比纯录屏复杂很多,如果需要画中画效果,OBS 可能更合适。

标签:FFmpeg