From ec504a1aaed31c813f100cad86b362ee39bd661b Mon Sep 17 00:00:00 2001 From: Nick Mowen Date: Sat, 16 Sep 2023 10:53:29 -0600 Subject: [PATCH] Add timelapse args to config --- frigate/config.py | 8 ++++++++ frigate/record/export.py | 7 +++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/frigate/config.py b/frigate/config.py index dc9902902..35a3af60e 100644 --- a/frigate/config.py +++ b/frigate/config.py @@ -51,6 +51,7 @@ DEFAULT_TRACKED_OBJECTS = ["person"] DEFAULT_LISTEN_AUDIO = ["bark", "fire_alarm", "scream", "speech", "yell"] DEFAULT_DETECTORS = {"cpu": {"type": "cpu"}} DEFAULT_DETECT_DIMENSIONS = {"width": 1280, "height": 720} +DEFAULT_TIME_LAPSE_FFMPEG_ARGS = "-vf setpts=0.04*PTS -r 30" class FrigateBaseModel(BaseModel): @@ -198,6 +199,10 @@ class RecordRetainConfig(FrigateBaseModel): mode: RetainModeEnum = Field(default=RetainModeEnum.all, title="Retain mode.") +class RecordExportConfig(FrigateBaseModel): + timelapse_args: str = Field(default=DEFAULT_TIME_LAPSE_FFMPEG_ARGS, title="Timelapse Args") + + class RecordConfig(FrigateBaseModel): enabled: bool = Field(default=False, title="Enable record on all cameras.") sync_on_startup: bool = Field( @@ -213,6 +218,9 @@ class RecordConfig(FrigateBaseModel): events: EventsConfig = Field( default_factory=EventsConfig, title="Event specific settings." ) + export: RecordExportConfig = Field( + default_factory=RecordExportConfig, title="Recording Export Config" + ) enabled_in_config: Optional[bool] = Field( title="Keep track of original state of recording." ) diff --git a/frigate/record/export.py b/frigate/record/export.py index 7c0d50301..bbbf08470 100644 --- a/frigate/record/export.py +++ b/frigate/record/export.py @@ -18,6 +18,9 @@ from frigate.models import Recordings logger = logging.getLogger(__name__) +TIMELAPSE_DATA_INPUT_ARGS = "-an -skip_frame nokey" + + def lower_priority(): os.nice(10) @@ -99,8 +102,8 @@ class RecordingExporter(threading.Thread): ffmpeg_cmd = ( parse_preset_hardware_acceleration_encode( self.config.ffmpeg.hwaccel_args, - "-an -skip_frame nokey" + ffmpeg_input, # make sure only keyframes and no audio is not processed for time-lapse - f"-vf setpts=0.04*PTS -r 30 -an {file_name}", + TIMELAPSE_DATA_INPUT_ARGS + ffmpeg_input, + f"{self.config.cameras[self.camera].record.export.timelapse_args} {file_name}", EncodeTypeEnum.timelapse, ) ).split(" ")