Pourquoi OBS fait chuter vos FPS en jeu, et que faire

OBS fait chuter les FPS de votre jeu parce que capturer, convertir et encoder l'image utilisent le même GPU, et parfois le même CPU, dont le jeu a besoin ; sur un GPU déjà à 100 %, chaque tâche en plus coûte des images. Les remèdes qui aident le plus : encoder sur l'encodeur matériel de votre carte graphique plutôt que sur le CPU, limiter la fréquence d'images du jeu, bien choisir la méthode de capture et masquer l'aperçu. Aucun enregistreur n'est gratuit : même dans les mesures de BriseStream, le coût n'est pas nul.

Dernière mise à jour

Pourquoi capturer coûte des images

Enregistrer ou diffuser un jeu, c'est un travail de plus sur la même machine. L'enregistreur doit recevoir chaque image du jeu, convertir ses couleurs et sa taille pour l'encodeur, l'encoder, puis l'envoyer ou l'écrire. Sur un GPU déjà pleinement utilisé par le jeu, ce travail est pris sur la part du jeu. Sur un jeu gourmand en CPU, l'encodage logiciel entre en concurrence avec les propres threads du jeu.

Il y a aussi un effet de présentation. Windows peut afficher un jeu plein écran directement (independent flip). Dans les mesures de BriseStream, capturer la fenêtre d'un jeu avec la capture propre à Windows a fait sortir le jeu de ce mode direct pour le faire composer par le bureau, ce qui explique une partie du coût et n'est pas propre à un enregistreur.

Les remèdes qui aident le plus souvent, dans l'ordre

  1. Encodez sur la carte graphique, pas sur le CPU. Dans OBS, choisissez l'encodeur matériel (NVENC chez NVIDIA, AMF chez AMD, QuickSync chez Intel) au lieu de x264. Le CPU reste libre pour le jeu. Voir l'encodage matériel expliqué.
  2. Limitez la fréquence d'images du jeu. Un jeu non limité, à plusieurs fois la fréquence de votre stream, laisse peu de temps GPU ou CPU au reste. Une limite un peu au-dessus de ce que votre écran peut afficher donne de la marge à l'enregistreur. Plusieurs fils du forum d'OBS rapportent cela comme remède.
  3. Essayez l'autre méthode de capture. Capture de jeu, de fenêtre et d'écran se comportent différemment selon les jeux ; des utilisateurs rapportent que changer, ou activer « Limiter la fréquence de capture », règle certains cas et ne change rien à d'autres. Testez un changement à la fois.
  4. Masquez l'aperçu. L'aperçu est dessiné sur le même GPU. Certains rapports disent que le désactiver supprime une chute.
  5. Ne redimensionnez pas pour rien. Faites correspondre la taille du canevas et de la sortie à ce que vous diffusez, pour que le GPU ne redimensionne pas chaque image.
  6. Baissez la charge GPU du jeu lui-même (réglages, mise à l'échelle) si le GPU est bloqué à 100 %. Un enregistreur a besoin de marge.

Ce sont les remèdes courants rapportés sur le forum d'OBS et dans des guides, pas des garanties. Les résultats varient selon le jeu, la machine et la version d'OBS.

Ce que BriseStream fait autrement, et ce qu'il ne règle pas

BriseStream est construit autour des causes ci-dessus : il encode sur l'encodeur matériel, capture par Windows sans rien injecter dans le jeu, garde les images sur le GPU de la capture à l'encodeur, et ne fait aucun travail GPU quand vous ne diffusez ni n'enregistrez. Il ne supprime pas le coût sur un GPU saturé. Mesuré sur une machine (GTX 1050, 1080p) :

FPS perdus en enregistrant avec BriseStream, ADR 0012
TestFPS perdusRemarques
Jeu synthétique à environ 207 FPS, limité par le GPU3,7 à 4,9 %OBS 29.1.3 a perdu 8,4 à 8,6 % dans le même test
Counter-Strike 2 avec des bots, 220 à 290 FPSenviron 17 %Game Bar réglée sur 60 a perdu 7,5 % mais a écrit un fichier plus petit, à 30 images par seconde
Counter-Strike 2 joué par une personne, 1024x768 natif, avec le sonDans le bruit (moyenne +2,0 %, intervalle -2,1 à +6,3 %)Une perte d'environ 2 % n'est pas exclue ; le respect de l'objectif de 1 % n'est pas démontré

C'est pourquoi on dit « plus léger » et non « sans coût ». Les chiffres et leurs limites sont dans Performance.

Questions et réponses

Pourquoi OBS baisse-t-il mes FPS même avec un PC puissant ?
Parce qu'un jeu qui utilise pleinement le GPU ne laisse aucune marge. La capture, la conversion des couleurs et l'encodage prennent du temps GPU, et un jeu non limité peut aussi affamer le CPU. Un encodeur matériel et une limite d'images par seconde sont les remèdes habituels.
NVENC est-il meilleur que x264 pour les FPS du jeu ?
En général oui pour la fréquence d'images du jeu, car NVENC encode sur un moteur dédié du GPU et laisse le CPU libre, alors que x264 utilise des cœurs dont le jeu peut avoir besoin. La qualité d'image à débit donné peut différer, et les générations récentes de NVENC sont meilleures.
BriseStream coûte-t-il zéro FPS ?
Non. Dans nos mesures, il coûte de « dans le bruit » à environ 17 % selon le jeu et la charge ; l'objectif de 1 % n'est pas atteint dans toutes les configurations, et nous le disons.
Désactiver l'aperçu d'OBS aide-t-il ?
Cela peut aider : l'aperçu est dessiné sur le GPU. Certains utilisateurs rapportent une chute qui disparaît sans lui, mais d'autres, dans les mêmes fils, ont trouvé la cause ailleurs.

Sources

  1. OBS forum: "OBS Studio causing FPS drops"
  2. ADR 0012: what recording costs a game, measured against OBS
  3. ADR 0003: Windows capture and hardware encoders
  4. ADR 0029: frames are never the margin