This commit is contained in:
2026-03-09 13:28:21 +00:00
parent ac29c68de0
commit 8e3c67565d
10 changed files with 536 additions and 78 deletions

159
build-handbrake-nvdec.sh Executable file
View File

@@ -0,0 +1,159 @@
#!/usr/bin/env bash
# =============================================================================
# HandBrake mit NVDEC aus Quellcode bauen
# Ubuntu 22.04 / 24.04, Debian 11 / 12
#
# Verwendung:
# sudo bash build-handbrake-nvdec.sh [--version 1.9.0]
#
# NVDEC benötigt zur Laufzeit den NVIDIA-Treiber (libnvcuvid.so).
# =============================================================================
set -euo pipefail
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'
BLUE='\033[0;34m'; BOLD='\033[1m'; RESET='\033[0m'
info() { echo -e "${BLUE}[INFO]${RESET} $*"; }
ok() { echo -e "${GREEN}[OK]${RESET} $*"; }
warn() { echo -e "${YELLOW}[WARN]${RESET} $*"; }
fatal() { echo -e "${RED}[FEHLER]${RESET} $*" >&2; exit 1; }
HANDBRAKE_VERSION="1.9.0"
while [[ $# -gt 0 ]]; do
case "$1" in
--version) HANDBRAKE_VERSION="$2"; shift 2 ;;
-h|--help) echo "Verwendung: sudo bash $0 [--version X.Y.Z]"; exit 0 ;;
*) fatal "Unbekannte Option: $1" ;;
esac
done
[[ $EUID -eq 0 ]] || fatal "Bitte als root ausführen: sudo bash $0"
[[ -f /etc/os-release ]] && . /etc/os-release || fatal "OS nicht erkennbar"
echo -e "\n${BOLD}${BLUE}══════════════════════════════════════════${RESET}"
echo -e "${BOLD} HandBrake ${HANDBRAKE_VERSION} mit NVDEC bauen${RESET}"
echo -e "${BOLD}${BLUE}══════════════════════════════════════════${RESET}\n"
# --------------------------------------------------------------------------
# 1. Build-Abhängigkeiten
# --------------------------------------------------------------------------
info "Installiere Build-Abhängigkeiten..."
apt-get update -qq
apt-get install -y \
autoconf automake build-essential cmake git \
libass-dev libbz2-dev libdvdnav-dev libdvdread-dev \
libfontconfig-dev libfreetype-dev libfribidi-dev libharfbuzz-dev \
libjansson-dev liblzma-dev libmp3lame-dev libnuma-dev libogg-dev \
libopus-dev libsamplerate0-dev libspeex-dev libtheora-dev libtool \
libturbojpeg0-dev libvorbis-dev libvpx-dev libx264-dev libxml2-dev \
m4 meson nasm ninja-build patch pkg-config python3 tar zlib1g-dev \
>/dev/null
ok "Build-Abhängigkeiten installiert"
# --------------------------------------------------------------------------
# 2. CUDA-Header für NVDEC
# --------------------------------------------------------------------------
info "Prüfe CUDA-Header für NVDEC-Support..."
if dpkg -l 2>/dev/null | grep -q '^ii.*nvidia-cuda-toolkit'; then
ok "nvidia-cuda-toolkit bereits installiert"
else
info "Installiere nvidia-cuda-toolkit (für NVDEC-Header)..."
if apt-get install -y nvidia-cuda-toolkit >/dev/null 2>&1; then
ok "nvidia-cuda-toolkit installiert"
else
warn "nvidia-cuda-toolkit nicht in Standard-Repos versuche NVIDIA CUDA Repo..."
local_ver="${VERSION_ID//./}"
cuda_deb="/tmp/cuda-keyring.deb"
if curl -fsSL \
"https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${local_ver}/x86_64/cuda-keyring_1.1-1_all.deb" \
-o "$cuda_deb" 2>/dev/null; then
dpkg -i "$cuda_deb"
apt-get update -qq
# Minimale Header statt vollem Toolkit
apt-get install -y cuda-cudart-dev-12-8 >/dev/null 2>&1 && \
ok "CUDA-Header installiert (cuda-cudart-dev-12-8)" || \
warn "CUDA-Header-Installation fehlgeschlagen NVDEC könnte im Build fehlen."
else
warn "NVIDIA CUDA Repo nicht erreichbar NVDEC könnte im Build fehlen."
fi
fi
fi
# --------------------------------------------------------------------------
# 3. Alte Installation entfernen
# --------------------------------------------------------------------------
if command -v HandBrakeCLI &>/dev/null; then
EXISTING=$(HandBrakeCLI --version 2>&1 | head -1)
warn "Entferne vorhandenes HandBrakeCLI: ${EXISTING}"
apt-get remove -y handbrake-cli 2>/dev/null || true
snap remove handbrake-cli 2>/dev/null || true
rm -f /usr/bin/HandBrakeCLI /usr/local/bin/HandBrakeCLI
fi
# --------------------------------------------------------------------------
# 4. Quellcode herunterladen
# --------------------------------------------------------------------------
TMP_DIR=$(mktemp -d)
trap 'cd /; rm -rf "$TMP_DIR"' EXIT
SRC_URL="https://github.com/HandBrake/HandBrake/releases/download/${HANDBRAKE_VERSION}/HandBrake-${HANDBRAKE_VERSION}-source.tar.bz2"
TARBALL="${TMP_DIR}/handbrake-src.tar.bz2"
info "Lade HandBrake ${HANDBRAKE_VERSION} herunter..."
info "URL: ${SRC_URL}"
curl -fL --progress-bar "$SRC_URL" -o "$TARBALL" || \
wget --progress=bar:force "$SRC_URL" -O "$TARBALL" || \
fatal "Download fehlgeschlagen. Bitte Version prüfen: https://github.com/HandBrake/HandBrake/releases"
info "Entpacke..."
tar xjf "$TARBALL" -C "$TMP_DIR"
SRC_DIR="${TMP_DIR}/HandBrake-${HANDBRAKE_VERSION}"
[[ -d "$SRC_DIR" ]] || SRC_DIR=$(find "$TMP_DIR" -maxdepth 1 -type d -name "HandBrake*" | head -1)
[[ -d "$SRC_DIR" ]] || fatal "Quellverzeichnis nicht gefunden"
# --------------------------------------------------------------------------
# 5. Konfigurieren & Bauen
# --------------------------------------------------------------------------
cd "$SRC_DIR"
info "Konfiguriere HandBrake mit NVDEC (--enable-nvdec)..."
./configure \
--launch-jobs="$(nproc)" \
--enable-nvdec \
--prefix=/usr/local \
2>&1 | tail -15
info "Baue HandBrake mit $(nproc) Threads das dauert 1030 Minuten..."
make --directory=build -j"$(nproc)"
info "Installiere nach /usr/local/bin/..."
make --directory=build install
# --------------------------------------------------------------------------
# 6. Ergebnis prüfen
# --------------------------------------------------------------------------
if command -v HandBrakeCLI &>/dev/null; then
VER=$(HandBrakeCLI --version 2>&1 | head -1)
ok "Erfolgreich installiert: ${VER}"
echo ""
# NVDEC im Binary prüfen
if HandBrakeCLI --help 2>&1 | grep -qi "nvdec"; then
ok "NVDEC: im Binary vorhanden ✓"
else
warn "NVDEC: nicht in --help gefunden (evtl. kein --enable-nvdec oder kein CUDA-Header)"
fi
# Laufzeit-Bibliothek prüfen
if ldconfig -p 2>/dev/null | grep -q libnvcuvid; then
ok "libnvcuvid: gefunden NVDEC zur Laufzeit verfügbar ✓"
else
warn "libnvcuvid: NICHT gefunden"
warn "→ Bitte NVIDIA-Treiber installieren: apt-get install nvidia-driver-XXX"
warn " NVDEC ist im Binary vorhanden, funktioniert aber erst mit dem Treiber."
fi
else
fatal "HandBrakeCLI nach dem Build nicht gefunden Build fehlgeschlagen."
fi