mirror of
https://github.com/blakeblackshear/frigate.git
synced 2024-11-21 19:07:46 +01:00
add camera level ffmpeg params
This commit is contained in:
parent
d3524ee46f
commit
d51e9446ff
@ -229,7 +229,12 @@ cameras:
|
|||||||
hwaccel_args:
|
hwaccel_args:
|
||||||
# Optional: stream specific input args (default: inherit)
|
# Optional: stream specific input args (default: inherit)
|
||||||
input_args:
|
input_args:
|
||||||
|
# Optional: camera specific global args (default: inherit)
|
||||||
|
global_args:
|
||||||
|
# Optional: camera specific hwaccel args (default: inherit)
|
||||||
|
hwaccel_args:
|
||||||
|
# Optional: camera specific input args (default: inherit)
|
||||||
|
input_args:
|
||||||
# Optional: camera specific output args (default: inherit)
|
# Optional: camera specific output args (default: inherit)
|
||||||
output_args:
|
output_args:
|
||||||
|
|
||||||
|
@ -164,6 +164,9 @@ CAMERA_FFMPEG_SCHEMA = vol.Schema(
|
|||||||
'input_args': vol.Any(str, [str]),
|
'input_args': vol.Any(str, [str]),
|
||||||
}], vol.Msg(each_role_used_once, msg="Each input role may only be used once"),
|
}], vol.Msg(each_role_used_once, msg="Each input role may only be used once"),
|
||||||
vol.Msg(detect_is_required, msg="The detect role is required")),
|
vol.Msg(detect_is_required, msg="The detect role is required")),
|
||||||
|
'global_args': vol.Any(str, [str]),
|
||||||
|
'hwaccel_args': vol.Any(str, [str]),
|
||||||
|
'input_args': vol.Any(str, [str]),
|
||||||
'output_args': {
|
'output_args': {
|
||||||
vol.Optional('detect', default=DETECT_FFMPEG_OUTPUT_ARGS_DEFAULT): vol.Any(str, [str]),
|
vol.Optional('detect', default=DETECT_FFMPEG_OUTPUT_ARGS_DEFAULT): vol.Any(str, [str]),
|
||||||
vol.Optional('record', default=RECORD_FFMPEG_OUTPUT_ARGS_DEFAULT): vol.Any(str, [str]),
|
vol.Optional('record', default=RECORD_FFMPEG_OUTPUT_ARGS_DEFAULT): vol.Any(str, [str]),
|
||||||
@ -392,12 +395,12 @@ class MqttConfig():
|
|||||||
}
|
}
|
||||||
|
|
||||||
class CameraInput():
|
class CameraInput():
|
||||||
def __init__(self, global_config, ffmpeg_input):
|
def __init__(self, camera_config, global_config, ffmpeg_input):
|
||||||
self._path = ffmpeg_input['path']
|
self._path = ffmpeg_input['path']
|
||||||
self._roles = ffmpeg_input['roles']
|
self._roles = ffmpeg_input['roles']
|
||||||
self._global_args = ffmpeg_input.get('global_args', global_config['global_args'])
|
self._global_args = ffmpeg_input.get('global_args', camera_config.get('global_args', global_config['global_args']))
|
||||||
self._hwaccel_args = ffmpeg_input.get('hwaccel_args', global_config['hwaccel_args'])
|
self._hwaccel_args = ffmpeg_input.get('hwaccel_args', camera_config.get('hwaccel_args', global_config['hwaccel_args']))
|
||||||
self._input_args = ffmpeg_input.get('input_args', global_config['input_args'])
|
self._input_args = ffmpeg_input.get('input_args', camera_config.get('input_args', global_config['input_args']))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def path(self):
|
def path(self):
|
||||||
@ -421,7 +424,7 @@ class CameraInput():
|
|||||||
|
|
||||||
class CameraFfmpegConfig():
|
class CameraFfmpegConfig():
|
||||||
def __init__(self, global_config, config):
|
def __init__(self, global_config, config):
|
||||||
self._inputs = [CameraInput(global_config, i) for i in config['inputs']]
|
self._inputs = [CameraInput(config, global_config, i) for i in config['inputs']]
|
||||||
self._output_args = config.get('output_args', global_config['output_args'])
|
self._output_args = config.get('output_args', global_config['output_args'])
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -160,7 +160,7 @@ class TestConfig(TestCase):
|
|||||||
assert('dog' in frigate_config.cameras['back'].objects.filters)
|
assert('dog' in frigate_config.cameras['back'].objects.filters)
|
||||||
assert(frigate_config.cameras['back'].objects.filters['dog'].threshold == 0.7)
|
assert(frigate_config.cameras['back'].objects.filters['dog'].threshold == 0.7)
|
||||||
|
|
||||||
def test_ffmpeg_params(self):
|
def test_ffmpeg_params_global(self):
|
||||||
config = {
|
config = {
|
||||||
'ffmpeg': {
|
'ffmpeg': {
|
||||||
'input_args': ['-re']
|
'input_args': ['-re']
|
||||||
@ -191,6 +191,64 @@ class TestConfig(TestCase):
|
|||||||
frigate_config = FrigateConfig(config=config)
|
frigate_config = FrigateConfig(config=config)
|
||||||
assert('-re' in frigate_config.cameras['back'].ffmpeg_cmds[0]['cmd'])
|
assert('-re' in frigate_config.cameras['back'].ffmpeg_cmds[0]['cmd'])
|
||||||
|
|
||||||
|
def test_ffmpeg_params_camera(self):
|
||||||
|
config = {
|
||||||
|
'mqtt': {
|
||||||
|
'host': 'mqtt'
|
||||||
|
},
|
||||||
|
'cameras': {
|
||||||
|
'back': {
|
||||||
|
'ffmpeg': {
|
||||||
|
'inputs': [
|
||||||
|
{ 'path': 'rtsp://10.0.0.1:554/video', 'roles': ['detect'] }
|
||||||
|
],
|
||||||
|
'input_args': ['-re']
|
||||||
|
},
|
||||||
|
'height': 1080,
|
||||||
|
'width': 1920,
|
||||||
|
'objects': {
|
||||||
|
'track': ['person', 'dog'],
|
||||||
|
'filters': {
|
||||||
|
'dog': {
|
||||||
|
'threshold': 0.7
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
frigate_config = FrigateConfig(config=config)
|
||||||
|
assert('-re' in frigate_config.cameras['back'].ffmpeg_cmds[0]['cmd'])
|
||||||
|
|
||||||
|
def test_ffmpeg_params_input(self):
|
||||||
|
config = {
|
||||||
|
'mqtt': {
|
||||||
|
'host': 'mqtt'
|
||||||
|
},
|
||||||
|
'cameras': {
|
||||||
|
'back': {
|
||||||
|
'ffmpeg': {
|
||||||
|
'inputs': [
|
||||||
|
{ 'path': 'rtsp://10.0.0.1:554/video', 'roles': ['detect'], 'input_args': ['-re'] }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
'height': 1080,
|
||||||
|
'width': 1920,
|
||||||
|
'objects': {
|
||||||
|
'track': ['person', 'dog'],
|
||||||
|
'filters': {
|
||||||
|
'dog': {
|
||||||
|
'threshold': 0.7
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
frigate_config = FrigateConfig(config=config)
|
||||||
|
assert('-re' in frigate_config.cameras['back'].ffmpeg_cmds[0]['cmd'])
|
||||||
|
|
||||||
|
|
||||||
def test_inherit_clips_retention(self):
|
def test_inherit_clips_retention(self):
|
||||||
config = {
|
config = {
|
||||||
'mqtt': {
|
'mqtt': {
|
||||||
|
Loading…
Reference in New Issue
Block a user