まこと の ブログ

MaKoTo no burogu — Journal de bord…

Aller au contenu | Aller au menu | Aller à la recherche

Enregistrer une partie de jeu d'arcade avec mame

  • Quand on utilise GNU et Linux, comment faire pour enregistrer ses parties de jeux vidéo et les montrer sur le net ?

AdvanceMame2.png
Bien qu'il existe quelques tutos pour faire cela sous Windows®, je n'en ai pas trouvé pour les distributions GNU/Linux.
Je vais donc tâcher de combler ce manque et vous allez voir que si l'opération semble relativement laborieuse dans son explication, elle ne le sera pas autant que sous Windows® avec lequel on doit recourir à un tas de logiciels annexes.

  • J'écrirais donc un script qui s'occupera de faire tout le travail automatiquement.

Avant d'aller plus loin, sachez que LA GLOBULE a développé la plate forme de vidéo en ligne jammaplay permettant de poster ses meilleurs Superplay[1], avec la particularité très intéressante de prendre en charge directement le fichier INP généré par Mame.

En effet, l'enregistreur vidéo de mame est un bouffeur de ressource rendant impossible de jouer avec fluidité.
De plus il enregistre au format mng qui réclame beaucoup d'espace disque et reste inexploitable.
Par contre, il est possible de mémoriser les parties sous forme de pointeur consistant en un fichier INP qu'il est alors possible de rejouer avec l'émulateur.

1 - Enregistrer une partie :

Pour enregistrer une partie en va exécuter, respectivement soit pour l'émulateur Mame, soit pour l'émulateur AdvanceMame :

mame nom_de_la_rom -record ma_partie.inp
advmame nom_de_la_rom -record ma_partie.inp

Et jouer…
L'enregistrement s'arrête lorsqu'on quitte le jeu.

Attention, durant l'enregistrement de la partie, il ne faut faire appel à aucun menu dans l'émulateur !

Le fichier ainsi généré pèse quelques kilos, on le retrouve dans le dossier ./mame/inp.advance/inp.
Cependant il peut-être intéressant de changer ce chemin en éditant mame.iniadvmenu.rc.
C'est tout !

De mon côté, pour faciliter la récupération des INP sur ma borne, je fais ça en ajoutant des entrées pour le menu AdvanceMenu, se référer à ce billet pour plus d'infos :

ui_command "MONTER la cle USB" \
sudo mount -t vfat  -o uid=1000,gid=1000 /dev/sdb1 ~/usb/ \
killall advmenu \
advmenu

ui_command "Le jeu, Record mode" \
mame nom_de_la_rom -record ma_partie_$(date +%F_%R).inp \
killall advmenu \
advmenu

J'ai auparavant changé le chemin de destination des fichiers inp, en éditant ./advance/advmame.rc, pour y renseigner le chemin vers le dossier usb.
Ainsi une fois montée, les fichiers inp vont être directement enregistré sur la clé.

2 - Rejouer une partie :

Voilà, maintenant on va pouvoir rejouer la partie avec la commande suivante :

mame nom_de_la_rom -playback ma_partie.inp
advmame nom_de_la_rom -playback ma_partie.inp

Notez qu'en prenant les commandes du joystick on peut interrompre le playback et continuer le jeux à la place du joueur fantôme !
Attention, durant l'enregistrement de la partie, il ne faut faire appel à aucun menu dans l'émulateur sinon à la relecture, le playback s'interrompra exactement au moment où on avait appelé le menu avec le message out of sync.


3 - Générer la vidéo :

Il faut utiliser la commande de playback et demander l'écriture des fichiers audio et images animées .mng.

mame nom_de_la_rom -playback ma_partie.inp -mngwrite ma_partie.mng -wavwrite ~/.mame/snap/ma_partie.wav
advmame nom_de_la_rom -playback ma_partie.inp -mngwrite ma_partie.mng -wavwrite ~/.advance/inp/ma_partie.wav

Les fichiers ainsi générés pèsent lourd, on les retrouves dans le dossier ./mame/snap.
Le chemin du mng est fixé dans le binaire de l'émulateur, on ne peut pas le changer, et celui du wav est laissé à la charge de l'utilisateur, pour faire simple, j'ai indiqué le même chemin.

Notez qu'en sortant du jeux à n'importe quel moment, on interrompt l'enregistrement, et qu'il reste exploitable pour la suite.

On obtient donc les fichiers audio et vidéos, mais en l'état ils sont inutilisables.

4 - Convertir la vidéo :

  • On va avoir besoin de deux logiciels pour effectuer la conversion.

C'est une nouvelle fois Andrea Mazzoleni, l'auteur d'AdvanceMame qui va nous proposer le formidable outil AdvanceCOMP, qui va décoder le fichier mng en une suite de png. mencoder s'occupera de créer la vidéo depuis le fichier audio et la suite d'images.

  • Installation des softs :
sudo apt-get install advancecomp mencoder
  • Extraction des fichiers png depuis le fichier animé mng (dans le dossier courant) :
advmng -x ma_partie.mng

À la fin s'affiche ça :

ma_partie-00009715.png
ma_partie-00009716.png
60

Ce chiffre indique la fréquence d'image par secondes.

  • Conversion de la suite de fichier png en une vidéo compressée MPEG-4 + audio MP3 :
mencoder mf://*.png -mf type=png:fps=60 -ovc lavc -lavcopts vcodec=mpeg4:aspect=3/4:vqscale=2 -oac mp3lame -lameopts cbr:br=128 -audiofile ma_partie.wav -o ma_partie.mp4

fps=60, advmng nous l'a gentiment indiqué.
aspect=3/4 si le jeu est en TATE
aspect=4/3 si le jeu est en YOKO

5 - Montage vidéo avec Avidemux pour supprimer des plans… :

Étape facultative…

6 - Encoder pour diffusion sur le web avec HTML5 :

ffmpeg2theora --optimize -v 8 --artist "MaKoTo" --organization "MakotoWorkShop" --license "http://creativecommons.org/licenses/by-sa/3.0/fr/" --title "ma_partie" -o ma_partie-v8.ogv ma_partie.mp4


7 - Diffusion directe sur son site web :

Avec le code :

<video width="480" controls="controls"> 
      <source src="ma_partie-v8.ogv" type="video/ogg" /> 
</video>

Parce que youtube c'est le mal !
Un petit essai :

Je donnerais le script automatique plus tard dans un nouveau billet.

À suivre

Note

[1] Performance vidéo-ludique consistant à relever un défit personnel, comme par exemple terminer un jeu en un seul crédit (one-créditer), en une seule vie (one-lifer), ou encore faire le plus gros score pour atteindre le record mondial.

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant une syntaxe wiki simplifiée.

Fil des commentaires de ce billet