Repository: blakeblackshear/frigate

Issue:
[Support]: New birdseye view cannot find suitable layout (dev branch)
### Describe the problem you are having

I'm on the latest dev branch, with the new "dynamic" birdseye layout, which looks like a great feature, except I keep getting this error in my logs. The layout updates once a in a while successfully, then stays on that layout and keeps producing the error again. I have lots of panoramic cameras, so I'm guessing it has to do with that? Is there any debug mode for the new birdseye layout?
2023-07-03 19:39:02.696843621  [2023-07-03 19:39:02] frigate.output                 ERROR   : Error finding appropriate birdseye layout
Nothing else in the log seems to be relevant


### Version

0.13.0-12D4A47

### Frigate config file

```yaml
ui:
  use_experimental: true

database:
  path: /db/frigate.db

birdseye:
  enabled: True
  restream: True
  mode: objects

mqtt:
  host: 10.10.22.11
  user: frigate
  password: frigatePASS1

detectors:
  coral:
    type: edgetpu

    
record:
  enabled: True
  retain:
    days: 14
    mode: motion
  events:
    pre_capture: 15
    post_capture: 15
    retain:
      default: 45
      mode: active_objects

objects:
  track:
    - person
    - bicycle
    - car
    - cat
    - dog
  filters:
    person:
      # Optional: minimum width*height of the bounding box for the detected object (default: 0)
      min_area: 500
      # Optional: maximum width*height of the bounding box for the detected object (default: 24000000)
      max_area: 100000
      # Optional: minimum width/height of the bounding box for the detected object (default: 0)
      min_ratio: 0.5
      # Optional: maximum width/height of the bounding box for the detected object (default: 24000000)
      max_ratio: 2.0
      # Optional: minimum score for the object to initiate tracking (default: shown below)
      min_score: 0.60
      # Optional: minimum decimal percentage for tracked object's computed score to be considered a true positive (default: shown below)
      threshold: 0.75

audio:
  enabled: true
  listen:
    - bark
    - scream
    - speech
    - yell
    - goat
    - chicken
    - skidding
    - tire_squeal
    - emergency_vehicle
    - smoke_detector
    - gunshot
    - glass
    - crack
    - shatter
    - smash
    - breaking



#ffmpeg:
#  input_args: -user_agent FFmpeg Frigate/0.12.0-e8d8cc4 -rtsp_transport tcp -timeout 5000000
#  global_args: -hide_banner -loglevel warning
#  output_args:
#    detect: -f rawvideo -pix_fmt yuv420p

snapshots:
  # Optional: Enable writing jpg snapshot to /media/frigate/clips (default: shown below)
  enabled: true
  # Optional: save a clean PNG copy of the snapshot image (default: shown below)
  clean_copy: True
  # Optional: print a timestamp on the snapshots (default: shown below)
  timestamp: False
  # Optional: draw bounding box on the snapshots (default: shown below)
  bounding_box: True
  # Optional: crop the snapshot (default: shown below)
  crop: True
  # Optional: height to resize the snapshot to (default: original size)
  #height: 175
  # Optional: Restrict snapshots to objects that entered any of the listed zones (default: no required zones)
  required_zones: []
  # Optional: Camera override for retention settings (default: global values)
  retain:
    # Required: Default retention days (default: shown below)
    default: 180
    # Optional: Per object retention days

go2rtc:
  streams:
[...]

  webrtc:
    candidates:
      - 10.10.22.11:8555
      - stun:8555

cameras:
  warehouse_exterior_doorbell:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/warehouse_exterior_doorbell
          roles:
            - record
            - detect
            - audio
      output_args:
        record: preset-record-generic-audio-aac
      hwaccel_args: preset-nvidia-h264
    detect:
      width: 2560
      height: 1920

  warehouse_exterior_nw:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/warehouse_exterior_nw
          roles:
            - record
        #- path: rtsp://127.0.0.1:8554/warehouse_exterior_nw_sub
        #  roles:
            - detect
      hwaccel_args: preset-nvidia-h264
    audio:
      enabled: False
    detect:
      width: 1920
      height: 1080

  warehouse_exterior_sw:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/warehouse_exterior_sw
          roles:
            - record
        - path: rtsp://127.0.0.1:8554/warehouse_exterior_sw_sub
          roles:
            - detect
      hwaccel_args: preset-nvidia-h264
    audio:
      enabled: False
    detect:
      width: 1920
      height: 1080

  warehouse_exterior_se:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/warehouse_exterior_se
          roles:
            - record
        - path: rtsp://127.0.0.1:8554/warehouse_exterior_se_sub
          roles:
            - detect
      output_args:
        record: preset-record-generic-audio-aac
      hwaccel_args: preset-nvidia-h264
    audio:
      enabled: False
    detect:
      width: 480
      height: 360
#    detect:
#      width: 2592
#      height: 1944

  warehouse_exterior_front:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/warehouse_exterior_front_sub
          roles:
            - record
        #- path: rtsp://127.0.0.1:8554/warehouse_exterior_front_sub
        #  roles:
            - detect
            - audio
      output_args:
        record: preset-record-generic-audio-aac
      hwaccel_args: preset-nvidia-h264
    detect:
      width: 1536
      height: 576
    #detect:
    #  width: 4608
    #  height: 1728

  warehouse_workbench:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/warehouse_workbench
          roles:
            - record
        - path: rtsp://127.0.0.1:8554/warehouse_workbench_sub
          roles:
            - detect
            - audio
      output_args:
        record: preset-record-generic-audio-aac
      hwaccel_args: preset-nvidia-h264
    #detect:
    #  width: 2560
    #  height: 1920
    detect:
      width: 640
      height: 480

  warehouse_interior_front:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/warehouse_interior_front
          roles:
            - record
        - path: rtsp://127.0.0.1:8554/warehouse_interior_front_sub
          roles:
            - detect
            - audio
      output_args:
        record: preset-record-generic-audio-aac
      hwaccel_args: preset-nvidia-h264
    #detect:
    #  width: 2560
    #  height: 1920
    detect:
      width: 640
      height: 480

  warehouse_interior_office:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/warehouse_interior_office
          roles:
            - record
        - path: rtsp://127.0.0.1:8554/warehouse_interior_office_sub
          roles:
            - detect
            - audio
#          input_args: -ss 00:01
      output_args:
        record: preset-record-generic-audio-aac
      hwaccel_args: preset-nvidia-h264
    detect:
      width: 704
      height: 480
#    detect:
#      width: 3840
#      height: 2160

  warehouse_interior_overview:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/warehouse_interior_overview
          roles:
            - record
#        - path: rtsp://127.0.0.1:8554/warehouse_interior_overview_sub
#          roles:
#            - detect
      hwaccel_args: preset-nvidia-h264
    audio:
      enabled: False
    detect:
      width: 1920
      height: 1080
#    detect:
#      width: 704
#      height: 480


  gp_clubhouse_gym_1:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/gp_clubhouse_gym_1
          roles:
            - record
#        - path: rtsp://127.0.0.1:8554/gp_clubhouse_gym_1_sub
#          roles:
            - detect
      hwaccel_args: preset-nvidia-h265
    detect:
      width: 2592
      height: 1944
#    detect:
#      width: 480
#      height: 360
    audio:
      enabled: False
    motion:
      mask:
        - 2592,173,2592,0,0,0,0,337
    objects:
      filters:
        bicycle:
          mask:
            - 1635,80,1886,1019,408,1059,350,177
        motorcycle:
          mask:
            - 1635,80,1886,1019,408,1059,350,177

  gp_clubhouse_gym_2:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/gp_clubhouse_gym_2
          roles:
            - record
#        - path: rtsp://127.0.0.1:8554/gp_clubhouse_gym_2_sub
#          roles:
            - detect
      hwaccel_args: preset-nvidia-h265
#    detect:
#      width: 480
#      height: 360
    detect:
      width: 2592
      height: 1944
    audio:
      enabled: False
    motion:
      mask:
        - 2592,0,0,0,0,385
    objects:
      filters:
        bicycle:
          mask:
            - 2391,1369,1261,677,1331,135,2542,274
        motorcycle:
          mask:
            - 2391,1369,1261,677,1331,135,2542,274
      
  gp_clubhouse_front_door:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/gp_clubhouse_front_door
          roles:
            - record
        - path: rtsp://127.0.0.1:8554/gp_clubhouse_front_door_sub
          roles:
            - detect
      hwaccel_args: preset-nvidia-h264
    detect:
      width: 480
      height: 360
#    detect:
#      width: 2592
#      height: 1944
    audio:
      enabled: False

  gp_clubhouse_back_door:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/gp_clubhouse_back_door
          roles:
            - record
        - path: rtsp://127.0.0.1:8554/gp_clubhouse_back_door_sub
          roles:
            - detect
      hwaccel_args: preset-nvidia-h264
    detect:
      width: 480
      height: 360
    audio:
      enabled: False
#    detect:
#      width: 2592
#      height: 1944

  gp_clubhouse_banquet:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/gp_clubhouse_banquet
          roles:
            - record
        - path: rtsp://127.0.0.1:8554/gp_clubhouse_banquet_sub
          roles:
            - detect
      hwaccel_args: preset-nvidia-h264
    detect:
      width: 480
      height: 360
    audio:
      enabled: False
#    detect:
#      width: 2592
#      height: 1944
      
  gp_clubhouse_pool_porch:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/gp_clubhouse_pool_porch
          roles:
            - record
#        - path: rtsp://127.0.0.1:8554/gp_clubhouse_pool_porch_sub
#          roles:
            - detect
      hwaccel_args: preset-nvidia-h264
    zones:
      gp_clubhouse_pool_deck:
        coordinates: 1920,0,1920,1080,0,1080,0,0
    detect:
      width: 1920
      height: 1080
    audio:
      enabled: False
#    detect:
#      width: 704
#      height: 480

      
  gp_clubhouse_pool:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/gp_clubhouse_pool
          roles:
            - record
        - path: rtsp://127.0.0.1:8554/gp_clubhouse_pool_sub
          roles:
            - detect
            - audio
      output_args:
        record: preset-record-generic-audio-aac
      hwaccel_args: preset-nvidia-h265
#    zones:
#      gp_clubhouse_pool_deck:
#        coordinates: 5120,1440,5120,0,2701,0,2004,1440
    detect:
#      width: 5120
#      height: 1440
      width: 1920
      height: 536
      
  gp_clubhouse_firepit:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/gp_clubhouse_firepit
          roles:
            - record
#        - path: rtsp://127.0.0.1:8554/gp_clubhouse_firepit_sub
#          roles:
            - detect
            - audio
      output_args:
        record: preset-record-generic-audio-aac
      hwaccel_args: preset-nvidia-h265
    motion:
      mask:
        - 2211,0,0,0,0,495,1795,224,1795,67,2202,62
        - 2061,1203,1952,361,1771,361,1702,1182
    objects:
      filters:
        person:
          mask:
            - 2114,1213,1610,1210,1612,366,2080,361
    zones:
      gp_clubhouse_pool_deck:
        coordinates: 3840,2160,3657,599,1531,331,0,725,0,2160
    detect:
      width: 3840
      height: 2160

  gp_clubhouse_parking:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/gp_clubhouse_parking
          roles:
            - record
        - path: rtsp://127.0.0.1:8554/gp_clubhouse_parking_sub
          roles:
            - detect
            - audio
      output_args:
        record: preset-record-generic-audio-aac
      hwaccel_args: preset-nvidia-h265
    detect:
      width: 1920
      height: 536
#      width: 5120
#      height: 1440
      
  gp636_doorbell:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/gp636_doorbell
          roles:
            - record
            - detect
            - audio
      output_args:
        record: preset-record-generic-audio-aac
      hwaccel_args: preset-nvidia-h264
    detect:
      width: 1920
      height: 1080
    motion:
      mask:
        - 0,0,958,0,926,599,0,499
      
  gp525_doorbell:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/gp525_doorbell
          roles:
            - record
            - detect
            - audio
      output_args:
        record: preset-record-generic-audio-aac
      hwaccel_args: preset-nvidia-h264
    detect:
      width: 2560
      height: 1920
#    record:
#      retain:
#        days: 5
#        mode: all
#      events:
#        retain:
#          default: 45


  gp_entrance_75:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/gp_entrance_75
          roles:
            - record
            - detect
            - audio
      output_args:
        record: preset-record-generic-audio-aac
      hwaccel_args: preset-nvidia-h265
    detect:
      width: 1920
      height: 1080
#    record:
#      retain:
#        days: 5
#        mode: all
#      events:
#        retain:
#          default: 45

  gp_entrance_archer:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/gp_entrance_archer
          roles:
            - record
            - detect
            - audio
      output_args:
        record: preset-record-generic-audio-aac
      hwaccel_args: preset-nvidia-h265
    detect:
      width: 1920
      height: 1080
    record:
      retain:
        days: 5
        mode: all
      events:
        retain:
          default: 45

  gp_bldg_08_front:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/gp_bldg_08_front
          roles:
            - record
        - path: rtsp://127.0.0.1:8554/gp_bldg_08_front_sub
          roles:
            - detect
            - audio
      output_args:
        record: preset-record-generic-audio-aac
      hwaccel_args: preset-nvidia-h265
    detect:
      width: 1920
      height: 536
#      width: 5120
#      height: 1440
#    zones:
#      gp_bldg_alert:
#        coordinates: 0,961,0,1440,5120,1440,5120,1030,4090,139,1293,0

  gp_bldg_08_rear:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/gp_bldg_08_rear
          roles:
            - record
        - path: rtsp://127.0.0.1:8554/gp_bldg_08_rear_sub
          roles:
            - detect
            - audio
      output_args:
        record: preset-record-generic-audio-aac
      hwaccel_args: preset-nvidia-h265
    detect:
      width: 1920
      height: 536
#      width: 5120
#      height: 1440
#    zones:
#      gp_bldg_alert:
#        coordinates: 5120,1440,0,1440,0,767,1113,393,2685,308,4223,514,5120,976

  gp_bldg_03_side:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/gp_bldg_03_side
          roles:
            - record
        - path: rtsp://127.0.0.1:8554/gp_bldg_03_side_sub
          roles:
            - detect
            - audio
      output_args:
        record: preset-record-generic-audio-aac
      hwaccel_args: preset-nvidia-h265
    detect:
      width: 1920
      height: 536
```


