L’encodage en surcharge survient quand OBS n’a pas assez de ressources pour traiter l’encodage du stream ou l’enregistrement. Ça arrive souvent quand on a une seule machine pour jouer et streamer, le PC étant déjà sollicité par le jeu, si en plus on ajoute un encodage par-dessus, ça peut devenir compliqué à gérer. Mais heureusement, il existe des solutions pour contrer cette surcharge.

Qu’est-ce que l’encodage

Pour simplifier, l’encodage est un processus qui va convertir de l’information, par exemple de la vidéo ou de l’audio, en un flux compressé (ou non), que ce soit de la compression avec ou sans perte. Par exemple, pour du streaming, le flux d’origine (ce que vous avez dans OBS) est fortement compressé et le résultat est envoyé sur la plateforme de streaming. C’est d’ailleurs pour cette raison qu’il est compliqué d’obtenir une très bonne qualité de stream, notamment sur Twitch où le débit qu’on peut allouer à la compression est limité.

Pour donner une idée rapide, je ne sais pas si ça vous parlera, mais imaginez que vous vouliez streamer sur Twitch en 1080p à 60 fps. Il faudra que l’encodeur traite 1920×1080 pixels, multipliés par 60 puisque la sortie est à 60 images par seconde. Et 1920x1080x60, ça fait… un paquet de pixels à encoder à chaque seconde, et il suffit que l’encodeur soit perturbé par une charge externe pour qu’ait lieu la surcharge. Donc nous ce qu’on veut, c’est éviter ça.

obs encodeur en surcharge

Mode administrateur

La base, avant même de tripoter l’encodeur, c’est de lancer OBS en mode administrateur. Sur les autres systèmes d’exploitation, ça n’existe pas, mais avec Windows, il est toujours conseillé de le faire, ça permet de mieux répartir les ressources lors de l’utilisation d’OBS. Rien qu’avec ça, on résout la moitié des soucis de saccades, de pertes d’images ou d’encodage en surcharge.

Pour lancer OBS Studio en mode administrateur :

  1. Faire un clic droit sur le raccourci d’OBS
  2. Choisir « Exécuter ce programme en tant qu’administrateur »

Et si vous ne voulez pas refaire la manip à chaque fois :

  1. Clic droit sur le raccourci d’OBS
  2. Propriétés → onglet Compatibilité
  3. Cocher la case « Exécuter ce programme en tant qu’administrateur » et appliquer

obs mode admin

Le seul inconvénient de ça, c’est que le glisser-déposer ne fonctionnera plus dans OBS, à part ça, vous avez tout intérêt à lancer OBS en mode administrateur.

Choisir son encodeur

Avant de passer aux réglages qui vont vraiment impacter l’encodeur, assurez-vous d’avoir bien choisi votre encodeur dans les paramètres d’OBS.

Retenez juste que l’encodage peut être logiciel, avec le processeur, ou matériel, avec un élément physique qui va gérer l’encodage, comme la puce Nvenc sur les cartes graphiques NVIDIA, ou l’iGPU des processeurs Intel qui va utiliser l’encodeur Quick Sync. Ce sont des éléments précis auxquels on va confier l’encodage. Et qui dit encodage matériel, dit économie de ressources, puisque le processeur sera de fait beaucoup moins sollicité. Mais parfois, ça ne suffit pas, et l’encodage peut être surchargé, d’où les solutions qu’on va aborder.

Surcharge avec encodeur matériel

En général, sur une configuration avec un seul PC pour jouer et streamer, on privilégie l’encodage matériel. J’ai bien dit « en général », car ça reste du cas par cas. Mais si on a un message d’encodage en surcharge alors qu’on utilise en encodeur matériel, il va falloir soulager un peu le matériel en question.

Je prendrai l’exemple d’une carte graphique NVIDIA avec l’encodeur Nvenc. Si j’ai un encodage en surcharge, c’est probablement parce que le GPU est déjà fortement sollicité par le jeu. Alors je sais bien que j’ai dit que c’était une partie dédiée qui gérait l’encodage, mais cette partie a quand même besoin de jus d’électron ou de bande passante mémoire pour assurer son bon fonctionnement. Donc si tout est déjà pris par le jeu, ça peut coincer.

