mirror of
https://github.com/blakeblackshear/frigate.git
synced 2024-12-19 19:06:16 +01:00
Improve default timelapse args and make timelapse customizable (#7840)
* Add args to ignore audio and only process keyframes * Add timelapse args to config * Update docs * Formatting * Fix spacing * Fix formatting * add example of math for pts
This commit is contained in:
parent
c743dfd657
commit
7d0216b8fb
@ -362,6 +362,16 @@ record:
|
|||||||
# active_objects - save all recording segments with active/moving objects
|
# active_objects - save all recording segments with active/moving objects
|
||||||
# NOTE: this mode only applies when the days setting above is greater than 0
|
# NOTE: this mode only applies when the days setting above is greater than 0
|
||||||
mode: all
|
mode: all
|
||||||
|
# Optional: Recording Export Settings
|
||||||
|
export:
|
||||||
|
# Optional: Timelapse Output Args (default: shown below).
|
||||||
|
# NOTE: The default args are set to fit 24 hours of recording into 1 hour playback.
|
||||||
|
# See https://stackoverflow.com/a/58268695 for more info on how these args work.
|
||||||
|
# As an example: if you wanted to go from 24 hours to 30 minutes that would be going
|
||||||
|
# from 86400 seconds to 1800 seconds which would be 1800 / 86400 = 0.02.
|
||||||
|
# The -r (framerate) dictates how smooth the output video is.
|
||||||
|
# So the args would be -vf setpts=0.02*PTS -r 30 in that case.
|
||||||
|
timelapse_args: "-vf setpts=0.04*PTS -r 30"
|
||||||
# Optional: Event recording settings
|
# Optional: Event recording settings
|
||||||
events:
|
events:
|
||||||
# Optional: Number of seconds before the event to include (default: shown below)
|
# Optional: Number of seconds before the event to include (default: shown below)
|
||||||
|
@ -51,6 +51,7 @@ DEFAULT_TRACKED_OBJECTS = ["person"]
|
|||||||
DEFAULT_LISTEN_AUDIO = ["bark", "fire_alarm", "scream", "speech", "yell"]
|
DEFAULT_LISTEN_AUDIO = ["bark", "fire_alarm", "scream", "speech", "yell"]
|
||||||
DEFAULT_DETECTORS = {"cpu": {"type": "cpu"}}
|
DEFAULT_DETECTORS = {"cpu": {"type": "cpu"}}
|
||||||
DEFAULT_DETECT_DIMENSIONS = {"width": 1280, "height": 720}
|
DEFAULT_DETECT_DIMENSIONS = {"width": 1280, "height": 720}
|
||||||
|
DEFAULT_TIME_LAPSE_FFMPEG_ARGS = "-vf setpts=0.04*PTS -r 30"
|
||||||
|
|
||||||
|
|
||||||
class FrigateBaseModel(BaseModel):
|
class FrigateBaseModel(BaseModel):
|
||||||
@ -198,6 +199,12 @@ class RecordRetainConfig(FrigateBaseModel):
|
|||||||
mode: RetainModeEnum = Field(default=RetainModeEnum.all, title="Retain mode.")
|
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):
|
class RecordConfig(FrigateBaseModel):
|
||||||
enabled: bool = Field(default=False, title="Enable record on all cameras.")
|
enabled: bool = Field(default=False, title="Enable record on all cameras.")
|
||||||
sync_on_startup: bool = Field(
|
sync_on_startup: bool = Field(
|
||||||
@ -213,6 +220,9 @@ class RecordConfig(FrigateBaseModel):
|
|||||||
events: EventsConfig = Field(
|
events: EventsConfig = Field(
|
||||||
default_factory=EventsConfig, title="Event specific settings."
|
default_factory=EventsConfig, title="Event specific settings."
|
||||||
)
|
)
|
||||||
|
export: RecordExportConfig = Field(
|
||||||
|
default_factory=RecordExportConfig, title="Recording Export Config"
|
||||||
|
)
|
||||||
enabled_in_config: Optional[bool] = Field(
|
enabled_in_config: Optional[bool] = Field(
|
||||||
title="Keep track of original state of recording."
|
title="Keep track of original state of recording."
|
||||||
)
|
)
|
||||||
|
@ -18,6 +18,9 @@ from frigate.models import Recordings
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
TIMELAPSE_DATA_INPUT_ARGS = "-an -skip_frame nokey"
|
||||||
|
|
||||||
|
|
||||||
def lower_priority():
|
def lower_priority():
|
||||||
os.nice(10)
|
os.nice(10)
|
||||||
|
|
||||||
@ -99,8 +102,8 @@ class RecordingExporter(threading.Thread):
|
|||||||
ffmpeg_cmd = (
|
ffmpeg_cmd = (
|
||||||
parse_preset_hardware_acceleration_encode(
|
parse_preset_hardware_acceleration_encode(
|
||||||
self.config.ffmpeg.hwaccel_args,
|
self.config.ffmpeg.hwaccel_args,
|
||||||
ffmpeg_input,
|
f"{TIMELAPSE_DATA_INPUT_ARGS} {ffmpeg_input}",
|
||||||
f"-vf setpts=0.04*PTS -r 30 -an {file_name}",
|
f"{self.config.cameras[self.camera].record.export.timelapse_args} {file_name}",
|
||||||
EncodeTypeEnum.timelapse,
|
EncodeTypeEnum.timelapse,
|
||||||
)
|
)
|
||||||
).split(" ")
|
).split(" ")
|
||||||
|
Loading…
Reference in New Issue
Block a user