6月1日 23:57
How to use FFmpeg for screen recording and camera capture?
FFmpeg can not only process existing video files but also capture video and audio from various devices, enabling recording functionality.
Screen Recording
macOS Screen Recording
bash# Record entire screen ffmpeg -f avfoundation -i "1" -r 30 -c:v libx264 -preset ultrafast -crf 23 output.mp4 # Record specific area ffmpeg -f avfoundation -i "1" -r 30 -c:v libx264 -preset ultrafast -crf 23 -vf "crop=1280:720:0:0" output.mp4 # Record screen and audio ffmpeg -f avfoundation -i "1:0" -r 30 -c:v libx264 -preset ultrafast -crf 23 -c:a aac -b:a 128k output.mp4
Linux Screen Recording
bash# Record using x11grab ffmpeg -f x11grab -video_size 1920x1080 -framerate 30 -i :0.0 -c:v libx264 -preset ultrafast -crf 23 output.mp4 # Record specific window ffmpeg -f x11grab -video_size 800x600 -framerate 30 -i :0.0+100,100 -c:v libx264 -preset ultrafast -crf 23 output.mp4
Windows Screen Recording
bash# Record entire screen using gdigrab ffmpeg -f gdigrab -framerate 30 -i desktop -c:v libx264 -preset ultrafast -crf 23 output.mp4 # Record specific window ffmpeg -f gdigrab -framerate 30 -i title="Window Title" -c:v libx264 -preset ultrafast -crf 23 output.mp4
Camera Recording
macOS Camera Recording
bash# List available devices ffmpeg -f avfoundation -list_devices true -i "" # Record camera ffmpeg -f avfoundation -i "0" -r 30 -c:v libx264 -preset ultrafast -crf 23 output.mp4 # Record camera and microphone ffmpeg -f avfoundation -i "0:0" -r 30 -c:v libx264 -preset ultrafast -crf 23 -c:a aac -b:a 128k output.mp4
Linux Camera Recording
bash# Record using v4l2 ffmpeg -f v4l2 -video_size 640x480 -framerate 30 -i /dev/video0 -c:v libx264 -preset ultrafast -crf 23 output.mp4 # Record camera and audio 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 Camera Recording
bash# Record using dshow ffmpeg -f dshow -video_size 640x480 -framerate 30 -i video="Camera Name" -c:v libx264 -preset ultrafast -crf 23 output.mp4 # Record camera and microphone 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
Audio Recording
macOS Audio Recording
bash# Record system audio ffmpeg -f avfoundation -i ":0" -c:a aac -b:a 128k output.aac # Record microphone ffmpeg -f avfoundation -i "0:0" -c:a aac -b:a 128k output.aac
Linux Audio Recording
bash# Record using alsa ffmpeg -f alsa -i hw:0 -c:a aac -b:a 128k output.aac # Record using pulseaudio ffmpeg -f pulse -i default -c:a aac -b:a 128k output.aac
Windows Audio Recording
bash# Record audio using dshow ffmpeg -f dshow -i audio="Microphone Name" -c:a aac -b:a 128k output.aac
Real-time Streaming Recording
Stream to RTMP Server
bash# Screen recording and streaming ffmpeg -f avfoundation -i "1" -r 30 -c:v libx264 -preset ultrafast -b:v 2000k -f flv rtmp://server/live/stream_key # Camera recording and streaming 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
Stream to RTSP Server
bash# Stream to RTSP ffmpeg -f avfoundation -i "1" -r 30 -c:v libx264 -preset ultrafast -f rtsp rtsp://server/live/stream
Recording Parameter Optimization
Reduce Latency
bash# Use ultrafast preset ffmpeg -f avfoundation -i "1" -r 30 -c:v libx264 -preset ultrafast -tune zerolatency -crf 23 output.mp4 # Use hardware acceleration ffmpeg -f avfoundation -i "1" -r 30 -c:v h264_videotoolbox -b:v 2000k output.mp4
Improve Quality
bash# Use higher quality encoding parameters ffmpeg -f avfoundation -i "1" -r 30 -c:v libx264 -preset medium -crf 18 output.mp4 # Use higher bitrate ffmpeg -f avfoundation -i "1" -r 30 -c:v libx264 -preset medium -b:v 5000k output.mp4
Reduce File Size
bash# Use higher CRF value ffmpeg -f avfoundation -i "1" -r 30 -c:v libx264 -preset medium -crf 28 output.mp4 # Lower resolution ffmpeg -f avfoundation -i "1" -r 30 -vf scale=1280:720 -c:v libx264 -preset medium -crf 23 output.mp4
Advanced Recording Features
Timed Recording
bash# Record for 60 seconds ffmpeg -f avfoundation -i "1" -r 30 -t 60 -c:v libx264 -preset ultrafast -crf 23 output.mp4 # Record until specified time ffmpeg -f avfoundation -i "1" -r 30 -to 00:01:00 -c:v libx264 -preset ultrafast -crf 23 output.mp4
Segmented Recording
bash# Generate new file every 60 seconds ffmpeg -f avfoundation -i "1" -r 30 -c:v libx264 -preset ultrafast -crf 23 -f segment -segment_time 60 output_%03d.mp4
Add Watermark
bash# Add watermark while recording ffmpeg -f avfoundation -i "1" -i watermark.png -filter_complex "overlay=10:10" -r 30 -c:v libx264 -preset ultrafast -crf 23 output.mp4
Device List Query
Query Available Devices
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
Recording Best Practices
- Choose appropriate preset: Use ultrafast or veryfast for real-time recording
- Use hardware acceleration: Use hardware encoding when supported
- Set reasonable resolution: Choose based on network bandwidth and storage space
- Monitor resource usage: Pay attention to CPU and memory usage
- Test recording effect: Test before formal recording
When recording, you need to choose appropriate parameter combinations based on specific application scenarios (such as live streaming, recording, monitoring, etc.).