diff --git a/frigate/ffmpeg_presets.py b/frigate/ffmpeg_presets.py index 043fcd529..5fea1f525 100644 --- a/frigate/ffmpeg_presets.py +++ b/frigate/ffmpeg_presets.py @@ -56,11 +56,11 @@ PRESETS_FFMPEG_HW_ACCEL = { "preset-rpi-32-h264": "h264_v4l2m2m", "preset-rpi-64-h264": "h264_v4l2m2m", "preset-vaapi": "h264_vaapi", - "preset-intel-qsv-h264": "h264_qsv", # From Sandy Bridge (gen 6) - "preset-intel-qsv-h265": "h264_qsv", # From Sandy Bridge (gen 6) + "preset-intel-qsv-h264": "h264_qsv", # From Sandy Bridge (gen 6) + "preset-intel-qsv-h265": "h264_qsv", # From Sandy Bridge (gen 6) "preset-nvidia-h264": "h264_nvenc", "preset-nvidia-h265": "h264_nvenc", - "default": "libx264", # SW codecs + "default": "libx264", # SW codecs } PRESETS_HW_ACCEL_DECODE = { @@ -198,14 +198,14 @@ def _parse_rotation_scale( elif rotate == 180: if arg.startswith("preset-vaapi") or arg.startswith("preset-intel-qsv"): transpose = "reverse" - else: # No 'reverse' option suported, then 2 'clocks' rotations - transpose = "clock,transpose=clock" + else: # No 'reverse' option suported, then 2 'clocks' rotations + transpose = "clock,transpose=clock" elif rotate == 270: - transpose = "cclock" - else : # Rotation not need or not supported + transpose = "cclock" + else: # Rotation not need or not supported return "" - return PRESETS_HW_ACCEL_SCALE_ROTATION.get(arg, "").get(mode).format(transpose) + return PRESETS_HW_ACCEL_SCALE_ROTATION.get(arg, "").get(mode, "").format(transpose) def parse_preset_hardware_acceleration_scale( @@ -218,11 +218,13 @@ def parse_preset_hardware_acceleration_scale( ) -> list[str]: """Return the correct scaling preset or default preset if none is set.""" if not isinstance(arg, str) or " " in arg: - scale = PRESETS_HW_ACCEL_SCALE["default"].format(fps, width, height, "").split(" ") + scale = ( + PRESETS_HW_ACCEL_SCALE["default"].format(fps, width, height, "").split(" ") + ) scale.extend(detect_args) return scale - transpose =_parse_rotation_scale(arg, "detect", rotate) + transpose = _parse_rotation_scale(arg, "detect", rotate) scale = PRESETS_HW_ACCEL_SCALE.get(arg, "") @@ -440,9 +442,9 @@ def parse_preset_output_record(arg: Any, hw_acc: Any, rotate: int) -> list[str]: return None audio = preset_record_video_audio["audio"] - + video = preset_record_video_audio["video"] - transpose =_parse_rotation_scale(hw_acc, "record", rotate) + transpose = _parse_rotation_scale(hw_acc, "record", rotate) if transpose != "" or not "copy" in video: encode = PRESETS_FFMPEG_HW_ACCEL.get(hw_acc, "libx264") video = transpose + " -c:v " + encode diff --git a/frigate/test/test_ffmpeg_presets.py b/frigate/test/test_ffmpeg_presets.py index e9453be1a..65c66d680 100644 --- a/frigate/test/test_ffmpeg_presets.py +++ b/frigate/test/test_ffmpeg_presets.py @@ -86,9 +86,7 @@ class TestFfmpegPresets(unittest.TestCase): ) def test_ffmpeg_hwaccel_rotate_90_preset(self): - self.default_ffmpeg["cameras"]["back"][ - "rotate" - ] = 90 + self.default_ffmpeg["cameras"]["back"]["rotate"] = 90 self.default_ffmpeg["cameras"]["back"]["ffmpeg"][ "hwaccel_args" ] = "preset-nvidia-h264" @@ -108,9 +106,7 @@ class TestFfmpegPresets(unittest.TestCase): ) def test_ffmpeg_hwaccel_rotate_180_preset(self): - self.default_ffmpeg["cameras"]["back"][ - "rotate" - ] = 180 + self.default_ffmpeg["cameras"]["back"]["rotate"] = 180 self.default_ffmpeg["cameras"]["back"]["ffmpeg"][ "hwaccel_args" ] = "preset-rpi-64-h264" @@ -119,21 +115,17 @@ class TestFfmpegPresets(unittest.TestCase): "width": 2560, "fps": 10, } - frigate_config = FrigateConfig(**self.default_ffmpeg) frigate_config.cameras["back"].create_ffmpeg_cmds() assert "preset-rpi-64-h264" not in ( " ".join(frigate_config.cameras["back"].ffmpeg_cmds[0]["cmd"]) ) - assert ( - "-r 10 -vf transpose=clock,transpose=clock -s 2560x1920" - in (" ".join(frigate_config.cameras["back"].ffmpeg_cmds[0]["cmd"])) + assert "-r 10 -vf transpose=clock,transpose=clock -s 2560x1920" in ( + " ".join(frigate_config.cameras["back"].ffmpeg_cmds[0]["cmd"]) ) def test_ffmpeg_hwaccel_rotate_180_vaapi_preset(self): - self.default_ffmpeg["cameras"]["back"][ - "rotate" - ] = 180 + self.default_ffmpeg["cameras"]["back"]["rotate"] = 180 self.default_ffmpeg["cameras"]["back"]["ffmpeg"][ "hwaccel_args" ] = "preset-vaapi" @@ -142,7 +134,6 @@ class TestFfmpegPresets(unittest.TestCase): "width": 2560, "fps": 10, } - frigate_config = FrigateConfig(**self.default_ffmpeg) frigate_config.cameras["back"].create_ffmpeg_cmds() assert "preset-vaapi" not in ( @@ -154,9 +145,7 @@ class TestFfmpegPresets(unittest.TestCase): ) def test_ffmpeg_hwaccel_rotate_180_qsv_preset(self): - self.default_ffmpeg["cameras"]["back"][ - "rotate" - ] = 180 + self.default_ffmpeg["cameras"]["back"]["rotate"] = 180 self.default_ffmpeg["cameras"]["back"]["ffmpeg"][ "hwaccel_args" ] = "preset-intel-qsv-h264" @@ -165,7 +154,6 @@ class TestFfmpegPresets(unittest.TestCase): "width": 2560, "fps": 10, } - frigate_config = FrigateConfig(**self.default_ffmpeg) frigate_config.cameras["back"].create_ffmpeg_cmds() assert "preset-intel-qsv-h264" not in ( @@ -177,9 +165,7 @@ class TestFfmpegPresets(unittest.TestCase): ) def test_ffmpeg_hwaccel_rotate_270_preset(self): - self.default_ffmpeg["cameras"]["back"][ - "rotate" - ] = 270 + self.default_ffmpeg["cameras"]["back"]["rotate"] = 270 self.default_ffmpeg["cameras"]["back"]["ffmpeg"][ "hwaccel_args" ] = "preset-nvidia-h264" @@ -199,9 +185,7 @@ class TestFfmpegPresets(unittest.TestCase): ) def test_ffmpeg_hwaccel_rotate_wrong_preset(self): - self.default_ffmpeg["cameras"]["back"][ - "rotate" - ] = 20 + self.default_ffmpeg["cameras"]["back"]["rotate"] = 20 self.default_ffmpeg["cameras"]["back"]["ffmpeg"][ "hwaccel_args" ] = "preset-nvidia-h264" @@ -244,7 +228,7 @@ class TestFfmpegPresets(unittest.TestCase): assert "preset-rtmp-generic" not in ( " ".join(frigate_config.cameras["back"].ffmpeg_cmds[0]["cmd"]) ) - assert (" ".join(parse_preset_input("preset-rtmp-generic", 5))) in ( + assert " ".join(parse_preset_input("preset-rtmp-generic", 5)) in ( " ".join(frigate_config.cameras["back"].ffmpeg_cmds[0]["cmd"]) ) @@ -292,16 +276,13 @@ class TestFfmpegPresets(unittest.TestCase): ) def test_ffmpeg_output_record_rotate_90_preset(self): - self.default_ffmpeg["cameras"]["back"][ - "rotate" - ] = 90 + self.default_ffmpeg["cameras"]["back"]["rotate"] = 90 self.default_ffmpeg["cameras"]["back"]["ffmpeg"][ "hwaccel_args" ] = "preset-nvidia-h264" self.default_ffmpeg["cameras"]["back"]["ffmpeg"]["output_args"][ "record" ] = "preset-record-generic-audio-aac" - frigate_config = FrigateConfig(**self.default_ffmpeg) frigate_config.cameras["back"].create_ffmpeg_cmds() assert "preset-record-generic-audio-aac" not in ( @@ -312,16 +293,13 @@ class TestFfmpegPresets(unittest.TestCase): ) def test_ffmpeg_output_record_rotate_180_preset(self): - self.default_ffmpeg["cameras"]["back"][ - "rotate" - ] = 180 + self.default_ffmpeg["cameras"]["back"]["rotate"] = 180 self.default_ffmpeg["cameras"]["back"]["ffmpeg"][ "hwaccel_args" ] = "preset-rpi-64-h264" self.default_ffmpeg["cameras"]["back"]["ffmpeg"]["output_args"][ "record" ] = "preset-record-generic-audio-aac" - frigate_config = FrigateConfig(**self.default_ffmpeg) frigate_config.cameras["back"].create_ffmpeg_cmds() assert "preset-rpi-64-h264" not in ( @@ -332,16 +310,13 @@ class TestFfmpegPresets(unittest.TestCase): ) def test_ffmpeg_output_record_rotate_180_vaapi_preset(self): - self.default_ffmpeg["cameras"]["back"][ - "rotate" - ] = 180 + self.default_ffmpeg["cameras"]["back"]["rotate"] = 180 self.default_ffmpeg["cameras"]["back"]["ffmpeg"][ "hwaccel_args" ] = "preset-vaapi" self.default_ffmpeg["cameras"]["back"]["ffmpeg"]["output_args"][ "record" ] = "preset-record-generic-audio-aac" - frigate_config = FrigateConfig(**self.default_ffmpeg) frigate_config.cameras["back"].create_ffmpeg_cmds() assert "preset-vaapi" not in ( @@ -352,16 +327,13 @@ class TestFfmpegPresets(unittest.TestCase): ) def test_ffmpeg_output_record_rotate_180_qsv_preset(self): - self.default_ffmpeg["cameras"]["back"][ - "rotate" - ] = 180 + self.default_ffmpeg["cameras"]["back"]["rotate"] = 180 self.default_ffmpeg["cameras"]["back"]["ffmpeg"][ "hwaccel_args" ] = "preset-intel-qsv-h264" self.default_ffmpeg["cameras"]["back"]["ffmpeg"]["output_args"][ "record" ] = "preset-record-generic-audio-aac" - frigate_config = FrigateConfig(**self.default_ffmpeg) frigate_config.cameras["back"].create_ffmpeg_cmds() assert "preset-intel-qsv-h264" not in ( @@ -372,16 +344,13 @@ class TestFfmpegPresets(unittest.TestCase): ) def test_ffmpeg_output_record_rotate_270_preset(self): - self.default_ffmpeg["cameras"]["back"][ - "rotate" - ] = 270 + self.default_ffmpeg["cameras"]["back"]["rotate"] = 270 self.default_ffmpeg["cameras"]["back"]["ffmpeg"][ "hwaccel_args" ] = "preset-nvidia-h264" self.default_ffmpeg["cameras"]["back"]["ffmpeg"]["output_args"][ "record" ] = "preset-record-generic-audio-aac" - frigate_config = FrigateConfig(**self.default_ffmpeg) frigate_config.cameras["back"].create_ffmpeg_cmds() assert "preset-nvidia-h264" not in ( @@ -392,16 +361,13 @@ class TestFfmpegPresets(unittest.TestCase): ) def test_ffmpeg_output_record_rotate_wrong_preset(self): - self.default_ffmpeg["cameras"]["back"][ - "rotate" - ] = 20 + self.default_ffmpeg["cameras"]["back"]["rotate"] = 20 self.default_ffmpeg["cameras"]["back"]["ffmpeg"][ "hwaccel_args" ] = "preset-nvidia-h264" self.default_ffmpeg["cameras"]["back"]["ffmpeg"]["output_args"][ "record" ] = "preset-record-generic-audio-aac" - frigate_config = FrigateConfig(**self.default_ffmpeg) frigate_config.cameras["back"].create_ffmpeg_cmds() assert "preset-nvidia-h264" not in (