Video encoding can be slow and resource-intensive. These tips will help you optimize FFmpeg for faster processing.
1. Choose the Right Preset
Presets balance speed vs compression efficiency:
# Faster encoding (larger files) ffmpeg -i input.mp4 -c:v libx264 -preset ultrafast output.mp4 # Balanced (default) ffmpeg -i input.mp4 -c:v libx264 -preset medium output.mp4 # Slower encoding (smaller files) ffmpeg -i input.mp4 -c:v libx264 -preset slow output.mp4
Available presets: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow
2. Use CRF for Quality Control
CRF (Constant Rate Factor) provides consistent quality:
- 18: Visually lossless
- 23: Default, good balance
- 28: Smaller files, acceptable quality
ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4
3. Use Multiple Threads
# Use all CPU cores ffmpeg -i input.mp4 -threads 0 -c:v libx264 output.mp4 # Specify thread count ffmpeg -i input.mp4 -threads 4 -c:v libx264 output.mp4
4. Hardware Acceleration
On FFPower plans with GPU support:
# NVIDIA NVENC (much faster) ffmpeg -i input.mp4 -c:v h264_nvenc -preset fast output.mp4 # Intel Quick Sync ffmpeg -i input.mp4 -c:v h264_qsv output.mp4
5. Avoid Re-encoding When Possible
# Just copy streams (instant) ffmpeg -i input.mkv -c copy output.mp4
6. Use Two-Pass for Better Quality at Target Bitrate
# Pass 1 ffmpeg -i input.mp4 -c:v libx264 -b:v 2000k -pass 1 -f null /dev/null # Pass 2 ffmpeg -i input.mp4 -c:v libx264 -b:v 2000k -pass 2 output.mp4
7. Process in RAM (tmpfs)
# Mount tmpfs sudo mount -t tmpfs -o size=4G tmpfs /mnt/ramdisk # Process there ffmpeg -i input.mp4 -c:v libx264 /mnt/ramdisk/output.mp4
Quick Reference
| Goal | Setting |
|---|---|
| Fastest encoding | -preset ultrafast -crf 28 |
| Best quality | -preset veryslow -crf 18 |
| Balanced | -preset medium -crf 23 |
| Small file size | -c:v libx265 -crf 28 |