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.).