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
录制最佳实践
- 选择合适的 preset:实时录制使用 ultrafast 或 veryfast
- 使用硬件加速:在支持的情况下使用硬件编码
- 合理设置分辨率:根据网络带宽和存储空间选择
- 监控资源使用:注意 CPU 和内存占用
- 测试录制效果:在正式录制前进行测试
录制时需要根据具体的应用场景(如直播、录播、监控等)选择合适的参数组合。