FFMEPG - Frigate consommation cpu

Bonjour,

Dans un premier temps, très belle année à tous !

Je me permets de créer ce sujet car je ne sais comment faire pour optimiser mon installation frigate. Actuellement il tourne sur un ordinateur portable dédié sous debian et sous un docker dédié uniquement à frigate (l’ordinateur ne sert qu’a faire tourner frigate).

Cependant, plus je mets de caméra (activée / avec enregistrement) plus le CPU est à 100% et par conséquence :

  • Je ne peux consulter le flux en direct de façon fluide
  • Les enregistrements sauvegardés sur un NAS externe sont non fluides et saccadés par conséquent je ne peux reconstituer une vidéo entièrement.

Exemple : l’enregistrement est activé sur la caméra X, sa filme, puis 3 secondes après sa se met à jour du coup j’ai loupé les 2 secondes d’avant (non enregistrées) etc.

J’ai actuellement 5 flux RTSP sur mon frigate.

Voici ma configuration frigate :

mqtt:
  enabled: true
  host: X
  user: X
  password: X

ffmpeg:
  hwaccel_args: preset-vaapi

  
go2rtc:
  streams:
    camera_salon_principal:
      - rtsp://X:X@X554/stream1
    camera_salon_secondaire:
      - rtsp://X:X@X:554/stream2
  webrtc:
    listen: 8555
    candidate: 
      - 127.0.0.1:8555
      - X:8555

record:
  enabled: true
  retain:
    days: 7
    mode: motion

cameras:
  tapo-ext-double-cam-fixe: 
    enabled: true
    ffmpeg:
      inputs:
        - path: 
            rtsp://X:X@X:554/stream1
          roles:
            - record
    detect:
      enabled: false
    objects:
      track:
        - person
    snapshots:
      enabled: true
    record:
      enabled: true

  tapo-ext-double-cam-mobile: 
    enabled: true
    ffmpeg:
      inputs:
        - path: 
            rtsp://X:X@X:554/stream6
          roles:
            - record
    detect:
      enabled: false
    objects:
      track:
        - person 
    onvif:
      host: X
      port: 2020
      user: X
      password: X
    snapshots:
      enabled: true
    record:
      enabled: true
      
  tapo-cam-salon:
    enabled: true
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/camera_salon_principal
          roles:
            - record
        - path: rtsp://127.0.0.1:8554/camera_salon_secondaire
          roles:
            - detect
    live:
      streams:
        main_stream: camera_salon_principal
        sub_stream : camera_salon_secondaire

    onvif:
      host: X
      port: 2020
      user: X
      password: X

    detect:
      enabled: false
    objects:
      track:
        - person
    snapshots:
      enabled: true
    record:
      enabled: true

  tapo-cam-sdj:
    enabled: true
    ffmpeg:
      inputs:
        - path: rtsp://X:X@X:554/stream1
          roles:
            - record
        - path: rtsp://X:X@X:554/stream2
          roles:
            - detect
    #live:
     # streams:
       # main_stream: camera_sdj_principal
       # sub_stream : camera_sdj_secondaire

    onvif:
      host: X
      port: 2020
      user: X
      password: X

    detect:
      enabled: false
    objects:
      track:
        - person
    snapshots:
      enabled: true
    record:
      enabled: true

  tapo-cam-garage:
    enabled: true
    ffmpeg:
      inputs:
        - path: rtsp://X:X@X:554/stream1
          roles:
            - record

    onvif:
      host:  X
      port: 2020
      user: X
      password: X

    detect:
      enabled: false
    objects:
      track:
        - person
    snapshots:
      enabled: true
    record:
      enabled: true

version: 0.16-0

Le GPU lui est très peu utilisé 4% environ, en analysant les logs frigate : RAS juste un message indiquant que FFMPEG consomme un peu trop sur les caméras et un message CPU.

CPU detectors are not recommended and should only be used for testing or for trial purposes.

Voici mon fichier docker compose :

services:
  frigate:
    container_name: frigate
    privileged: true
    restart: unless-stopped
    image: ghcr.io/blakeblackshear/frigate:stable
    shm_size: '2g'
    devices:
      - /dev/dri:/dev/dri
    volumes:
      - ./config:/config
      - /mnt/nas/frigate:/media/frigate
      - type: tmpfs
        target: /tmp/cache
        tmpfs:
          size: 4096m
    ports:
      - "8555:8555"
      - "8971:8971"

En analysant directement sur le serveur on voit bien que c’est ffmpeg qui consomme quand même pas mal pour chaque camera !

Finalement, j’ai basculé l’ensemble des flux de mes cameras en 720P pour limiter la consommation.

Savez-vous ce que je pourrais faire pour ameliorer la consommation du CPU s’il vous plait ?

En vous remerciant par avance,
Clément.

J’ai réussi à régler le problème.
Me servant uniquement de frigate pour sa partie enregistrement !

Voici ce que j’ai mis pour chaque camera :

detect:
enabled: false
width: 640
height: 360
fps: 3

  • width / height
    → résolution des images internes analysées par Frigate
    → plus c’est petit, moins il y a de pixels à traiter
    → donc moins de CPU
  • fps
    → nombre d’images par seconde que Frigate traite en interne
    → ça n’affecte pas la vidéo enregistrée
    → ça réduit fortement la charge CPU

En pratique :

  • la caméra continue d’enregistrer en pleine qualité
  • Frigate “regarde” seulement 3 images par seconde en 640×360
  • au lieu de 720p / 5 fps par défaut

En conclusion :
Ça force Frigate à traiter des images internes plus petites et moins fréquentes, ce qui baisse fortement le CPU, sans toucher à la qualité des vidéos enregistrées. Je suis passé à 8% de CPU/CAM contre +30% avant.

2 « J'aime »

Ce sujet a été automatiquement fermé après 2 jours. Aucune réponse n’est permise dorénavant.