Ahosting Logo
Knowledge Base

FFmpeg Performance Optimization Tips

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