mirror of
https://github.com/blakeblackshear/frigate.git
synced 2025-06-04 01:16:52 +02:00
use quality value and faster resize
This commit is contained in:
parent
61f717daa3
commit
17179abf5a
@ -23,8 +23,8 @@ from frigate.util import SharedMemoryFrameManager, get_yuv_crop, copy_yuv_to_pos
|
|||||||
|
|
||||||
|
|
||||||
class FFMpegConverter:
|
class FFMpegConverter:
|
||||||
def __init__(self, in_width, in_height, out_width, out_height, bitrate):
|
def __init__(self, in_width, in_height, out_width, out_height, quality):
|
||||||
ffmpeg_cmd = f"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size {in_width}x{in_height} -i pipe: -f mpegts -s {out_width}x{out_height} -codec:v mpeg1video -b:v {bitrate} -bf 0 pipe:".split(
|
ffmpeg_cmd = f"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size {in_width}x{in_height} -i pipe: -f mpegts -s {out_width}x{out_height} -codec:v mpeg1video -q {quality} -bf 0 pipe:".split(
|
||||||
" "
|
" "
|
||||||
)
|
)
|
||||||
self.process = sp.Popen(
|
self.process = sp.Popen(
|
||||||
@ -73,7 +73,7 @@ class BroadcastThread(threading.Thread):
|
|||||||
|
|
||||||
|
|
||||||
class BirdsEyeFrameManager:
|
class BirdsEyeFrameManager:
|
||||||
def __init__(self, config, frame_manager: SharedMemoryFrameManager, height, width):
|
def __init__(self, config, frame_manager: SharedMemoryFrameManager, width, height):
|
||||||
self.config = config
|
self.config = config
|
||||||
self.frame_manager = frame_manager
|
self.frame_manager = frame_manager
|
||||||
self.frame_shape = (height, width)
|
self.frame_shape = (height, width)
|
||||||
@ -242,8 +242,8 @@ class BirdsEyeFrameManager:
|
|||||||
|
|
||||||
now = datetime.datetime.now().timestamp()
|
now = datetime.datetime.now().timestamp()
|
||||||
|
|
||||||
# limit output to ~24 fps
|
# limit output to 10 fps
|
||||||
if (now - self.last_output_time) < 0.04:
|
if (now - self.last_output_time) < 1 / 10:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
self.last_output_time = now
|
self.last_output_time = now
|
||||||
@ -283,13 +283,13 @@ def output_frames(config, video_output_queue):
|
|||||||
|
|
||||||
for camera, cam_config in config.cameras.items():
|
for camera, cam_config in config.cameras.items():
|
||||||
converters[camera] = FFMpegConverter(
|
converters[camera] = FFMpegConverter(
|
||||||
cam_config.frame_shape[1], cam_config.frame_shape[0], 640, 320, "1000k"
|
cam_config.frame_shape[1], cam_config.frame_shape[0], 640, 320, 8
|
||||||
)
|
)
|
||||||
broadcasters[camera] = BroadcastThread(
|
broadcasters[camera] = BroadcastThread(
|
||||||
camera, converters[camera], websocket_server
|
camera, converters[camera], websocket_server
|
||||||
)
|
)
|
||||||
|
|
||||||
converters["birdseye"] = FFMpegConverter(1920, 1080, 1280, 720, "2000k")
|
converters["birdseye"] = FFMpegConverter(1280, 720, 1280, 720, 8)
|
||||||
broadcasters["birdseye"] = BroadcastThread(
|
broadcasters["birdseye"] = BroadcastThread(
|
||||||
"birdseye", converters["birdseye"], websocket_server
|
"birdseye", converters["birdseye"], websocket_server
|
||||||
)
|
)
|
||||||
@ -299,7 +299,7 @@ def output_frames(config, video_output_queue):
|
|||||||
for t in broadcasters.values():
|
for t in broadcasters.values():
|
||||||
t.start()
|
t.start()
|
||||||
|
|
||||||
birdseye_manager = BirdsEyeFrameManager(config, frame_manager, 1080, 1920)
|
birdseye_manager = BirdsEyeFrameManager(config, frame_manager, 1280, 720)
|
||||||
|
|
||||||
while not stop_event.is_set():
|
while not stop_event.is_set():
|
||||||
try:
|
try:
|
||||||
|
@ -277,7 +277,7 @@ def copy_yuv_to_position(
|
|||||||
# clear v2
|
# clear v2
|
||||||
destination_frame[v2[1] : v2[3], v2[0] : v2[2]] = 128
|
destination_frame[v2[1] : v2[3], v2[0] : v2[2]] = 128
|
||||||
else:
|
else:
|
||||||
interpolation = cv2.INTER_AREA
|
interpolation = cv2.INTER_LINEAR
|
||||||
# resize/copy y channel
|
# resize/copy y channel
|
||||||
destination_frame[y[1] : y[3], y[0] : y[2]] = cv2.resize(
|
destination_frame[y[1] : y[3], y[0] : y[2]] = cv2.resize(
|
||||||
source_frame[
|
source_frame[
|
||||||
|
Loading…
Reference in New Issue
Block a user