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

  1. Choose appropriate preset: Use ultrafast or veryfast for real-time recording
  2. Use hardware acceleration: Use hardware encoding when supported
  3. Set reasonable resolution: Choose based on network bandwidth and storage space
  4. Monitor resource usage: Pay attention to CPU and memory usage
  5. 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.).

标签:FFmpeg