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

How to use FFmpeg for screen recording and camera capture?

2月18日 11:02

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