Un petit post pour expliquer l’utilisation de apitrace pour capturer des vidéos de gameplay, l’idée vient de ce post: http://kivy.org/planet/2011/06/recording-opengl-output-to-h264-video/
Pourquoi utiliser apitrace plutôt que des logiciels tels que FRAPS ?
FRAPS et autre logiciels ont tendance à rendre compliquer la capture de séquence de gameplay en haute qualité, mon objectif était aussi de pouvoir capturer des séquences sans avoir besoin de logiciels payant, ou d’un ordinateur plus puissant.
Un autre problème de FRAPS est par défaut le manque de fidélité des couleurs (il existe une option pour changer cela, mais au prix d’encore plus de puissance, surtout pour capturer un jeu en 60 fps) et l’algorithme de compression qui réduit la qualité finale de la capture. Vu que Reckpunk est un jeu dont les graphismes repose sur un style avec des bordure de 1 pixel, le résultat avec FRAPS ou PlayClaw est plutôt mauvais, ce qui m’as poussé à chercher comment capturer des séquences de gameplay sous forme de fichiers png.
A propos de apitrace
Je reprend ici la description du site officiel :
apitrace est un ensemble d’outils pour:
- enregistrer des appel aux API OpenGL, OpenGL ES, D3D et DDraw dans un fichier
- rejouer les appel aux API depuis un fichier, sur n’importe quelle machine, et pour OpenGL et OpenGL ES, sur n’importe quel système d’exploitation.
En résumé, il faut créer tout d’abord un fichier trace, et puis le rejouer pour générer des images png pour chaque frames, que nous pouvons ensuite joindre dans une vidéo via un logiciel comme Virtual dub
Comment capturer une séquence de gameplay
Tout d’abord, téléchargez apitrace depuis le site officiel, http://apitrace.github.io/ Dans le répertoire bin, nous retrouvons divers programmes, apitrace et glretrace sont les seuls que nous allons utiliser.
Réaliser la capture:
apitrace trace [chemin vers l'exécutable]
Cela génère un fichier trace dans le répertoire courant, avec le même nom que l’exécutable.
Générer une séquence de fichiers png:
glretrace -sr [chemin vers le fichier trace] --call-nos=false --snapshot-format=RGB
cela génère un fichier png pour chaque frames, et les stockent dans l’ordre (avec l’option –call-nos=false, par défaut, le nom du fichier utilise un nombre généré, ce que l’on ne veut pas ici)
Créer un fichier vidéo
Chargez le premier fichier png de la séquence avec Virtual dub, les fichiers étant dans l’ordre, Virtual dub va automatiquement importer l’ensemble de la séquence. Nous pouvons également sélectionner une image au milieu de la séquence, Virtual dub chargera alors uniquement les fichiers qui suivent l’image sélectionnée.
N’oubliez pas de changer le framerate source, dans video>framerate dans source rate, mettre la valeur 60 (si votre jeu tourne à 60 fps).
Si vous voulez générer un fichier gif, il faut utiliser la conversion de framerate, juste au dessous. une valeur de 30 dans convert fps fonctionne plutôt bien, vous pouvez aussi utiliser l’option « Process every other frame (decimate by 2) » ( le résultat est relativement similaire, à tester si la première option ne donne pas un résultat fluide).
Si vous ne voulez qu’une partie de l’image, utiliser le filtre null transform pour rogner le résultat final (plutôt utile pour limiter la taille d’un gif).
Exportez en avi, et nous avons votre vidéo avec une excellent fluidité ! Avec les paramètres par défaut, le résultat final reste plutôt moyen niveau qualité de rendu. La prochaine fois, j’aborderai la partie concernant la génération d’une vidéo HD depuis notre séquence de gameplay.