## The CRF Parameter: Quality Control
**CRF** (Constant Rate Factor) controls quality/size balance:
| CRF | Quality | Use |
|-----|---------|-----|
| 18-20 | Visually lossless | High-quality archive |
| **23** | **Standard (default)** | **General use** |
| 28 | Acceptable | Light web/streaming |
| 35-40 | Low | Quick previews |
## Basic H.264 Compression
```bash
# Standard (CRF 23)
ffmpeg -i original.mp4 -c:v libx264 -crf 23 -preset medium -c:a copy compressed.mp4
# High quality (CRF 18)
ffmpeg -i original.mp4 -c:v libx264 -crf 18 -preset slow -c:a copy hq.mp4
# Re-encode audio
ffmpeg -i original.mkv -c:v libx264 -crf 23 -preset medium \
-c:a aac -b:a 128k compressed.mp4
```
### Presets (speed vs compression)
`ultrafast → fast → medium → slow → veryslow`
- **medium:** recommended balance.
- **slow/veryslow:** better compression, slower.
## H.265/HEVC (50% More Efficient)
```bash
ffmpeg -i original.mp4 -c:v libx265 -crf 28 -preset medium \
-c:a aac -b:a 128k -tag:v hvc1 compressed_h265.mp4
```
## 2-Pass Encoding (Exact File Size)
```bash
# First pass (analysis)
ffmpeg -i original.mp4 -c:v libx264 -b:v 6500k -pass 1 -an -f null /dev/null
# Second pass (final encode)
ffmpeg -i original.mp4 -c:v libx264 -b:v 6500k -pass 2 \
-c:a aac -b:a 128k compressed_2pass.mp4
```
## Downscale Resolution
```bash
# 4K to 1080p
ffmpeg -i 4k.mp4 -vf "scale=1920:1080:flags=lanczos" \
-c:v libx264 -crf 20 -preset slow -c:a aac -b:a 192k 1080p.mp4
# To 720p
ffmpeg -i original.mp4 -vf "scale=1280:720:flags=lanczos" \
-c:v libx264 -crf 22 -preset medium -c:a aac -b:a 128k 720p.mp4
# Maintain aspect ratio
ffmpeg -i original.mp4 -vf "scale=1280:-2:flags=lanczos" \
-c:v libx264 -crf 22 1280px.mp4
```
## GPU Acceleration (NVIDIA NVENC)
```bash
ffmpeg -i original.mp4 -c:v h264_nvenc -cq 23 -preset p4 \
-c:a aac -b:a 128k compressed_gpu.mp4
ffmpeg -i original.mp4 -c:v hevc_nvenc -cq 28 -preset p4 \
-c:a aac -b:a 128k h265_gpu.mp4
```
## Batch Processing
```bash
for f in *.mp4; do
out="compressed_${f}"
ffmpeg -i "$f" -c:v libx264 -crf 23 -preset medium \
-c:a aac -b:a 128k "$out"
done
```
## Codec Comparison
| Codec | Efficiency | Compatibility |
|-------|-----------|--------------|
| H.264 | Baseline | ✅ Universal |
| **H.265** | **~50% better** | High |
| VP9 | ~40% better | High (browsers) |
| AV1 | ~60% better | Growing |
## Conclusion
No visible quality loss: **H.264 CRF 23** (universal standard). Halve the file size: **H.265 CRF 28**. Exact target size: **2-pass encoding**. Maximum speed: **GPU acceleration** (NVENC/QSV/VideoToolbox).
Guide