In diesem Artikel zeige ich Ihnen, wie Sie Intel GPU Hardware-Transcodierung in einem Proxmox LXC Container erfolgreich einrichten. Diese Anleitung basiert auf einer getesteten Konfiguration mit Debian 13 (Trixie) und einer Intel Alder Lake-N Grafikkarte.
Systemvoraussetzungen
Für dieses Setup benötigen Sie:
- Host-System: Proxmox VE 9.0 oder höher
- Container OS: Debian 13 (Trixie) – empfohlen wegen aktueller Treiber
- Intel GPU: Integrierte Intel Grafik (getestet mit Alder Lake-N)
- Kernel: Proxmox Kernel 6.14.8-2-pve oder neuer
Die GPU muss bereits im Proxmox Container konfiguriert sein (Device Passthrough). In unserem Fall war die PCI-Adresse 0000:00:02.0.
Schritt 1: Grundlegende Pakete installieren
Melden Sie sich als root in Ihrem Container an und installieren Sie zunächst die grundlegenden Tools:
apt update
apt install -y pciutils udev
Überprüfen Sie, ob die GPU erkannt wird:
lspci | grep VGA
# Ausgabe sollte Ihre Intel GPU zeigen
Schritt 2: Intel Treiber und VA-API installieren
Installieren Sie alle notwendigen Intel-Treiber und VA-API Komponenten:
# Intel Media Treiber
apt install -y intel-media-va-driver-non-free i965-va-driver
# VA-API Bibliotheken und Tools
apt install -y libva2 libva-dev vainfo va-driver-all
# Intel spezifische Bibliotheken
apt install -y libigdgmm12 libvpl2 libmfx-gen1.2
# Monitoring Tools
apt install -y intel-gpu-tools
Schritt 3: FFmpeg mit Hardware-Unterstützung installieren
apt install -y ffmpeg
Debian Trixie liefert FFmpeg bereits mit vollständiger Intel QSV (Quick Sync Video) Unterstützung aus.
Schritt 4: Umgebungsvariablen konfigurieren
Erstellen Sie die Datei /etc/environment
mit folgendem Inhalt:
LIBVA_DRIVER_NAME=iHD
LIBVA_DRIVERS_PATH=/usr/lib/x86_64-linux-gnu/dri
Diese Variablen stellen sicher, dass der Intel iHD Treiber verwendet wird.
Schritt 5: Installation überprüfen
VA-API Test
# VA-API Unterstützung prüfen
vainfo --display drm --device /dev/dri/renderD128
Sie sollten eine Liste der unterstützten Profile und Entrypoints sehen, einschließlich:
- VAProfileH264Main
- VAProfileHEVCMain
- VAProfileVP9Profile0
FFmpeg QSV Support
# Verfügbare Hardware-Beschleuniger anzeigen
ffmpeg -hide_banner -hwaccels | grep qsv
# QSV Encoder auflisten
ffmpeg -hide_banner -encoders | grep qsv
Schritt 6: Test-Script erstellen
Erstellen Sie /root/test_gpu_transcoding.sh
mit folgendem Inhalt:
#!/bin/bash
echo "=== Intel GPU Transcoding Test Script ==="
echo
# Farben für Ausgabe
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m' # No Color
# Test 1: VA-API Check
echo "1. Checking VA-API support..."
if vainfo --display drm --device /dev/dri/renderD128 2>/dev/null | grep -q "VAProfileH264Main"; then
echo -e "${GREEN}✓ VA-API is working${NC}"
else
echo -e "${RED}✗ VA-API not working${NC}"
exit 1
fi
echo
# Test 2: FFmpeg QSV Check
echo "2. Checking ffmpeg QSV support..."
if ffmpeg -hide_banner -encoders 2>/dev/null | grep -q h264_qsv; then
echo -e "${GREEN}✓ FFmpeg QSV support detected${NC}"
else
echo -e "${RED}✗ FFmpeg QSV support not found${NC}"
exit 1
fi
echo
# Test 3: Create test video
echo "3. Creating test video..."
ffmpeg -f lavfi -i testsrc=duration=5:size=1280x720:rate=30 \
-f lavfi -i sine=frequency=1000:duration=5 \
-c:v libx264 -preset ultrafast -c:a aac \
-y /tmp/test_input.mp4 2>/dev/null
echo -e "${GREEN}✓ Test video created${NC}"
echo
# Test 4: Software encoding
echo "4. Testing software H.264 encoding..."
START=$(date +%s%N)
ffmpeg -i /tmp/test_input.mp4 -c:v libx264 -preset faster \
-b:v 2M -c:a copy -y /tmp/test_sw.mp4 2>/dev/null
END=$(date +%s%N)
SW_TIME=$((($END - $START)/1000000))
echo -e "${GREEN}✓ Software encoding: ${SW_TIME}ms${NC}"
echo
# Test 5: Hardware encoding
echo "5. Testing hardware H.264 QSV encoding..."
export LIBVA_DRIVER_NAME=iHD
START=$(date +%s%N)
ffmpeg -hwaccel qsv -qsv_device /dev/dri/renderD128 \
-i /tmp/test_input.mp4 -c:v h264_qsv -preset faster \
-b:v 2M -c:a copy -y /tmp/test_hw.mp4 2>/dev/null
END=$(date +%s%N)
HW_TIME=$((($END - $START)/1000000))
echo -e "${GREEN}✓ Hardware encoding: ${HW_TIME}ms${NC}"
echo
# Performance comparison
SPEEDUP=$(echo "scale=1; $SW_TIME / $HW_TIME" | bc)
echo "=== Performance Summary ==="
echo "Software encoding: ${SW_TIME}ms"
echo "Hardware encoding: ${HW_TIME}ms"
echo -e "${GREEN}Hardware acceleration is ${SPEEDUP}x faster!${NC}"
echo
# Cleanup
rm -f /tmp/test_*.mp4
echo "All tests completed successfully!"
Machen Sie das Script ausführbar:
chmod +x /root/test_gpu_transcoding.sh
Leistungsvergleich
In unseren Tests mit einem 5-Sekunden 720p Video zeigten sich folgende Ergebnisse:
Encoding-Methode | Zeit | Geschwindigkeit |
---|---|---|
Software H.264 | 1471ms | Baseline |
Hardware H.264 (QSV) | 405ms | 3.6x schneller |
Hardware HEVC (QSV) | 502ms | 2.9x schneller |
Die Hardware-Beschleunigung erreichte dabei eine Transcodierungsgeschwindigkeit von:
- 17x Echtzeit für H.264
- 13x Echtzeit für HEVC
Unterstützte Codecs
Mit diesem Setup stehen folgende Hardware-Codecs zur Verfügung:
- ✅ H.264/AVC (h264_qsv) – Encoding & Decoding
- ✅ HEVC/H.265 (hevc_qsv) – Encoding & Decoding
- ✅ VP9 (vp9_qsv) – Encoding & Decoding
- ✅ MPEG-2 (mpeg2_qsv) – Encoding & Decoding
- ✅ MJPEG (mjpeg_qsv) – Encoding
- ⚠️ AV1 (av1_qsv) – Je nach GPU-Generation
Praktische FFmpeg Befehle
H.264 Transcodierung mit QSV
export LIBVA_DRIVER_NAME=iHD
ffmpeg -hwaccel qsv -qsv_device /dev/dri/renderD128 -i input.mp4 \
-c:v h264_qsv -preset faster -b:v 2M -c:a copy output.mp4
HEVC/H.265 Transcodierung
ffmpeg -hwaccel qsv -qsv_device /dev/dri/renderD128 -i input.mp4 \
-c:v hevc_qsv -preset faster -b:v 1M -c:a copy output_hevc.mp4
Vollständige Hardware-Pipeline (Decode + Encode)
ffmpeg -hwaccel qsv -c:v h264_qsv -i input.mp4 \
-c:v hevc_qsv -preset faster -b:v 1M -c:a copy output.mp4
GPU-Auslastung überwachen
⚠️ Wichtiger Hinweis: Das Tool intel_gpu_top
erfordert einen privilegierten Container für vollen Zugriff auf GPU-Metriken. Falls der Befehl mit einem Fehler wie „Failed to detect engines“ fehlschlägt, müssen Sie Ihren Container als privilegiert konfigurieren:
In der Proxmox Container-Konfiguration unter Options → Features aktivieren Sie:
- Nesting (für Container-in-Container)
- Fügen Sie in der Container-Konfigurationsdatei
/etc/pve/lxc/[CTID].conf
folgende Zeile hinzu:
lxc.apparmor.profile: unconfined
Mit intel_gpu_top
können Sie die GPU-Auslastung in Echtzeit beobachten:
intel_gpu_top
Dies zeigt Ihnen die Auslastung der verschiedenen GPU-Engines, einschließlich der Video-Engine während der Transcodierung.
Alternativ können Sie auch grundlegende GPU-Informationen ohne privilegierten Zugriff abrufen:
# GPU-Frequenz anzeigen
cat /sys/class/drm/card*/gt_cur_freq_mhz
# GPU-Speichernutzung
cat /sys/kernel/debug/dri/*/i915_gem_objects
Anwendungsfälle
Dieses Setup eignet sich hervorragend für:
- Video-Streaming-Dienste: Jellyfin, Plex, Emby mit Hardware-Transcodierung
- Live-Streaming: OBS Studio mit QSV Encoder
- Videokonvertierung: Batch-Konvertierung großer Videobibliotheken
- Überwachungskameras: Motion Detection und Aufzeichnung mit geringer CPU-Last
- Videokonferenz-Server: Jitsi, BigBlueButton mit Hardware-Beschleunigung
Fehlerbehebung
Problem: VA-API funktioniert nicht
Prüfen Sie die Berechtigungen der DRM-Geräte:
ls -la /dev/dri/
# renderD128 sollte lesbar sein
Problem: FFmpeg findet QSV nicht
Stellen Sie sicher, dass die Umgebungsvariable gesetzt ist:
export LIBVA_DRIVER_NAME=iHD
Problem: Schlechte Performance
Überprüfen Sie mit intel_gpu_top
, ob die GPU tatsächlich verwendet wird. Die Video-Engine sollte während der Transcodierung aktiv sein.
Fazit
Die Einrichtung der Intel GPU Hardware-Transcodierung in einem Proxmox LXC Container bietet erhebliche Leistungsvorteile. Mit einer 3-4fachen Geschwindigkeitssteigerung gegenüber Software-Encoding und Unterstützung für moderne Codecs ist das System ideal für medienintensive Anwendungen.
Die Kombination aus Debian Trixie’s aktuellen Treibern und Proxmox’s Container-Technologie ermöglicht eine effiziente und isolierte Umgebung für Video-Transcodierung mit minimaler CPU-Belastung.
Haben Sie Fragen oder Erfahrungen mit diesem Setup? Hinterlassen Sie gerne einen Kommentar!