乐闻世界logo
搜索文章和话题

如何使用 FFmpeg 进行屏幕录制和摄像头捕获?

2月18日 11:02

FFmpeg 不仅可以处理已有的视频文件,还可以从各种设备捕获视频和音频,实现录制功能。

屏幕录制

macOS 屏幕录制

bash
# 录制整个屏幕 ffmpeg -f avfoundation -i "1" -r 30 -c:v libx264 -preset ultrafast -crf 23 output.mp4 # 录制指定区域 ffmpeg -f avfoundation -i "1" -r 30 -c:v libx264 -preset ultrafast -crf 23 -vf "crop=1280:720:0:0" output.mp4 # 录制屏幕和音频 ffmpeg -f avfoundation -i "1:0" -r 30 -c:v libx264 -preset ultrafast -crf 23 -c:a aac -b:a 128k output.mp4

Linux 屏幕录制

bash
# 使用 x11grab 录制 ffmpeg -f x11grab -video_size 1920x1080 -framerate 30 -i :0.0 -c:v libx264 -preset ultrafast -crf 23 output.mp4 # 录制指定窗口 ffmpeg -f x11grab -video_size 800x600 -framerate 30 -i :0.0+100,100 -c:v libx264 -preset ultrafast -crf 23 output.mp4

Windows 屏幕录制

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

摄像头录制

macOS 摄像头录制

bash
# 列出可用设备 ffmpeg -f avfoundation -list_devices true -i "" # 录制摄像头 ffmpeg -f avfoundation -i "0" -r 30 -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

Linux 摄像头录制

bash
# 使用 v4l2 录制 ffmpeg -f v4l2 -video_size 640x480 -framerate 30 -i /dev/video0 -c:v libx264 -preset ultrafast -crf 23 output.mp4 # 录制摄像头和音频 ffmpeg -f v4l2 -video_size 640x480 -framerate 30 -i /dev/video0 -f alsa -i hw:0 -c:v libx264 -preset ultrafast -crf 23 -c:a aac -b:a 128k output.mp4

Windows 摄像头录制

bash
# 使用 dshow 录制 ffmpeg -f dshow -video_size 640x480 -framerate 30 -i video="Camera Name" -c:v libx264 -preset ultrafast -crf 23 output.mp4 # 录制摄像头和麦克风 ffmpeg -f dshow -video_size 640x480 -framerate 30 -i video="Camera Name" -f dshow -i audio="Microphone Name" -c:v libx264 -preset ultrafast -crf 23 -c:a aac -b:a 128k output.mp4

音频录制

macOS 音频录制

bash
# 录制系统音频 ffmpeg -f avfoundation -i ":0" -c:a aac -b:a 128k output.aac # 录制麦克风 ffmpeg -f avfoundation -i "0:0" -c:a aac -b:a 128k output.aac

Linux 音频录制

bash
# 使用 alsa 录制 ffmpeg -f alsa -i hw:0 -c:a aac -b:a 128k output.aac # 使用 pulseaudio 录制 ffmpeg -f pulse -i default -c:a aac -b:a 128k output.aac

Windows 音频录制

bash
# 使用 dshow 录制音频 ffmpeg -f dshow -i audio="Microphone Name" -c:a aac -b:a 128k output.aac

实时推流录制

推流到 RTMP 服务器

bash
# 屏幕录制并推流 ffmpeg -f avfoundation -i "1" -r 30 -c:v libx264 -preset ultrafast -b:v 2000k -f flv rtmp://server/live/stream_key # 摄像头录制并推流 ffmpeg -f avfoundation -i "0:0" -r 30 -c:v libx264 -preset ultrafast -b:v 2000k -c:a aac -b:a 128k -f flv rtmp://server/live/stream_key

推流到 RTSP 服务器

bash
# 推流到 RTSP ffmpeg -f avfoundation -i "1" -r 30 -c:v libx264 -preset ultrafast -f rtsp rtsp://server/live/stream

录制参数优化

降低延迟

bash
# 使用 ultrafast preset ffmpeg -f avfoundation -i "1" -r 30 -c:v libx264 -preset ultrafast -tune zerolatency -crf 23 output.mp4 # 使用硬件加速 ffmpeg -f avfoundation -i "1" -r 30 -c:v h264_videotoolbox -b:v 2000k output.mp4

提高质量

bash
# 使用更高质量的编码参数 ffmpeg -f avfoundation -i "1" -r 30 -c:v libx264 -preset medium -crf 18 output.mp4 # 使用更高的比特率 ffmpeg -f avfoundation -i "1" -r 30 -c:v libx264 -preset medium -b:v 5000k output.mp4

减小文件大小

bash
# 使用更高的 CRF 值 ffmpeg -f avfoundation -i "1" -r 30 -c:v libx264 -preset medium -crf 28 output.mp4 # 降低分辨率 ffmpeg -f avfoundation -i "1" -r 30 -vf scale=1280:720 -c:v libx264 -preset medium -crf 23 output.mp4

高级录制功能

定时录制

bash
# 录制 60 秒 ffmpeg -f avfoundation -i "1" -r 30 -t 60 -c:v libx264 -preset ultrafast -crf 23 output.mp4 # 录制到指定时间 ffmpeg -f avfoundation -i "1" -r 30 -to 00:01:00 -c:v libx264 -preset ultrafast -crf 23 output.mp4

分段录制

bash
# 每 60 秒生成一个新文件 ffmpeg -f avfoundation -i "1" -r 30 -c:v libx264 -preset ultrafast -crf 23 -f segment -segment_time 60 output_%03d.mp4

添加水印

bash
# 录制时添加水印 ffmpeg -f avfoundation -i "1" -i watermark.png -filter_complex "overlay=10:10" -r 30 -c:v libx264 -preset ultrafast -crf 23 output.mp4

设备列表查询

查询可用设备

bash
# macOS ffmpeg -f avfoundation -list_devices true -i "" # Linux v4l2-ctl --list-devices ffmpeg -f v4l2 -list_formats all -i /dev/video0 # Windows ffmpeg -f dshow -list_devices true -i dummy

录制最佳实践

  1. 选择合适的 preset:实时录制使用 ultrafast 或 veryfast
  2. 使用硬件加速:在支持的情况下使用硬件编码
  3. 合理设置分辨率:根据网络带宽和存储空间选择
  4. 监控资源使用:注意 CPU 和内存占用
  5. 测试录制效果:在正式录制前进行测试

录制时需要根据具体的应用场景(如直播、录播、监控等)选择合适的参数组合。

标签:FFmpeg