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
- 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é.
- 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.
- 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.
- Masquez l'aperçu. L'aperçu est dessiné sur le même GPU. Certains rapports disent que le désactiver supprime une chute.
- 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.
- 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) :
| Test | FPS perdus | Remarques |
|---|---|---|
| Jeu synthétique à environ 207 FPS, limité par le GPU | 3,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 FPS | environ 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 son | Dans 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.