Fix multi-res HLS encoding on CPU: fall back to libx264 when NVENC unavailable

The hardcoded h264_nvenc encoder fails on CPU-only workers. Now uses
check_nvenc_available() to auto-detect and falls back to libx264.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
giles
2026-02-25 15:30:35 +00:00
parent 3bffb97ca1
commit c53227d991

View File

@@ -21,6 +21,8 @@ from dataclasses import dataclass, field
import numpy as np
from streaming.output import check_nvenc_available
# Try GPU imports
try:
import cupy as cp
@@ -222,14 +224,26 @@ class MultiResolutionHLSOutput:
"-vf", f"scale={quality.width}:{quality.height}:flags=lanczos",
])
# NVENC encoding with quality settings
# Encoding settings - use NVENC if available, fall back to libx264
use_nvenc = check_nvenc_available()
if use_nvenc:
cmd.extend([
"-c:v", "h264_nvenc",
"-preset", "p4", # Balanced speed/quality
"-tune", "hq",
"-b:v", f"{quality.bitrate}k",
"-maxrate", f"{int(quality.bitrate * 1.5)}k",
"-bufsize", f"{quality.bitrate * 2}k",
])
else:
cmd.extend([
"-c:v", "libx264",
"-preset", "fast",
"-b:v", f"{quality.bitrate}k",
"-maxrate", f"{int(quality.bitrate * 1.5)}k",
"-bufsize", f"{quality.bitrate * 2}k",
])
cmd.extend([
"-c:v", "h264_nvenc",
"-preset", "p4", # Balanced speed/quality
"-tune", "hq",
"-b:v", f"{quality.bitrate}k",
"-maxrate", f"{int(quality.bitrate * 1.5)}k",
"-bufsize", f"{quality.bitrate * 2}k",
"-g", str(int(self.fps * self.segment_duration)), # Keyframe interval = segment duration
"-keyint_min", str(int(self.fps * self.segment_duration)),
"-sc_threshold", "0", # Disable scene change detection for consistent segments