### Relevant log output

```shell
2023-07-03 19:39:02.696843621  [2023-07-03 19:39:02] frigate.output                 ERROR   : Error finding appropriate birdseye layout
2023-07-03 19:39:09.305740242  [2023-07-03 19:39:09] frigate.output                 ERROR   : Error finding appropriate birdseye layout
2023-07-03 19:39:10.896462967  [2023-07-03 19:39:10] frigate.output                 ERROR   : Error finding appropriate birdseye layout
2023-07-03 19:39:11.645122598  [2023-07-03 19:39:11] frigate.output                 ERROR   : Error finding appropriate birdseye layout
```


### FFprobe output from your camera

```shell
N/A
```


### Frigate stats

```json
{"cpu_usages":{"1":{"cmdline":"/package/admin/s6/command/s6-svscan -d4 -- /run/service","cpu":"0.0","cpu_average":"0","mem":"0.0"},"15":{"cmdline":"s6-supervise s6-linux-init-shutdownd","cpu":"0.0","cpu_average":"0","mem":"0.0"},"17":{"cmdline":"/package/admin/s6-linux-init/command/s6-linux-init-shutdownd -c /run/s6/basedir -g 3000 -C -B","cpu":"0.0","cpu_average":"0","mem":"0.0"},"24":{"cmdline":"s6-supervise frigate","cpu":"0.0","cpu_average":"0","mem":"0.0"},"25":{"cmdline":"s6-supervise go2rtc-healthcheck","cpu":"0.0","cpu_average":"0","mem":"0.0"},"26":{"cmdline":"s6-supervise go2rtc-log","cpu":"0.0","cpu_average":"0","mem":"0.0"},"27":{"cmdline":"s6-supervise nginx-log","cpu":"0.0","cpu_average":"0","mem":"0.0"},"28":{"cmdline":"s6-supervise nginx","cpu":"0.0","cpu_average":"0","mem":"0.0"},"29":{"cmdline":"s6-supervise go2rtc","cpu":"0.0","cpu_average":"0","mem":"0.0"},"30":{"cmdline":"s6-supervise frigate-log","cpu":"0.0","cpu_average":"0","mem":"0.0"},"31":{"cmdline":"s6-supervise s6rc-oneshot-runner","cpu":"0.0","cpu_average":"0","mem":"0.0"},"32":{"cmdline":"s6-supervise s6rc-fdholder","cpu":"0.0","cpu_average":"0","mem":"0.0"},"40":{"cmdline":"/package/admin/s6-2.11.3.0/command/s6-fdholderd -1 -i data/rules","cpu":"0.0","cpu_average":"0","mem":"0.0"},"42":{"cmdline":"/package/admin/s6/command/s6-ipcserverd -1 -- /package/admin/s6/command/s6-ipcserver-access -v0 -E -l0 -i data/rules -- /package/admin/s6/command/s6-sudod -t 30000 -- /package/admin/s6-rc/command/s6-rc-oneshot-run -l ../.. --","cpu":"0.0","cpu_average":"0","mem":"0.0"},"80":{"cmdline":"s6-log -b -- T 1 n0 s10000000 T /dev/shm/logs/nginx","cpu":"0.0","cpu_average":"0","mem":"0.0"},"81":{"cmdline":"s6-log -b -- T 1 n0 s10000000 T /dev/shm/logs/go2rtc","cpu":"0.0","cpu_average":"0","mem":"0.0"},"82":{"cmdline":"s6-log -b -- T 1 n0 s10000000 T /dev/shm/logs/frigate","cpu":"0.5","cpu_average":"0","mem":"0.0"},"89":{"cmdline":"/usr/local/go2rtc/bin/go2rtc -config=/dev/shm/go2rtc.yaml","cpu":"97.2","cpu_average":"87","mem":"0.0"},"97":{"cmdline":"bash ./run.user go2rtc-healthcheck","cpu":"0.0","cpu_average":"0","mem":"0.0"},"98":{"cmdline":"python3 -u -m frigate","cpu":"15.8","cpu_average":"25","mem":"1.9"},"117":{"cmdline":"nginx: master process nginx","cpu":"0.0","cpu_average":"0","mem":"0.0"},"139":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"140":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"141":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"142":{"cmdline":"nginx: worker process","cpu":"0.5","cpu_average":"0","mem":"0.0"},"143":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"144":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"146":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"153":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"163":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"174":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"189":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"207":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"229":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"259":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"286":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"328":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"390":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"444":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"499":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"549":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"598":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"638":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"671":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"703":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"737":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"772":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"806":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"833":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"872":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"927":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1005":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1066":{"cmdline":"nginx: worker process","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1297":{"cmdline":"frigate.logger       ","cpu":"0.0","cpu_average":"0","mem":"0.2"},"1314":{"cmdline":"frigate.recording_manager","cpu":"51.6","cpu_average":"20","mem":"0.5"},"1322":{"cmdline":"/usr/bin/python3 -c from multiprocessing.resource_tracker import main;main(85)","cpu":"1.9","cpu_average":"1","mem":"0.0"},"1323":{"cmdline":"frigate.detector.coral","cpu":"70.2","cpu_average":"66","mem":"0.3"},"1324":{"cmdline":"frigate.output       ","cpu":"79.3","cpu_average":"111","mem":"0.3"},"1331":{"cmdline":"frigate.process:warehouse_exterior_doorbell","cpu":"1.9","cpu_average":"4","mem":"0.4"},"1332":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 2560x1920 -i pipe: -f mpegts -s 960x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1333":{"cmdline":"frigate.process:warehouse_exterior_nw","cpu":"6.7","cpu_average":"10","mem":"0.3"},"1334":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 1920x1080 -i pipe: -f mpegts -s 1280x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1335":{"cmdline":"frigate.process:warehouse_exterior_sw","cpu":"14.3","cpu_average":"32","mem":"0.3"},"1336":{"cmdline":"frigate.process:warehouse_exterior_se","cpu":"16.7","cpu_average":"17","mem":"0.3"},"1339":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 1920x1080 -i pipe: -f mpegts -s 1280x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1340":{"cmdline":"frigate.process:warehouse_exterior_front","cpu":"18.6","cpu_average":"16","mem":"0.3"},"1344":{"cmdline":"frigate.process:warehouse_workbench","cpu":"16.7","cpu_average":"9","mem":"0.3"},"1346":{"cmdline":"frigate.process:warehouse_interior_front","cpu":"9.5","cpu_average":"8","mem":"0.3"},"1347":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 480x360 -i pipe: -f mpegts -s 960x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1349":{"cmdline":"frigate.process:warehouse_interior_office","cpu":"15.7","cpu_average":"14","mem":"0.3"},"1351":{"cmdline":"frigate.process:warehouse_interior_overview","cpu":"16.7","cpu_average":"10","mem":"0.3"},"1352":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 1536x576 -i pipe: -f mpegts -s 1920x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1353":{"cmdline":"frigate.process:gp_clubhouse_gym_1","cpu":"4.3","cpu_average":"17","mem":"0.4"},"1355":{"cmdline":"frigate.process:gp_clubhouse_gym_2","cpu":"36.7","cpu_average":"14","mem":"0.4"},"1356":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 640x480 -i pipe: -f mpegts -s 960x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1357":{"cmdline":"frigate.process:gp_clubhouse_front_door","cpu":"22.4","cpu_average":"19","mem":"0.3"},"1359":{"cmdline":"frigate.process:gp_clubhouse_back_door","cpu":"23.3","cpu_average":"16","mem":"0.3"},"1362":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 640x480 -i pipe: -f mpegts -s 960x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1363":{"cmdline":"frigate.process:gp_clubhouse_banquet","cpu":"14.7","cpu_average":"15","mem":"0.3"},"1366":{"cmdline":"frigate.process:gp_clubhouse_pool_porch","cpu":"2.4","cpu_average":"4","mem":"0.3"},"1367":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 704x480 -i pipe: -f mpegts -s 1056x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1368":{"cmdline":"frigate.process:gp_clubhouse_pool","cpu":"13.8","cpu_average":"14","mem":"0.3"},"1369":{"cmdline":"frigate.process:gp_clubhouse_firepit","cpu":"4.8","cpu_average":"11","mem":"0.3"},"1372":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 1920x1080 -i pipe: -f mpegts -s 1280x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1373":{"cmdline":"frigate.process:gp_clubhouse_parking","cpu":"20.0","cpu_average":"16","mem":"0.3"},"1374":{"cmdline":"frigate.process:gp636_doorbell","cpu":"5.2","cpu_average":"13","mem":"0.3"},"1376":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 2592x1944 -i pipe: -f mpegts -s 960x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1377":{"cmdline":"frigate.process:gp525_doorbell","cpu":"13.8","cpu_average":"16","mem":"0.4"},"1379":{"cmdline":"frigate.process:gp_entrance_75","cpu":"15.7","cpu_average":"14","mem":"0.3"},"1381":{"cmdline":"frigate.process:gp_entrance_archer","cpu":"6.2","cpu_average":"18","mem":"0.3"},"1382":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 2592x1944 -i pipe: -f mpegts -s 960x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1383":{"cmdline":"frigate.process:gp_bldg_08_front","cpu":"19.5","cpu_average":"13","mem":"0.3"},"1386":{"cmdline":"frigate.process:gp_bldg_08_rear","cpu":"18.1","cpu_average":"14","mem":"0.3"},"1388":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 480x360 -i pipe: -f mpegts -s 960x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1390":{"cmdline":"frigate.process:gp_bldg_03_side","cpu":"24.2","cpu_average":"18","mem":"0.3"},"1392":{"cmdline":"frigate.capture:warehouse_exterior_doorbell","cpu":"11.9","cpu_average":"9","mem":"0.3"},"1396":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 480x360 -i pipe: -f mpegts -s 960x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1397":{"cmdline":"frigate.capture:warehouse_exterior_nw","cpu":"4.8","cpu_average":"4","mem":"0.3"},"1400":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/warehouse_exterior_doorbell -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac /tmp/cache/warehouse_exterior_doorbell-%Y%m%d%H%M%S.mp4 -r 5 -vf fps=5,scale_cuda=w=2560:h=1920:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"21.9","cpu_average":"19","mem":"0.6"},"1401":{"cmdline":"frigate.capture:warehouse_exterior_sw","cpu":"4.8","cpu_average":"4","mem":"0.3"},"1402":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 480x360 -i pipe: -f mpegts -s 960x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1403":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/warehouse_exterior_nw -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c copy -an /tmp/cache/warehouse_exterior_nw-%Y%m%d%H%M%S.mp4 -r 5 -vf fps=5,scale_cuda=w=1920:h=1080:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"10.0","cpu_average":"8","mem":"0.4"},"1407":{"cmdline":"frigate.capture:warehouse_exterior_se","cpu":"1.0","cpu_average":"0","mem":"0.3"},"1410":{"cmdline":"frigate.capture:warehouse_exterior_front","cpu":"2.4","cpu_average":"2","mem":"0.3"},"1411":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/warehouse_exterior_sw_sub -r 5 -vf fps=5,scale_cuda=w=1920:h=1080:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"8.6","cpu_average":"8","mem":"0.4"},"1415":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 1920x1080 -i pipe: -f mpegts -s 1280x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1416":{"cmdline":"frigate.capture:warehouse_workbench","cpu":"1.0","cpu_average":"0","mem":"0.3"},"1417":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/warehouse_exterior_se_sub -r 5 -vf fps=5,scale_cuda=w=480:h=360:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"3.3","cpu_average":"3","mem":"0.4"},"1419":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/warehouse_exterior_front_sub -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac /tmp/cache/warehouse_exterior_front-%Y%m%d%H%M%S.mp4 -r 5 -vf fps=5,scale_cuda=w=1536:h=576:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"6.7","cpu_average":"7","mem":"0.4"},"1423":{"cmdline":"frigate.capture:warehouse_interior_front","cpu":"0.5","cpu_average":"0","mem":"0.3"},"1427":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 1920x536 -i pipe: -f mpegts -s 2579x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.1"},"1430":{"cmdline":"frigate.capture:warehouse_interior_office","cpu":"1.9","cpu_average":"1","mem":"0.3"},"1433":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 3840x2160 -i pipe: -f mpegts -s 1280x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1434":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/warehouse_interior_office_sub -r 5 -vf fps=5,scale_cuda=w=704:h=480:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"4.3","cpu_average":"3","mem":"0.4"},"1435":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/warehouse_workbench_sub -r 5 -vf fps=5,scale_cuda=w=640:h=480:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"3.3","cpu_average":"3","mem":"0.4"},"1436":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/warehouse_exterior_sw -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c copy -an /tmp/cache/warehouse_exterior_sw-%Y%m%d%H%M%S.mp4","cpu":"1.4","cpu_average":"0","mem":"0.0"},"1441":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/warehouse_exterior_se -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac /tmp/cache/warehouse_exterior_se-%Y%m%d%H%M%S.mp4","cpu":"0.5","cpu_average":"1","mem":"0.0"},"1442":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 1920x536 -i pipe: -f mpegts -s 2579x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1443":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/warehouse_workbench -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac /tmp/cache/warehouse_workbench-%Y%m%d%H%M%S.mp4","cpu":"7.6","cpu_average":"7","mem":"0.0"},"1444":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/warehouse_interior_front_sub -r 5 -vf fps=5,scale_cuda=w=640:h=480:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"3.8","cpu_average":"3","mem":"0.4"},"1445":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/warehouse_interior_office -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac /tmp/cache/warehouse_interior_office-%Y%m%d%H%M%S.mp4","cpu":"0.5","cpu_average":"0","mem":"0.0"},"1446":{"cmdline":"frigate.capture:warehouse_interior_overview","cpu":"5.7","cpu_average":"4","mem":"0.3"},"1451":{"cmdline":"frigate.capture:gp_clubhouse_gym_1","cpu":"21.4","cpu_average":"10","mem":"0.3"},"1452":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 1920x1080 -i pipe: -f mpegts -s 1280x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1453":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/warehouse_interior_overview -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c copy -an /tmp/cache/warehouse_interior_overview-%Y%m%d%H%M%S.mp4 -r 5 -vf fps=5,scale_cuda=w=1920:h=1080:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"8.5","cpu_average":"8","mem":"0.4"},"1456":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/warehouse_interior_front -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac /tmp/cache/warehouse_interior_front-%Y%m%d%H%M%S.mp4","cpu":"7.6","cpu_average":"7","mem":"0.0"},"1457":{"cmdline":"frigate.capture:gp_clubhouse_gym_2","cpu":"10.9","cpu_average":"10","mem":"0.3"},"1461":{"cmdline":"frigate.capture:gp_clubhouse_front_door","cpu":"0.9","cpu_average":"0","mem":"0.3"},"1462":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_clubhouse_gym_1 -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c copy -an /tmp/cache/gp_clubhouse_gym_1-%Y%m%d%H%M%S.mp4 -r 5 -vf fps=5,scale_cuda=w=2592:h=1944:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"21.4","cpu_average":"15","mem":"0.5"},"1463":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 2560x1920 -i pipe: -f mpegts -s 960x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1466":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_clubhouse_gym_2 -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c copy -an /tmp/cache/gp_clubhouse_gym_2-%Y%m%d%H%M%S.mp4 -r 5 -vf fps=5,scale_cuda=w=2592:h=1944:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"16.1","cpu_average":"15","mem":"0.5"},"1467":{"cmdline":"frigate.capture:gp_clubhouse_back_door","cpu":"0.9","cpu_average":"0","mem":"0.3"},"1468":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_clubhouse_front_door_sub -r 5 -vf fps=5,scale_cuda=w=480:h=360:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"2.8","cpu_average":"3","mem":"0.4"},"1472":{"cmdline":"frigate.capture:gp_clubhouse_banquet","cpu":"0.9","cpu_average":"0","mem":"0.3"},"1478":{"cmdline":"frigate.capture:gp_clubhouse_pool_porch","cpu":"5.2","cpu_average":"4","mem":"0.3"},"1479":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 1920x1080 -i pipe: -f mpegts -s 1280x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1480":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_clubhouse_back_door_sub -r 5 -vf fps=5,scale_cuda=w=480:h=360:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"3.3","cpu_average":"3","mem":"0.4"},"1483":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_clubhouse_front_door -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c copy -an /tmp/cache/gp_clubhouse_front_door-%Y%m%d%H%M%S.mp4","cpu":"1.9","cpu_average":"0","mem":"0.0"},"1484":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_clubhouse_banquet_sub -r 5 -vf fps=5,scale_cuda=w=480:h=360:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"3.3","cpu_average":"3","mem":"0.4"},"1485":{"cmdline":"frigate.capture:gp_clubhouse_pool","cpu":"2.8","cpu_average":"2","mem":"0.3"},"1489":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_clubhouse_pool_porch -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c copy -an /tmp/cache/gp_clubhouse_pool_porch-%Y%m%d%H%M%S.mp4 -r 5 -vf fps=5,scale_cuda=w=1920:h=1080:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"9.5","cpu_average":"8","mem":"0.4"},"1491":{"cmdline":"frigate.capture:gp_clubhouse_firepit","cpu":"26.1","cpu_average":"14","mem":"0.3"},"1496":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_clubhouse_pool_sub -r 5 -vf fps=5,scale_cuda=w=1920:h=536:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"8.5","cpu_average":"7","mem":"0.4"},"1497":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 1920x1080 -i pipe: -f mpegts -s 1280x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1498":{"cmdline":"frigate.capture:gp_clubhouse_parking","cpu":"4.7","cpu_average":"2","mem":"0.3"},"1499":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_clubhouse_back_door -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c copy -an /tmp/cache/gp_clubhouse_back_door-%Y%m%d%H%M%S.mp4","cpu":"0.9","cpu_average":"0","mem":"0.0"},"1500":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_clubhouse_banquet -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c copy -an /tmp/cache/gp_clubhouse_banquet-%Y%m%d%H%M%S.mp4","cpu":"0.9","cpu_average":"0","mem":"0.0"},"1506":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_clubhouse_firepit -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac /tmp/cache/gp_clubhouse_firepit-%Y%m%d%H%M%S.mp4 -r 5 -vf fps=5,scale_cuda=w=3840:h=2160:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"55.0","cpu_average":"31","mem":"0.6"},"1507":{"cmdline":"frigate.capture:gp636_doorbell","cpu":"4.3","cpu_average":"4","mem":"0.3"},"1510":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_clubhouse_parking_sub -r 5 -vf fps=5,scale_cuda=w=1920:h=536:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"8.5","cpu_average":"7","mem":"0.4"},"1511":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_clubhouse_pool -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac /tmp/cache/gp_clubhouse_pool-%Y%m%d%H%M%S.mp4","cpu":"6.6","cpu_average":"3","mem":"0.0"},"1513":{"cmdline":"frigate.capture:gp525_doorbell","cpu":"14.2","cpu_average":"9","mem":"0.3"},"1514":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 1920x536 -i pipe: -f mpegts -s 2579x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1515":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp636_doorbell -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac /tmp/cache/gp636_doorbell-%Y%m%d%H%M%S.mp4 -r 5 -vf fps=5,scale_cuda=w=1920:h=1080:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"11.8","cpu_average":"14","mem":"0.4"},"1520":{"cmdline":"frigate.capture:gp_entrance_75","cpu":"6.2","cpu_average":"4","mem":"0.3"},"1522":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp525_doorbell -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac /tmp/cache/gp525_doorbell-%Y%m%d%H%M%S.mp4 -r 5 -vf fps=5,scale_cuda=w=2560:h=1920:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"24.6","cpu_average":"18","mem":"0.9"},"1526":{"cmdline":"frigate.capture:gp_entrance_archer","cpu":"6.2","cpu_average":"4","mem":"0.3"},"1527":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 1920x536 -i pipe: -f mpegts -s 2579x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1530":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_entrance_75 -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac /tmp/cache/gp_entrance_75-%Y%m%d%H%M%S.mp4 -r 5 -vf fps=5,scale_cuda=w=1920:h=1080:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"19.9","cpu_average":"16","mem":"0.5"},"1532":{"cmdline":"frigate.capture:gp_bldg_08_front","cpu":"1.4","cpu_average":"2","mem":"0.3"},"1538":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_entrance_archer -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac /tmp/cache/gp_entrance_archer-%Y%m%d%H%M%S.mp4 -r 5 -vf fps=5,scale_cuda=w=1920:h=1080:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"19.9","cpu_average":"16","mem":"0.4"},"1540":{"cmdline":"frigate.capture:gp_bldg_08_rear","cpu":"4.3","cpu_average":"2","mem":"0.3"},"1541":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 1920x536 -i pipe: -f mpegts -s 2579x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1542":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_bldg_08_front_sub -r 5 -vf fps=5,scale_cuda=w=1920:h=536:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"4.7","cpu_average":"7","mem":"0.4"},"1546":{"cmdline":"frigate.capture:gp_bldg_03_side","cpu":"2.4","cpu_average":"2","mem":"0.3"},"1551":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_bldg_08_rear_sub -r 5 -vf fps=5,scale_cuda=w=1920:h=536:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"9.0","cpu_average":"7","mem":"0.4"},"1553":{"cmdline":"ffmpeg -f rawvideo -pix_fmt yuv420p -video_size 1280x720 -i pipe: -f mpegts -s 1280x720 -codec:v mpeg1video -q 8 -bf 0 pipe:","cpu":"12.3","cpu_average":"10","mem":"0.1"},"1554":{"cmdline":"frigate.audio_manager","cpu":"43.6","cpu_average":"45","mem":"0.4"},"1556":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_bldg_03_side_sub -r 5 -vf fps=5,scale_cuda=w=1920:h=536:format=nv12,hwdownload,format=nv12,format=yuv420p -threads 2 -f rawvideo -pix_fmt yuv420p pipe:","cpu":"6.6","cpu_average":"7","mem":"0.4"},"1591":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -rtsp_transport tcp -timeout 5000000 -vn -i rtsp://127.0.0.1:8554/warehouse_exterior_doorbell -f s16le -ar 16000 -ac 1 -y /tmp/cache/warehouse_exterior_doorbell-audio","cpu":"1.4","cpu_average":"1","mem":"0.0"},"1592":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_bldg_03_side -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac /tmp/cache/gp_bldg_03_side-%Y%m%d%H%M%S.mp4","cpu":"7.6","cpu_average":"3","mem":"0.0"},"1597":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -rtsp_transport tcp -timeout 5000000 -vn -i rtsp://127.0.0.1:8554/warehouse_exterior_front_sub -f s16le -ar 16000 -ac 1 -y /tmp/cache/warehouse_exterior_front-audio","cpu":"0.9","cpu_average":"0","mem":"0.0"},"1600":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -rtsp_transport tcp -timeout 5000000 -vn -i rtsp://127.0.0.1:8554/warehouse_workbench_sub -f s16le -ar 16000 -ac 1 -y /tmp/cache/warehouse_workbench-audio","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1608":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -rtsp_transport tcp -timeout 5000000 -vn -i rtsp://127.0.0.1:8554/warehouse_interior_front_sub -f s16le -ar 16000 -ac 1 -y /tmp/cache/warehouse_interior_front-audio","cpu":"0.5","cpu_average":"0","mem":"0.0"},"1611":{"cmdline":"","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1615":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -rtsp_transport tcp -timeout 5000000 -vn -i rtsp://127.0.0.1:8554/gp_clubhouse_pool_sub -f s16le -ar 16000 -ac 1 -y /tmp/cache/gp_clubhouse_pool-audio","cpu":"1.4","cpu_average":"0","mem":"0.0"},"1618":{"cmdline":"","cpu":"0.0","cpu_average":"0","mem":"0.0"},"1621":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -rtsp_transport tcp -timeout 5000000 -vn -i rtsp://127.0.0.1:8554/gp_clubhouse_parking_sub -f s16le -ar 16000 -ac 1 -y /tmp/cache/gp_clubhouse_parking-audio","cpu":"1.4","cpu_average":"0","mem":"0.0"},"1624":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -rtsp_transport tcp -timeout 5000000 -vn -i rtsp://127.0.0.1:8554/gp636_doorbell -f s16le -ar 16000 -ac 1 -y /tmp/cache/gp636_doorbell-audio","cpu":"0.5","cpu_average":"0","mem":"0.0"},"1627":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -rtsp_transport tcp -timeout 5000000 -vn -i rtsp://127.0.0.1:8554/gp525_doorbell -f s16le -ar 16000 -ac 1 -y /tmp/cache/gp525_doorbell-audio","cpu":"2.4","cpu_average":"1","mem":"0.0"},"1635":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -rtsp_transport tcp -timeout 5000000 -vn -i rtsp://127.0.0.1:8554/gp_entrance_75 -f s16le -ar 16000 -ac 1 -y /tmp/cache/gp_entrance_75-audio","cpu":"1.4","cpu_average":"1","mem":"0.0"},"1639":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -rtsp_transport tcp -timeout 5000000 -vn -i rtsp://127.0.0.1:8554/gp_entrance_archer -f s16le -ar 16000 -ac 1 -y /tmp/cache/gp_entrance_archer-audio","cpu":"2.4","cpu_average":"1","mem":"0.0"},"1642":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -rtsp_transport tcp -timeout 5000000 -vn -i rtsp://127.0.0.1:8554/gp_bldg_08_front_sub -f s16le -ar 16000 -ac 1 -y /tmp/cache/gp_bldg_08_front-audio","cpu":"1.4","cpu_average":"0","mem":"0.0"},"1645":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -rtsp_transport tcp -timeout 5000000 -vn -i rtsp://127.0.0.1:8554/gp_bldg_08_rear_sub -f s16le -ar 16000 -ac 1 -y /tmp/cache/gp_bldg_08_rear-audio","cpu":"0.9","cpu_average":"0","mem":"0.0"},"1648":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -rtsp_transport tcp -timeout 5000000 -vn -i rtsp://127.0.0.1:8554/gp_bldg_03_side_sub -f s16le -ar 16000 -ac 1 -y /tmp/cache/gp_bldg_03_side-audio","cpu":"0.9","cpu_average":"0","mem":"0.0"},"4109":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_bldg_08_rear -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac /tmp/cache/gp_bldg_08_rear-%Y%m%d%H%M%S.mp4","cpu":"6.6","cpu_average":"3","mem":"0.0"},"4553":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_bldg_08_front -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac /tmp/cache/gp_bldg_08_front-%Y%m%d%H%M%S.mp4","cpu":"3.3","cpu_average":"3","mem":"0.0"},"4557":{"cmdline":"ffmpeg -hide_banner -f rawvideo -pix_fmt yuv420p -video_size 1280x720 -r 10 -i /tmp/cache/birdseye -c:v libx264 -g 50 -profile:v high -level:v 4.1 -preset:v superfast -tune:v zerolatency -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:8554/9df16074a160b6458a3ade3d834288af","cpu":"21.4","cpu_average":"24","mem":"0.1"},"76045":{"cmdline":"sleep 30s","cpu":"0.0","cpu_average":"0","mem":"0.0"},"76734":{"cmdline":"ffmpeg -hide_banner -loglevel warning -threads 2 -hwaccel cuda -hwaccel_output_format cuda -user_agent FFmpeg Frigate/0.13.0-12d4a47 -avoid_negative_ts make_zero -fflags +genpts+discardcorrupt -rtsp_transport tcp -timeout 5000000 -use_wallclock_as_timestamps 1 -i rtsp://127.0.0.1:8554/gp_clubhouse_parking -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac /tmp/cache/gp_clubhouse_parking-%Y%m%d%H%M%S.mp4","cpu":"0.0","cpu_average":"0","mem":"0.0"}},"detection_fps":98.5,"detectors":{"coral":{"detection_start":1688427623.311403,"inference_speed":9.84,"pid":1323}},"gp525_doorbell":{"camera_fps":5.1,"capture_pid":1513,"detection_enabled":1,"detection_fps":4.2,"ffmpeg_pid":1522,"pid":1377,"process_fps":4.3,"skipped_fps":0.8},"gp636_doorbell":{"camera_fps":5.0,"capture_pid":1507,"detection_enabled":1,"detection_fps":3.3,"ffmpeg_pid":1515,"pid":1374,"process_fps":5.1,"skipped_fps":0.0},"gp_bldg_03_side":{"camera_fps":5.1,"capture_pid":1546,"detection_enabled":1,"detection_fps":5.4,"ffmpeg_pid":1556,"pid":1390,"process_fps":4.7,"skipped_fps":0.2},"gp_bldg_08_front":{"camera_fps":5.0,"capture_pid":1532,"detection_enabled":1,"detection_fps":5.3,"ffmpeg_pid":1542,"pid":1383,"process_fps":4.8,"skipped_fps":0.2},"gp_bldg_08_rear":{"camera_fps":5.1,"capture_pid":1540,"detection_enabled":1,"detection_fps":4.8,"ffmpeg_pid":1551,"pid":1386,"process_fps":4.8,"skipped_fps":0.3},"gp_clubhouse_back_door":{"camera_fps":5.0,"capture_pid":1467,"detection_enabled":1,"detection_fps":6.7,"ffmpeg_pid":1480,"pid":1359,"process_fps":4.9,"skipped_fps":0.2},"gp_clubhouse_banquet":{"camera_fps":5.0,"capture_pid":1472,"detection_enabled":1,"detection_fps":4.7,"ffmpeg_pid":1484,"pid":1363,"process_fps":5.0,"skipped_fps":0.1},"gp_clubhouse_firepit":{"camera_fps":5.0,"capture_pid":1491,"detection_enabled":1,"detection_fps":0.2,"ffmpeg_pid":1506,"pid":1369,"process_fps":5.0,"skipped_fps":0.0},"gp_clubhouse_front_door":{"camera_fps":5.0,"capture_pid":1461,"detection_enabled":1,"detection_fps":8.6,"ffmpeg_pid":1468,"pid":1357,"process_fps":4.8,"skipped_fps":0.3},"gp_clubhouse_gym_1":{"camera_fps":5.1,"capture_pid":1451,"detection_enabled":1,"detection_fps":1.2,"ffmpeg_pid":1462,"pid":1353,"process_fps":5.1,"skipped_fps":0.0},"gp_clubhouse_gym_2":{"camera_fps":5.1,"capture_pid":1457,"detection_enabled":1,"detection_fps":5.5,"ffmpeg_pid":1466,"pid":1355,"process_fps":4.2,"skipped_fps":1.0},"gp_clubhouse_parking":{"camera_fps":5.0,"capture_pid":1498,"detection_enabled":1,"detection_fps":5.0,"ffmpeg_pid":1510,"pid":1373,"process_fps":5.0,"skipped_fps":0.1},"gp_clubhouse_pool":{"camera_fps":5.0,"capture_pid":1485,"detection_enabled":1,"detection_fps":5.6,"ffmpeg_pid":1496,"pid":1368,"process_fps":4.7,"skipped_fps":0.5},"gp_clubhouse_pool_porch":{"camera_fps":5.0,"capture_pid":1478,"detection_enabled":1,"detection_fps":0.0,"ffmpeg_pid":1489,"pid":1366,"process_fps":5.0,"skipped_fps":0.0},"gp_entrance_75":{"camera_fps":5.0,"capture_pid":1520,"detection_enabled":1,"detection_fps":4.9,"ffmpeg_pid":1530,"pid":1379,"process_fps":4.9,"skipped_fps":0.2},"gp_entrance_archer":{"camera_fps":5.7,"capture_pid":1526,"detection_enabled":1,"detection_fps":3.6,"ffmpeg_pid":1538,"pid":1381,"process_fps":3.1,"skipped_fps":2.3},"gpu_usages":{"NVIDIA T1000 8GB":{"gpu":"14.0%","mem":"48.66%"}},"processes":{"audioDetector":{"pid":1554},"go2rtc":{"pid":89},"logger":{"pid":1297},"recording":{"pid":1314}},"service":{"last_updated":1688427623,"latest_version":"0.12.1","storage":{"/dev/shm":{"free":1386.4,"mount_type":"tmpfs","total":1521.0,"used":134.6},"/media/frigate/clips":{"free":38004.5,"mount_type":"zfs","total":3683184.8,"used":3645180.2},"/media/frigate/recordings":{"free":38004.5,"mount_type":"zfs","total":3683184.8,"used":3645180.2},"/tmp/cache":{"free":2304.4,"mount_type":"tmpfs","total":2384.2,"used":79.8}},"temperatures":{},"uptime":1757,"version":"0.13.0-12d4a47"},"warehouse_exterior_doorbell":{"camera_fps":5.1,"capture_pid":1392,"detection_enabled":1,"detection_fps":1.0,"ffmpeg_pid":1400,"pid":1331,"process_fps":5.2,"skipped_fps":0.0},"warehouse_exterior_front":{"camera_fps":5.1,"capture_pid":1410,"detection_enabled":1,"detection_fps":5.3,"ffmpeg_pid":1419,"pid":1340,"process_fps":5.1,"skipped_fps":0.0},"warehouse_exterior_nw":{"camera_fps":5.1,"capture_pid":1397,"detection_enabled":1,"detection_fps":0.7,"ffmpeg_pid":1403,"pid":1333,"process_fps":5.1,"skipped_fps":0.0},"warehouse_exterior_se":{"camera_fps":5.1,"capture_pid":1407,"detection_enabled":1,"detection_fps":5.1,"ffmpeg_pid":1417,"pid":1336,"process_fps":5.1,"skipped_fps":0.0},"warehouse_exterior_sw":{"camera_fps":5.0,"capture_pid":1401,"detection_enabled":1,"detection_fps":5.1,"ffmpeg_pid":1411,"pid":1335,"process_fps":4.7,"skipped_fps":0.4},"warehouse_interior_front":{"camera_fps":5.1,"capture_pid":1423,"detection_enabled":1,"detection_fps":2.7,"ffmpeg_pid":1444,"pid":1346,"process_fps":5.1,"skipped_fps":0.0},"warehouse_interior_office":{"camera_fps":5.1,"capture_pid":1430,"detection_enabled":1,"detection_fps":5.1,"ffmpeg_pid":1434,"pid":1349,"process_fps":5.1,"skipped_fps":0.0},"warehouse_interior_overview":{"camera_fps":5.0,"capture_pid":1446,"detection_enabled":1,"detection_fps":1.1,"ffmpeg_pid":1453,"pid":1351,"process_fps":4.9,"skipped_fps":0.0},"warehouse_workbench":{"camera_fps":5.1,"capture_pid":1416,"detection_enabled":1,"detection_fps":3.4,"ffmpeg_pid":1435,"pid":1344,"process_fps":5.1,"skipped_fps":0.0}}
```