gpu utilisation 100 pour cent

La solution dans ce cas-là, c’est de soulager le GPU, et pour ça eh bien il n’y a pas 36 façons de faire. On peut aller dans les paramètres d’affichage du jeu et réduire les options graphiques, on peut réduire la résolution du jeu, mais surtout, ce qui va vraiment faire le taf, c’est de limiter les fps du jeu. En plus c’est vraiment bénéfique à tous les niveaux.

jeu option limiter les fps

Si vous avez un écran 144 Hz par exemple, ce n’est pas nécessairement utile d’avoir le jeu à 240 fps. Alors je sais bien que certains voudront limiter l’input lag au maximum en ayant donc le maximum de fps, mais il va falloir faire un effort quelque part. Donc dans cet exemple, si je limite les fps de mon jeu à la fréquence de rafraîchissement maxi de mon écran, donc 144 fps, mon GPU sera moins sollicité.

Conséquences : ça consommera moins, ça chauffera moins (donc ça fera moins de bruit), et on aura de la marge non seulement pour le jeu en cas de scène chargée, mais aussi de la marge pour l’encodeur, qui sera beaucoup moins perturbé puisque le GPU ne sera pas en permanence à 100 %.

Surcharge avec encodeur logiciel

Si vous utilisez un encodeur logiciel, donc typiquement le x264 avec OBS, et que vous avez un message indiquant une surcharge, c’est que le processeur est trop sollicité. Ce n’est pas forcément intuitif pour tout le monde, mais les jeux vidéo sollicitent aussi le processeur, pas seulement la carte graphique. Je pense par exemple aux options de brouillard volumétrique dans Assassin’s Creed Origins ou Watch Dogs, qui pompent sur le processeur.

jeu option nuages volumétriques

Pareil pour les jeux de gestion et de combat en temps réel comme Total War, qui vont beaucoup utiliser le processeur, à fortiori si vous voulez afficher beaucoup d’unités durant les batailles.

Bref, tout ça pour dire que l’objectif étant de soulager le processeur, on va pouvoir désactiver les options énergivores dans les options de nos jeux. Tout comme on va pouvoir fermer toutes les applications dont on n’a pas besoin pour le stream, ou les 150 onglets ouverts dans Chrome. Bref, on vire le superflu, ça soulagera le processeur, et parfois ça suffit à éviter les surcharges d’encodage.

Comment réduire la surcharge

Et si ces premiers conseils ne suffisent pas, on peut ensuite directement influer sur la charge de l’encodeur pour éviter cette fameuse surcharge. Il n’y a pas d’ordre universel dans lequel tester ces solutions, ça dépend si vous voulez conserver votre résolution ou vos fps de sortie. Personnellement, si je devais soulager l’encodeur, je commencerais par modifier ses paramètres, mais je vais quand même aborder les deux éléments qui ont le plus d’impact sur la charge de l’encodeur.

Résolution de sortie

Réduire la résolution de sortie est une solution qui fonctionne bien, et vous allez comprendre pourquoi. Si je choisis du 720p à la place du 1080p pour mon stream, en quoi cela va éviter la surcharge ? Faisons le calcul : 1280x720x60 = 55296000 pixels, c’est 2,25 fois moins que du 1080p60.

C’est comme si je voulais peindre un tableau plus petit, forcément j’irai plus vite, et si je dois faire ça en un temps limité, j’aurai moins de charge de travail. C’est exactement pareil avec l’encodage. Donc diminuer la résolution de sortie est une solution pour éviter la surcharge de l’encodage dans OBS. Et si vous cherchez une résolution adaptée à votre débit vidéo, je vous renvoie vers ma vidéo Comment choisir son bitrate pour streamer sur Twitch, qui est toujours valable puisque la limite de bitrate sur Twitch est toujours la même qu’il y a 7 ans, à savoir 8000 kbps.

Pour réduire la résolution de sortie dans OBS :

  1. Aller dans les paramètres d’OBS → menu Vidéo
  2. Choisir une résolution de sortie inférieure
  3. Cliquer sur Appliquer puis sur OK

obs résolution de sortie 936p

Notez qu’on peut définir une valeur à la main, par exemple 1664×936 qui est une résolution de sortie en 16:9 assez répandue sur Twitch car c’est un bon compromis entre taille et quantité de pixels à traiter.

