Intel iGPU Hardware-Transcodierung in Proxmox LXC Container einrichten

Detaillierte Anleitung zur Einrichtung von Intel GPU Hardware-Transcodierung in Proxmox LXC Containern mit Debian 13. Inklusive Konfiguration, Leistungstests und praktischen FFmpeg-Befehlen für 3-4x schnellere Video-Transcodierung.

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-MethodeZeitGeschwindigkeit
Software H.2641471msBaseline
Hardware H.264 (QSV)405ms3.6x schneller
Hardware HEVC (QSV)502ms2.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!