### Operating system

Other Linux

### Install method

Docker CLI

### Coral version

USB

### Network connection

Wired

### Camera make and model

many

### Any other information that may be helpful

_No response_


Discussion:
How many cameras are seeing objects / active at one time? This is a lot to fit in such a small space. It's possible there needs to be more attempts to find an appropriate layout based on the number of cameras that a user has. 
Is there a way to tell that directly? Based off my historical memory, I feel like there was usually about 10 cameras on average showing motion. On rare occasions, it would occasionally get up to about 18 cameras at a time. Frequently 5 of them were panoramic as I tend to have those outside where wind blowing tree branches and such activated the motion detection.

My current last birdseye update did successfully lay out 6 cameras on the screen, but none of them were panoramic. I don't think since the update I've had more then 3 of the panoramic cameras appear at once, and I'm fairly certain there is more then that active whenever the updates aren't happening.
I'll also update tonight, usually at night I only have 2-4 with motion at a time (and almost always those are all panoramic)
To be clear motion doesn't matter since you have the objects mode defined for birdseye (unless they are seeing false positives, which is possible)

If you have that many panoramic cameras it may be worth changing the birdseye resolution / aspect ratio to be 32:9 instead of 16:9
I don't know if it would be considered a "false positive" or not but many of the cameras have parked cars in the view, and during motion, even if the cars don't move, they have always shown up on the birdseye view.

