Updating GPU transcoding
This commit is contained in:
@@ -1467,6 +1467,34 @@ def _resolve_audio_encoder(codec: str) -> str:
|
|||||||
return AUDIO_ENCODER_MAP.get(key, codec or "libmp3lame")
|
return AUDIO_ENCODER_MAP.get(key, codec or "libmp3lame")
|
||||||
|
|
||||||
|
|
||||||
|
def _sanitize_video_preset(encoder: str) -> str | None:
|
||||||
|
preset = (VIDEO_NORMALIZE_PRESET or "").strip()
|
||||||
|
if not preset:
|
||||||
|
return None
|
||||||
|
enc = (encoder or "").lower()
|
||||||
|
pl = preset.lower()
|
||||||
|
|
||||||
|
if "nvenc" in enc:
|
||||||
|
allowed = {"p1", "p2", "p3", "p4", "p5", "p6", "p7"}
|
||||||
|
return pl if pl in allowed else "p5"
|
||||||
|
|
||||||
|
if enc in {"libx265", "libx264"}:
|
||||||
|
allowed = {"ultrafast", "superfast", "veryfast", "faster", "fast", "medium", "slow", "slower", "veryslow", "placebo"}
|
||||||
|
if pl in allowed:
|
||||||
|
return pl
|
||||||
|
if pl.startswith("p") and pl[1:].isdigit():
|
||||||
|
return "medium"
|
||||||
|
return "medium"
|
||||||
|
|
||||||
|
if enc == "libaom-av1":
|
||||||
|
allowed = {"good", "best", "realtime"}
|
||||||
|
if pl in allowed:
|
||||||
|
return pl
|
||||||
|
return "good"
|
||||||
|
|
||||||
|
return preset
|
||||||
|
|
||||||
|
|
||||||
def _ffprobe_streams(path: Path) -> dict[str, str]:
|
def _ffprobe_streams(path: Path) -> dict[str, str]:
|
||||||
try:
|
try:
|
||||||
out = subprocess.check_output(
|
out = subprocess.check_output(
|
||||||
@@ -1603,8 +1631,9 @@ def _normalize_video_file(path: Path, info: dict[str, str]) -> Path:
|
|||||||
"-map", "0",
|
"-map", "0",
|
||||||
"-c:v", v_encoder,
|
"-c:v", v_encoder,
|
||||||
]
|
]
|
||||||
if VIDEO_NORMALIZE_PRESET:
|
preset_val = _sanitize_video_preset(v_encoder)
|
||||||
cmd.extend(["-preset", VIDEO_NORMALIZE_PRESET])
|
if preset_val:
|
||||||
|
cmd.extend(["-preset", preset_val])
|
||||||
if VIDEO_NORMALIZE_TUNE:
|
if VIDEO_NORMALIZE_TUNE:
|
||||||
cmd.extend(["-tune", VIDEO_NORMALIZE_TUNE])
|
cmd.extend(["-tune", VIDEO_NORMALIZE_TUNE])
|
||||||
if VIDEO_NORMALIZE_CRF:
|
if VIDEO_NORMALIZE_CRF:
|
||||||
|
@@ -90,6 +90,8 @@ services:
|
|||||||
AUDIO_NORMALIZE_BITRATE: ${AUDIO_NORMALIZE_BITRATE:-192k}
|
AUDIO_NORMALIZE_BITRATE: ${AUDIO_NORMALIZE_BITRATE:-192k}
|
||||||
AUDIO_NORMALIZE_CHANNELS: ${AUDIO_NORMALIZE_CHANNELS:-2}
|
AUDIO_NORMALIZE_CHANNELS: ${AUDIO_NORMALIZE_CHANNELS:-2}
|
||||||
WORKER_MODE: all
|
WORKER_MODE: all
|
||||||
|
NVIDIA_VISIBLE_DEVICES: ${NVIDIA_VISIBLE_DEVICES:-all}
|
||||||
|
NVIDIA_DRIVER_CAPABILITIES: ${NVIDIA_DRIVER_CAPABILITIES:-video,compute,utility}
|
||||||
OPENWEBUI_URL: ${OPENWEBUI_CONTAINER_URL:-http://open-webui:8080}
|
OPENWEBUI_URL: ${OPENWEBUI_CONTAINER_URL:-http://open-webui:8080}
|
||||||
OPENWEBUI_API_KEY: ${OPENWEBUI_API_KEY}
|
OPENWEBUI_API_KEY: ${OPENWEBUI_API_KEY}
|
||||||
OPENWEBUI_KB_NAME: ${OPENWEBUI_KB_NAME:-Homelab Library}
|
OPENWEBUI_KB_NAME: ${OPENWEBUI_KB_NAME:-Homelab Library}
|
||||||
@@ -105,6 +107,10 @@ services:
|
|||||||
- ${TMP_HOST_DIR:-./tmp}:/tmpdl
|
- ${TMP_HOST_DIR:-./tmp}:/tmpdl
|
||||||
- ${MODELS_HOST_DIR:-./models}:/root/.cache/huggingface
|
- ${MODELS_HOST_DIR:-./models}:/root/.cache/huggingface
|
||||||
- ./app:/app
|
- ./app:/app
|
||||||
|
device_requests:
|
||||||
|
- driver: nvidia
|
||||||
|
count: ${NVIDIA_DEVICE_COUNT:-1}
|
||||||
|
capabilities: [video, compute, utility]
|
||||||
depends_on: [meili, redis, open-webui]
|
depends_on: [meili, redis, open-webui]
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
healthcheck:
|
healthcheck:
|
||||||
@@ -150,6 +156,8 @@ services:
|
|||||||
AUDIO_NORMALIZE_BITRATE: ${AUDIO_NORMALIZE_BITRATE:-192k}
|
AUDIO_NORMALIZE_BITRATE: ${AUDIO_NORMALIZE_BITRATE:-192k}
|
||||||
AUDIO_NORMALIZE_CHANNELS: ${AUDIO_NORMALIZE_CHANNELS:-2}
|
AUDIO_NORMALIZE_CHANNELS: ${AUDIO_NORMALIZE_CHANNELS:-2}
|
||||||
WORKER_MODE: transcribe
|
WORKER_MODE: transcribe
|
||||||
|
NVIDIA_VISIBLE_DEVICES: ${NVIDIA_VISIBLE_DEVICES:-all}
|
||||||
|
NVIDIA_DRIVER_CAPABILITIES: ${NVIDIA_DRIVER_CAPABILITIES:-video,compute,utility}
|
||||||
OPENWEBUI_URL: ${OPENWEBUI_CONTAINER_URL:-http://open-webui:8080}
|
OPENWEBUI_URL: ${OPENWEBUI_CONTAINER_URL:-http://open-webui:8080}
|
||||||
OPENWEBUI_API_KEY: ${OPENWEBUI_API_KEY}
|
OPENWEBUI_API_KEY: ${OPENWEBUI_API_KEY}
|
||||||
OPENWEBUI_KB_NAME: ${OPENWEBUI_KB_NAME:-Homelab Library}
|
OPENWEBUI_KB_NAME: ${OPENWEBUI_KB_NAME:-Homelab Library}
|
||||||
@@ -165,6 +173,10 @@ services:
|
|||||||
- ${TMP_HOST_DIR:-./tmp}:/tmpdl
|
- ${TMP_HOST_DIR:-./tmp}:/tmpdl
|
||||||
- ${MODELS_HOST_DIR:-./models}:/root/.cache/huggingface
|
- ${MODELS_HOST_DIR:-./models}:/root/.cache/huggingface
|
||||||
- ./app:/app
|
- ./app:/app
|
||||||
|
device_requests:
|
||||||
|
- driver: nvidia
|
||||||
|
count: ${NVIDIA_DEVICE_COUNT:-1}
|
||||||
|
capabilities: [video, compute, utility]
|
||||||
depends_on: [meili, redis, open-webui]
|
depends_on: [meili, redis, open-webui]
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
healthcheck:
|
healthcheck:
|
||||||
|
Reference in New Issue
Block a user