Fréquence d’images

Réduire la fréquence d’images par seconde est une autre façon de faire. Et là encore, c’est purement mathématique. Je reprends l’exemple de mon stream en 1080p à 60 fps. Si au lieu de 60 images par seconde, je choisis une sortie à 30 fps, ça fait deux fois moins d’images par seconde, eh j’aurai donc deux fois moins de pixels à traiter par seconde. Là aussi, c’est logique. Si l’encodeur doit faire une tâche deux fois plus facile dans le même laps de temps, forcément, il sera moins sujet à la surcharge.

Pour réduire les fps de sortie dans OBS :

  1. Aller dans les paramètres d’OBS → menu Vidéo
  2. Choisir une valeur inférieure pour les fps de sortie
  3. Cliquer sur Appliquer puis sur OK

obs fps de sortie

Notez qu’on peut choisir autre chose que 60 ou 30 fps. Une valeur comme 50 fps est intéressante dans un premier temps, car ça réduit le nombre d’images à traiter par seconde de 16 % tout en permettant de conserver une certaine fluidité sur le stream vu qu’on est proche des 60.

Filtrage de mise à l’échelle

Une autre option à envisager, même si ce n’est pas une priorité, c’est le filtrage de mise à l’échelle, qui sera utilisé si la résolution de sortie est différente de la résolution de base. Le Lanczos donne de bons résultats mais le Bicubic est une bonne option aussi et consomme en théorie un peu moins. D’après mes tests, c’est négligeable, mais sur un PC ancien ou un peu poussif la différence pourrait être plus marquée, donc à considérer. Et pour info, le filtre Bilinéaire consomme encore moins, mais niveau qualité c’est vraiment pas terrible, donc c’est vous qui voyez, on a d’autres options sur lesquelles jouer avant d’envisager cela.

Pour modifier le filtre de mise à l’échelle dans OBS :

  1. Aller dans les paramètres d’OBS → menu Vidéo
  2. Choisir un filtrage différent comme le Bicubic
  3. Cliquer sur Appliquer puis sur OK

obs filtrage de mise à l'échelle

Notez que cette option est désormais également disponible directement dans le menu Sortie.

Réglages de l’encodeur

Ensuite on a toutes les options liées directement à l’encodeur, qui varieront selon l’encodeur, qu’il soit logiciel ou matériel. Je vais me baser sur ce qu’on peut régler dans OBS pour essayer de montrer ce qui va permettre de réduire la charge de l’encodeur.

Options sans impact

Déjà on va oublier les options qui ne changeront rien ou qu’on ne peut pas changer. Le contrôle du débit par exemple, on doit le laisser sur CBR, c’est recommandé par les plateformes de streaming. Le débit, on peut le faire varier mais il a très peu d’impact sur la charge de l’encodeur, à fortiori quand on reste dans des plages relativement faibles comme sur Twitch.

Pré-réglage

Ensuite on a le pré-réglage, c’est l’élément principal à modifier en cas de surcharge de l’encodage.

x264

Pour le x264, les pré-réglages vont de ultrafast à placebo, ultrafast étant le plus rapide et donc le moins énergivore, et placebo étant le plus lent, donc le plus qualitatif mais aussi le plus coûteux en ressources. En règle générale, on se limite au medium voire au slow sur certaines machines. Mais si l’encodage est en surcharge, on va diminuer ce pré-réglage progressivement. Ça surcharge en medium ? Passez au fast. Toujours en surcharge ? Passez au faster, et ainsi de suite, jusqu’à ce que la surcharge disparaisse.

Encodeurs matériels

Le principe sera le même avec les encodeurs matériels. Par exemple pour Nvenc, ça va de P1 à P7, P7 étant le plus qualitatif mais le plus gourmand. Si vous constatez une surcharge, diminuez d’un cran, passez de P7 à P6 par exemple, et ainsi de suite jusqu’à disparition de la surcharge. Pareil si vous utilisez Quick Sync, si ça surcharge avec le preset Qualité, descendez sur le preset Équilibré, puis sur Rapide en derniers recours. Et idem avec l’encodeur AMD ou n’importe quel autre encodeur matériel.