I believe I have 6 panoramic cameras currently, however they are all located outside and have roads in their field of view, so they are by far my most likely to have motion/objects. Many of my normal aspect ratio cameras are indoors, so they tend to never have false motion events.

The monitor I have setup to view the cameras full time is 16:9 so I would prefer to keep that aspect ratio, but I went ahead and tested with your recommended 32:9 ratio. The error rate seems to have gone way down and I'm getting frequent updates of the layout, but even at that ratio, there is still a fair number of that error occuring.

I also feel like it might be presenting the issue a bit more though. Here's a screenshot of the layout which seems less then ideal:
![Screenshot 2023-07-03 202221](https://github.com/blakeblackshear/frigate/assets/11162258/9b15da0b-0018-4393-9744-b880584dfa9a)

That's very odd, no idea how the layout would be like that. I'll have to see if I can recreate it which should hopefully give some insight into what's happening. 
I've been continuing to experiment and tried disabling birdseye view on all the pano cameras, and I went a full 20 minutes now without errors and very sane looking layouts. I got up to 12 cameras active during the time in which they switch to nightmode (back on 16:10 for this testing).

I enabled just one pano and sure enough, it error'd super quick. 

My other observation with my setup (unrelated to my original issue, but a result of me actually getting to use the new birdseye view) is I needless to say have a ton of cameras appearing and disappearing all the time. With this new birdseye view, the cameras all move around every single time one appears or disappears, which makes it much harder to keep track of whats going on in each camera if I'm looking at it. The old birdseye view only redid the full layout when the grid size changed. Realistically, in my use, during the day that usually meant it was I believe a 4x4 grid the entire day, and during motion events, cameras would (almost) never move on the screen during the events. Using this for just 10 minutes its much harder for me to keep track of what I'm looking at with the constant resorting/movement of cameras. Also, thinking out loud, does the order I have the cameras in my config file matter to the layout?

I know you put way more thought into this then me, but I'm curious if it might be less error prone and simpler, and easier to handle if it kept the grid layout from the previous version, but made certain cameras take up multiple spots on the grid based off their aspect ratio?
> I've been continuing to experiment and tried disabling birdseye view on all the pano cameras, and I went a full 20 minutes now without errors and very sane looking layouts. I got up to 12 cameras active during the time in which they switch to nightmode (back on 16:10 for this testing).
> 
> I enabled just one pano and sure enough, it error'd super quick.

To be clear I worked on this birdseye revamp specifically because I have a pano camera and wanted it to work better with the layout. Having that many cameras is just not something I had in mind while making it, and I'll have to work on it some more to account for this larger use case.

> My other observation with my setup (unrelated to my original issue, but a result of me actually getting to use the new birdseye view) is I needless to say have a ton of cameras appearing and disappearing all the time. With this new birdseye view, the cameras all move around every single time one appears or disappears, which makes it much harder to keep track of whats going on in each camera if I'm looking at it. The old birdseye view only redid the full layout when the grid size changed. Realistically, in my use, during the day that usually meant it was I believe a 4x4 grid the entire day, and during motion events, cameras would (almost) never move on the screen during the events. Using this for just 10 minutes its much harder for me to keep track of what I'm looking at with the constant resorting/movement of cameras. Also, thinking out loud, does the order I have the cameras in my config file matter to the layout?

This change for the birdseye view does not affect the changing of the cameras / that behavior in any way. The amount of time that a camera stays in the layout has not changed. The order of the cameras in the layout is alphabetical but can be configured using 

```yaml
birdseye:
  order: X
```

where lower numbers show up first in the layout.

> I know you put way more thought into this then me, but I'm curious if it might be less error prone and simpler, and easier to handle if it kept the grid layout from the previous version, but made certain cameras take up multiple spots on the grid based off their aspect ratio?

That is mostly the goal of this however this revamp also supports portrait aspect cameras which makes things more complicated.

Think of the scenario where you have 6 cameras (which would result in a 3x3 grid previously). If the first two cameras are pano cameras then you can't fit them both on the first row and one of the pano cameras needs to go to the second row. But that means there is a grid spot in the top right that is now not taken up by anything. The order feature means that re-ordering the cameras is not an option so now there is wasted space. 
Okay I have just found the problem with your layout, 1920x536 is a non-standard aspect ratio of 240x67 which is why the layout was acting so weird. I remade the layout you showed above with standard aspect ratios and it worked just fine as expected

![Screen Shot 2023-07-03 at 19 22 17 PM](https://github.com/blakeblackshear/frigate/assets/14866235/b3039305-1054-4076-b9cf-2bff7b48b89c)


Resolving patch:
diff --git a/frigate/output.py b/frigate/output.py
--- a/frigate/output.py
+++ b/frigate/output.py
@@ -29,6 +29,61 @@
 logger = logging.getLogger(__name__)
 
 
+def get_standard_aspect_ratio(width, height) -> tuple[int, int]:
+    """Ensure that only standard aspect ratios are used."""
+    known_aspects = [
+        (16, 9),
+        (9, 16),
+        (32, 9),
+        (12, 9),
+        (9, 12),
+    ]  # aspects are scaled to have common relative size
+    known_aspects_ratios = list(
+        map(lambda aspect: aspect[0] / aspect[1], known_aspects)
+    )
+    closest = min(
+        known_aspects_ratios,
+        key=lambda x: abs(x - (width / height)),
+    )
+    return known_aspects[known_aspects_ratios.index(closest)]
+
+
+class Canvas:
+    def __init__(self, canvas_width: int, canvas_height: int) -> None:
+        gcd = math.gcd(canvas_width, canvas_height)
+        self.aspect = get_standard_aspect_ratio(
+            (canvas_width / gcd), (canvas_height / gcd)
+        )
+        self.width = canvas_width
+        self.height = (self.width * self.aspect[1]) / self.aspect[0]
+        self.coefficient_cache: dict[int, int] = {}
+        self.aspect_cache: dict[str, tuple[int, int]] = {}
+
+    def get_aspect(self, coefficient: int) -> tuple[int, int]:
+        return (self.aspect[0] * coefficient, self.aspect[1] * coefficient)
+
+    def get_coefficient(self, camera_count: int) -> int:
+        return self.coefficient_cache.get(camera_count, 2)
+
+    def set_coefficient(self, camera_count: int, coefficient: int) -> None:
+        self.coefficient_cache[camera_count] = coefficient
+
+    def get_camera_aspect(
+        self, cam_name: str, camera_width: int, camera_height: int
+    ) -> tuple[int, int]:
+        cached = self.aspect_cache.get(cam_name)
+
+        if cached:
+            return cached
+
+        gcd = math.gcd(camera_width, camera_height)
+        camera_aspect = get_standard_aspect_ratio(
+            camera_width / gcd, camera_height / gcd
+        )
+        self.aspect_cache[cam_name] = camera_aspect
+        return camera_aspect
+
+
 class FFMpegConverter:
     def __init__(
         self,
@@ -170,6 +225,7 @@ def __init__(
         self.frame_shape = (height, width)
         self.yuv_shape = (height * 3 // 2, width)
         self.frame = np.ndarray(self.yuv_shape, dtype=np.uint8)
+        self.canvas = Canvas(width, height)
         self.stop_event = stop_event
 
         # initialize the frame as black and with the Frigate logo
@@ -318,16 +374,15 @@ def update_frame(self):
                 ),
             )
 
-            canvas_width = self.config.birdseye.width
-            canvas_height = self.config.birdseye.height
-
             if len(active_cameras) == 1:
                 # show single camera as fullscreen
                 camera = active_cameras_to_add[0]
                 camera_dims = self.cameras[camera]["dimensions"].copy()
-                scaled_width = int(canvas_height * camera_dims[0] / camera_dims[1])
+                scaled_width = int(self.canvas.height * camera_dims[0] / camera_dims[1])
                 coefficient = (
-                    1 if scaled_width <= canvas_width else canvas_width / scaled_width
+                    1
+                    if scaled_width <= self.canvas.width
+                    else self.canvas.width / scaled_width
                 )
                 self.camera_layout = [
                     [
@@ -337,14 +392,14 @@ def update_frame(self):
                                 0,
                                 0,
                                 int(scaled_width * coefficient),
-                                int(canvas_height * coefficient),
+                                int(self.canvas.height * coefficient),
                             ),
                         )
                     ]
                 ]
             else:
                 # calculate optimal layout
-                coefficient = 2
+                coefficient = self.canvas.get_coefficient(len(active_cameras))
                 calculating = True
 
                 # decrease scaling coefficient until height of all cameras can fit into the birdseye canvas
@@ -353,7 +408,6 @@ def update_frame(self):
                         return
 
                     layout_candidate = self.calculate_layout(
-                        (canvas_width, canvas_height),
                         active_cameras_to_add,
                         coefficient,
                     )
@@ -367,6 +421,7 @@ def update_frame(self):
                             return
 
                     calculating = False
+                    self.canvas.set_coefficient(len(active_cameras), coefficient)
 
                 self.camera_layout = layout_candidate
 
@@ -378,9 +433,7 @@ def update_frame(self):
 
         return True
 
-    def calculate_layout(
-        self, canvas, cameras_to_add: list[str], coefficient
-    ) -> tuple[any]:
+    def calculate_layout(self, cameras_to_add: list[str], coefficient) -> tuple[any]:
         """Calculate the optimal layout for 2+ cameras."""
 
         def map_layout(row_height: int):
@@ -397,23 +450,20 @@ def map_layout(row_height: int):
                 x = starting_x
                 for cameras in row:
                     camera_dims = self.cameras[cameras[0]]["dimensions"].copy()
+                    camera_aspect = cameras[1]
 
                     if camera_dims[1] > camera_dims[0]:
                         scaled_height = int(row_height * 2)
-                        scaled_width = int(
-                            scaled_height * camera_dims[0] / camera_dims[1]
-                        )
+                        scaled_width = int(scaled_height * camera_aspect)
                         starting_x = scaled_width
                     else:
                         scaled_height = row_height
-                        scaled_width = int(
-                            scaled_height * camera_dims[0] / camera_dims[1]
-                        )
+                        scaled_width = int(scaled_height * camera_aspect)
 
                     # layout is too large
                     if (
-                        x + scaled_width > canvas_width
-                        or y + scaled_height > canvas_height
+                        x + scaled_width > self.canvas.width
+                        or y + scaled_height > self.canvas.height
                     ):
                         return 0, 0, None
 
@@ -425,13 +475,9 @@ def map_layout(row_height: int):
 
             return max_width, y, candidate_layout
 
-        canvas_width = canvas[0]
-        canvas_height = canvas[1]
+        canvas_aspect_x, canvas_aspect_y = self.canvas.get_aspect(coefficient)
         camera_layout: list[list[any]] = []
         camera_layout.append([])
-        canvas_gcd = math.gcd(canvas[0], canvas[1])
-        canvas_aspect_x = (canvas[0] / canvas_gcd) * coefficient
-        canvas_aspect_y = (canvas[0] / canvas_gcd) * coefficient
         starting_x = 0
         x = starting_x
         y = 0
@@ -439,18 +485,9 @@ def map_layout(row_height: int):
         max_y = 0
         for camera in cameras_to_add:
             camera_dims = self.cameras[camera]["dimensions"].copy()
-            camera_gcd = math.gcd(camera_dims[0], camera_dims[1])
-            camera_aspect_x = camera_dims[0] / camera_gcd
-            camera_aspect_y = camera_dims[1] / camera_gcd
-
-            if round(camera_aspect_x / camera_aspect_y, 1) == 1.8:
-                # account for slightly off 16:9 cameras
-                camera_aspect_x = 16
-                camera_aspect_y = 9
-            elif round(camera_aspect_x / camera_aspect_y, 1) == 1.3:
-                # make 4:3 cameras the same relative size as 16:9
-                camera_aspect_x = 12
-                camera_aspect_y = 9
+            camera_aspect_x, camera_aspect_y = self.canvas.get_camera_aspect(
+                camera, camera_dims[0], camera_dims[1]
+            )
 
             if camera_dims[1] > camera_dims[0]:
                 portrait = True
@@ -462,10 +499,7 @@ def map_layout(row_height: int):
                 camera_layout[y_i].append(
                     (
                         camera,
-                        (
-                            camera_aspect_x,
-                            camera_aspect_y,
-                        ),
+                        camera_aspect_x / camera_aspect_y,
                     )
                 )
 
@@ -491,7 +525,7 @@ def map_layout(row_height: int):
                 camera_layout[y_i].append(
                     (
                         camera,
-                        (camera_aspect_x, camera_aspect_y),
+                        camera_aspect_x / camera_aspect_y,
                     )
                 )
                 x += camera_aspect_x
@@ -499,15 +533,16 @@ def map_layout(row_height: int):
         if y + max_y > canvas_aspect_y:
             return None
 
-        row_height = int(canvas_height / coefficient)
+        row_height = int(self.canvas.height / coefficient)
         total_width, total_height, standard_candidate_layout = map_layout(row_height)
 
         # layout can't be optimized more
-        if total_width / canvas_width >= 0.99:
+        if total_width / self.canvas.width >= 0.99:
             return standard_candidate_layout
 
         scale_up_percent = min(
-            1 - (total_width / canvas_width), 1 - (total_height / canvas_height)
+            1 - (total_width / self.canvas.width),
+            1 - (total_height / self.canvas.height),
         )
         row_height = int(row_height * (1 + round(scale_up_percent, 1)))
         _, _, scaled_layout = map_layout(row_height)


Test patch: