diff --git a/l1/streaming/multi_res_output.py b/l1/streaming/multi_res_output.py index 40c661a..33e4413 100644 --- a/l1/streaming/multi_res_output.py +++ b/l1/streaming/multi_res_output.py @@ -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