Profil

On peut éventuellement changer le profil de l’encodeur pour le soulager. Le profil High est dédié à la haute définition, à partir du 720p, donc c’est généralement celui qu’on utilise pour le streaming. La différence avec les autres profils, c’est qu’il permet d’utiliser d’autres options de l’encodeur. Le profil Baseline n’est quasiment plus utilisé, vous pouvez l’oublier. À partir du profil Main on peut utiliser les B-Frames par exemple, ça commence à devenir intéressant.

Pour info, le profil Main est supporté sur mobile depuis Android 6.0 (~2015), c’est son principal avantage face au profil High, qui peut parfois être plus compliqué à décoder sur d’anciens téléphones ou tablettes. Et « compliqué » est un grand mot, sur les appareils récents, il n’y a plus aucun souci avec le profil High, donc autant s’en servir.

Niveau charge de l’encodeur, la différence entre le Main et le High existe mais est assez faible. À qualité équivalente, le Main consomme même davantage puisqu’il faut compenser les options qu’on n’a pas avec le profil High, mais si on garde les mêmes réglages et qu’on change juste le profil, l’avantage ira au Main. Honnêtement, la différence de charge est quand même assez faible, donc on peut éventuellement passer au profil Main pour soulager un peu l’encodeur, mais ça concernera surtout les vieilles machines ou les PC pas très puissants, et personnellement, ce n’est pas l’option que je modifierais en priorité.

Options Nvenc

Concernant Nvenc, pour les options Réglage et Mode multipass, je vous renvoie vers la vidéo traitant des options Nvenc, j’avais testé les différences de qualité et l’impact sur les performances en jeu, pour au final retenir le réglage Haute qualité et le mode Passe unique, que je vous conseille d’utiliser pour vos streams. L’option qui peut éventuellement soulager l’encodeur ici, d’après mes tests, c’est en passant du réglage Haute qualité à Faible latence, le reste est négligeable.

obs nvenc nouveaux réglages disponibles

Prédiction (Look-ahead)

Si vous vous souvenez de ce que j’ai mentionné au sujet des fps dans les jeux, et du fait que c’était intéressant de les limiter pour ne pas que le GPU soit à fond tout le temps, eh bien le principe est le même ici. Cette option sollicite les cœurs CUDA, donc la partie de la carte graphique qui est utilisée pour les jeux. Et même si son impact est théoriquement faible, qui peut le plus peut le moins, donc c’est une option à désactiver pour soulager le GPU et indirectement l’encodeur.

Améliorations psycho-visuelles

Même topo pour les améliorations psycho-visuelles, l’option améliore la qualité mais sollicite aussi les cœurs CUDA, donc on peut la désactiver pour soulager indirectement une surcharge de l’encodage.

Nombre maximal de B-frames

En théorie les B-Frames sont intéressantes pour améliorer la qualité, mais en contrepartie ça consomme davantage de bitrate, ce qui au final peut parfois diminuer la qualité perçue. Bref, on va laisser sur 2.

Upgrader le matériel

Si avec tout ça vous avez encore un encodage en surcharge, déjà vous pouvez demander un peu d’aide sur le Discord communautaire Zero Absolu Gaming, ensuite il faudra peut-être envisager de changer de matériel pour quelque chose de plus puissant. Par exemple, si vous avez dans votre machine une carte graphique GTX 750, oui elle dispose d’une puce Nvenc, mais en fonction de ce que vous faites tourner dessus cela peut vite être surchargé, ça reste un GPU sorti en 2014… C’est vraiment la dernière étape, mais parfois ça pourra être une option.

Que changer en priorité

À titre personnel, si j’avais une surcharge d’encodage, ce que je modifierais en priorité ça serait :

  1. pré-réglage de l’encodeur si je ne veux pas changer ma résolution ni mes fps de sortie
  2. sinon résolution de sortie et fps de sortie
  3. tout le reste, dans un ordre arbitraire…

Et si vous voulez poursuivre sur la voie de l’optimisation, je peux vous proposer cette vidéo qui décrit Comment optimiser OBS Studio à 100 % pour le stream, vous y trouverez quelques astuces pour un stream toujours plus stable et quali.

Crédit miniature : https://twitter.com/Zeneles