diff --git a/frigate/api/app.py b/frigate/api/app.py index b51aaded3..06d1b30c6 100644 --- a/frigate/api/app.py +++ b/frigate/api/app.py @@ -5,6 +5,7 @@ import copy import json import logging import os +import platform import traceback import urllib from datetime import datetime, timedelta @@ -246,19 +247,26 @@ def get_active_profile(request: Request): @router.get("/ffmpeg/presets", dependencies=[Depends(allow_any_authenticated())]) def ffmpeg_presets(): """Return available ffmpeg preset keys for config UI usage.""" + machine = platform.machine().lower() + is_arm64 = machine in ("aarch64", "arm64", "armv8", "armv7l") + + if is_arm64: + hwaccel_presets = [ + "preset-rpi-64-h264", + "preset-rpi-64-h265", + "preset-jetson-h264", + "preset-jetson-h265", + "preset-rkmpp", + "preset-vaapi", + ] + else: + hwaccel_presets = [ + "preset-vaapi", + "preset-intel-qsv-h264", + "preset-intel-qsv-h265", + "preset-nvidia", + ] - # Whitelist based on documented presets in ffmpeg_presets.md - hwaccel_presets = [ - "preset-rpi-64-h264", - "preset-rpi-64-h265", - "preset-vaapi", - "preset-intel-qsv-h264", - "preset-intel-qsv-h265", - "preset-nvidia", - "preset-jetson-h264", - "preset-jetson-h265", - "preset-rkmpp", - ] input_presets = [ "preset-http-jpeg-generic", "preset-http-mjpeg-generic", diff --git a/web/public/locales/en/views/settings.json b/web/public/locales/en/views/settings.json index f5c20a410..523d993cd 100644 --- a/web/public/locales/en/views/settings.json +++ b/web/public/locales/en/views/settings.json @@ -1330,7 +1330,18 @@ "none": "None", "useGlobalSetting": "Inherit from global setting", "selectPreset": "Select preset", - "manualPlaceholder": "Enter FFmpeg arguments" + "manualPlaceholder": "Enter FFmpeg arguments", + "presetLabels": { + "preset-rpi-64-h264": "Raspberry Pi (H.264)", + "preset-rpi-64-h265": "Raspberry Pi (H.265)", + "preset-vaapi": "VAAPI (Intel/AMD GPU)", + "preset-intel-qsv-h264": "Intel QuickSync (H.264)", + "preset-intel-qsv-h265": "Intel QuickSync (H.265)", + "preset-nvidia": "NVIDIA GPU", + "preset-jetson-h264": "NVIDIA Jetson (H.264)", + "preset-jetson-h265": "NVIDIA Jetson (H.265)", + "preset-rkmpp": "Rockchip RKMPP" + } }, "cameraInputs": { "itemTitle": "Stream {{index}}" diff --git a/web/src/components/config-form/theme/widgets/FfmpegArgsWidget.tsx b/web/src/components/config-form/theme/widgets/FfmpegArgsWidget.tsx index dcf34fae8..e523bfd46 100644 --- a/web/src/components/config-form/theme/widgets/FfmpegArgsWidget.tsx +++ b/web/src/components/config-form/theme/widgets/FfmpegArgsWidget.tsx @@ -405,7 +405,10 @@ export function FfmpegArgsWidget(props: WidgetProps) { {presetOptions.map((preset) => ( - {preset} + {t(`configForm.ffmpegArgs.presetLabels.${preset}`, { + ns: "views/settings", + defaultValue: preset, + })} ))}