Hardware acceleration uses your GPU to transcode media, providing 10-20x faster performance compared to CPU-only encoding while significantly reducing CPU usage.
Supported Hardware Acceleration Types
Jellyfin supports multiple hardware acceleration platforms:
Intel Quick Sync Intel integrated graphics (6th gen+)
NVIDIA NVENC NVIDIA GPUs (GTX 900+ series)
AMD AMF AMD GPUs (GCN architecture+)
VA-API Linux video acceleration API
VideoToolbox Apple hardware (macOS/iOS)
Video4Linux V4L2 M2M (Raspberry Pi, etc.)
Rockchip MPP Rockchip SoC devices
Software CPU-only encoding (no GPU)
Hardware Acceleration Configuration
Enabling Hardware Acceleration
In encoding.xml:
< HardwareAccelerationType > qsv </ HardwareAccelerationType >
< EnableHardwareEncoding > true </ EnableHardwareEncoding >
Available types:
none - Software encoding only
qsv - Intel Quick Sync Video
nvenc - NVIDIA NVENC
amf - AMD Advanced Media Framework
vaapi - VA-API (Linux)
videotoolbox - Apple VideoToolbox
v4l2m2m - Video4Linux M2M
rkmpp - Rockchip Media Process Platform
Intel Quick Sync Video (QSV)
Requirements
Hardware Requirements
Intel CPU with integrated graphics (6th generation or newer recommended)
Intel Iris Xe or UHD Graphics
Compatible chipset with Quick Sync support
Driver Requirements
Linux: # Install Intel media drivers
sudo apt-get install intel-media-va-driver-non-free
Windows:
Install latest Intel graphics drivers from Intel’s website.
Device Permissions (Linux)
Add Jellyfin user to video and render groups: sudo usermod -aG video jellyfin
sudo usermod -aG render jellyfin
sudo systemctl restart jellyfin
QSV Configuration
< HardwareAccelerationType > qsv </ HardwareAccelerationType >
< EnableHardwareEncoding > true </ EnableHardwareEncoding >
< QsvDevice ></ QsvDevice >
< EnableIntelLowPowerH264HwEncoder > false </ EnableIntelLowPowerH264HwEncoder >
< EnableIntelLowPowerHevcHwEncoder > false </ EnableIntelLowPowerHevcHwEncoder >
Standard QSV
Low Power Mode
For most Intel GPUs (6th-11th gen): < HardwareAccelerationType > qsv </ HardwareAccelerationType >
< EnableIntelLowPowerH264HwEncoder > false </ EnableIntelLowPowerH264HwEncoder >
< EnableIntelLowPowerHevcHwEncoder > false </ EnableIntelLowPowerHevcHwEncoder >
For Intel Xe graphics (11th gen+): < HardwareAccelerationType > qsv </ HardwareAccelerationType >
< EnableIntelLowPowerH264HwEncoder > true </ EnableIntelLowPowerH264HwEncoder >
< EnableIntelLowPowerHevcHwEncoder > true </ EnableIntelLowPowerHevcHwEncoder >
Low power mode provides better efficiency on newer architectures.
Supported Codecs (QSV)
Codec Decode Encode Notes H.264 ✓ ✓ All QSV generations HEVC ✓ ✓ 6th gen+ VP9 ✓ ✗ 9th gen+ (decode only) AV1 ✓ ✓ 12th gen+ MPEG-2 ✓ ✓ All generations VC-1 ✓ ✗ Decode only
QSV Tone Mapping
< EnableVppTonemapping > true </ EnableVppTonemapping >
< VppTonemappingBrightness > 16 </ VppTonemappingBrightness >
< VppTonemappingContrast > 1 </ VppTonemappingContrast >
Intel VPP (Video Post Processing) provides hardware-accelerated HDR to SDR tone mapping on supported platforms.
NVIDIA NVENC
Requirements
Hardware Requirements
NVIDIA GPU with NVENC support:
GeForce GTX 900 series or newer
RTX series (best performance)
Quadro/Tesla professional GPUs
Driver Requirements
Linux: # Install NVIDIA drivers
sudo apt-get install nvidia-driver-535
# Verify installation
nvidia-smi
Windows:
Install latest GeForce or Studio drivers from NVIDIA’s website.
NVENC Session Limits
Consumer GPUs have encoding session limits:
GTX/RTX cards: 3 concurrent sessions (can be patched)
Quadro/Tesla: Unlimited sessions
Use
nvidia-patch to remove session limits on consumer cards.
NVENC Configuration
< HardwareAccelerationType > nvenc </ HardwareAccelerationType >
< EnableHardwareEncoding > true </ EnableHardwareEncoding >
< EnableEnhancedNvdecDecoder > true </ EnableEnhancedNvdecDecoder >
Enhanced NVDEC
< EnableEnhancedNvdecDecoder > true </ EnableEnhancedNvdecDecoder >
Enables enhanced NVDEC decoder for:
Dolby Vision to SDR tone mapping
Better HDR support
Improved compatibility
Supported Codecs (NVENC)
Codec Decode Encode Generation H.264 ✓ ✓ All NVENC HEVC ✓ ✓ Maxwell+ (GTX 900+) VP9 ✓ ✗ Pascal+ (GTX 10xx+) AV1 ✓ ✓ Ada Lovelace (RTX 40xx) MPEG-2 ✓ ✗ Decode only VC-1 ✓ ✗ Decode only
CUDA Tone Mapping
NVENC supports CUDA-accelerated tone mapping:
< EnableTonemapping > true </ EnableTonemapping >
< TonemappingAlgorithm > bt2390 </ TonemappingAlgorithm >
CUDA tone mapping requires:
FFmpeg built with CUDA support
Compatible NVIDIA GPU (Pascal or newer)
AMD AMF
Requirements
Hardware Requirements
AMD GPU with GCN architecture or newer:
Radeon RX 400 series or newer (recommended)
Radeon VII
RX 5000/6000/7000 series
Driver Requirements
Linux: # Install AMD drivers and VA-API
sudo apt-get install mesa-va-drivers
Windows:
Install AMD Adrenalin drivers from AMD’s website.
AMF Configuration
< HardwareAccelerationType > amf </ HardwareAccelerationType >
< EnableHardwareEncoding > true </ EnableHardwareEncoding >
Supported Codecs (AMF)
Codec Decode Encode Notes H.264 ✓ ✓ All GCN GPUs HEVC ✓ ✓ GCN 3.0+ AV1 ✓ ✓ RDNA 3 (RX 7000+) VP9 ✓ ✗ Decode only
On Linux, AMF uses VA-API as the backend. Consider using VA-API directly for better compatibility.
VA-API (Linux)
Requirements
Install VA-API Drivers
Intel
AMD
NVIDIA (Nouveau)
sudo apt-get install intel-media-va-driver-non-free
sudo apt-get install mesa-va-drivers
sudo apt-get install mesa-va-drivers
NVIDIA proprietary drivers don’t support VA-API. Use NVENC instead.
Verify VA-API
# Install vainfo utility
sudo apt-get install vainfo
# Check VA-API support
vainfo
Should show available profiles and entrypoints.
Device Permissions
# Check render device
ls -l /dev/dri/renderD128
# Add user to groups
sudo usermod -aG video jellyfin
sudo usermod -aG render jellyfin
sudo systemctl restart jellyfin
VA-API Configuration
< HardwareAccelerationType > vaapi </ HardwareAccelerationType >
< EnableHardwareEncoding > true </ EnableHardwareEncoding >
< VaapiDevice > /dev/dri/renderD128 </ VaapiDevice >
The default VA-API device is /dev/dri/renderD128, which works for most single-GPU systems.
Multiple GPUs
For systems with multiple GPUs:
# List render devices
ls -l /dev/dri/
# Output:
# renderD128 (usually Intel iGPU)
# renderD129 (usually discrete GPU)
Specify the desired device:
< VaapiDevice > /dev/dri/renderD129 </ VaapiDevice >
VA-API Tone Mapping
< EnableTonemapping > true </ EnableTonemapping >
< TonemappingAlgorithm > bt2390 </ TonemappingAlgorithm >
VA-API supports hardware tone mapping on Intel GPUs (9th gen+).
Requirements
macOS device with Apple Silicon or Intel CPU with integrated graphics
macOS 10.13 or newer
< HardwareAccelerationType > videotoolbox </ HardwareAccelerationType >
< EnableHardwareEncoding > true </ EnableHardwareEncoding >
< EnableVideoToolboxTonemapping > true </ EnableVideoToolboxTonemapping >
Codec Decode Encode Notes H.264 ✓ ✓ All devices HEVC ✓ ✓ A10+ / 6th gen Intel+ VP9 ✓ ✗ Decode only
Docker Configuration
Intel QSV (Docker)
docker-compose.yml
Docker Run
services :
jellyfin :
image : jellyfin/jellyfin:latest
devices :
- /dev/dri:/dev/dri
group_add :
- "109" # render group ID
volumes :
- /path/to/config:/config
- /path/to/media:/media
Find your render group ID with: getent group render | cut -d: -f3
NVIDIA (Docker)
docker-compose.yml
Docker Run
services :
jellyfin :
image : jellyfin/jellyfin:latest
runtime : nvidia
environment :
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=compute,video,utility
volumes :
- /path/to/config:/config
- /path/to/media:/media
AMD VA-API (Docker)
services :
jellyfin :
image : jellyfin/jellyfin:latest
devices :
- /dev/dri:/dev/dri
group_add :
- "109" # render group
- "44" # video group
volumes :
- /path/to/config:/config
- /path/to/media:/media
Typical 1080p H.264 transcoding performance:
Method Speed CPU Usage Power Software (libx264) 1x 100% High Intel QSV 10-15x 10-20% Low NVIDIA NVENC 15-20x 5-10% Medium AMD AMF 10-15x 10-15% Medium VA-API 10-15x 10-20% Low
Speed multipliers are approximate and vary based on hardware, source material, and encoding settings.
Troubleshooting
Hardware Acceleration Not Working
Check: # Verify device exists
ls -l /dev/dri/
# Check permissions
id jellyfin
# Test VA-API (if applicable)
sudo -u jellyfin vainfo
# Check Jellyfin logs
journalctl -u jellyfin -f
Permission Denied Errors
# Add user to required groups
sudo usermod -aG video,render jellyfin
sudo systemctl restart jellyfin
# Verify group membership
groups jellyfin
Quality Issues
Reduce CRF value for higher quality
Check if source supports hardware decoding
Verify hardware encoder supports desired codec
Try different tone mapping algorithm
NVIDIA Session Limit
If you hit the 3-session limit on consumer GPUs:
Apply nvidia-patch
Use a Quadro/Tesla GPU (no limits)
Reduce concurrent transcoding sessions
Docker Hardware Access
Ensure:
Devices are properly mounted (--device)
Correct group IDs are added (--group-add)
Runtime is specified for NVIDIA (--runtime nvidia)
Best Practices
Match Hardware to Workload Use Intel QSV for efficiency, NVIDIA for maximum performance, and VA-API for compatibility.
Enable Hardware Decoding Configure hardware decoding for codecs your GPU supports to reduce CPU usage further.
Monitor Temperatures Ensure adequate cooling, especially during sustained transcoding sessions.
Test Before Deployment Verify quality and compatibility with your media library before enabling for all users.
Intel QSV
NVIDIA NVENC
AMD AMF
VA-API
Best for:
H.264/HEVC transcoding
Low power consumption
Integrated graphics systems
Multiple concurrent streams (no session limits)
Best for:
Maximum transcoding speed
High-quality HEVC encoding
Modern RTX cards for AV1
Systems with dedicated GPU
Best for:
AMD-based systems
H.264/HEVC encoding
RX 7000 series for AV1
Best for:
Linux environments
Intel/AMD GPUs
Open-source stack preference
Next Steps
Transcoding Settings Fine-tune quality, codecs, and performance options
Network Configuration Configure remote access and bandwidth limits