[VIDEO] Sous-titrage, quelle solution mettre en oeuvre ?

Des soucis pour hacker votre jeu ? C'est ici qu'il faut exposer votre problème.
Avatar de l’utilisateur
Dark Magus
Nouveau Floodeur
Messages : 43
Inscription : 20 mai 2006, 19:30
Localisation : Toulouse
Contact :

[VIDEO] Sous-titrage, quelle solution mettre en oeuvre ?

Message non lu par Dark Magus »

Bonjour à tous ^^

Comme beaucoup le savent, je travaille sur la traduction de Grandia 2 PC. Le hacking est pratiquement terminé, et la traduction des textes approche les 20 %. Mais je rencontre quelques difficultés avec le sous-titrage des vidéos.

J'aimerais dans le mesure du possible ne pas avoir à faire télécharger aux joueurs les quelques 130 Mo de vidéos sous-titrées (pour des raisons de temps de téléchargement (je pense aux rares qui ont encore une connexion lente), mais aussi peut être un peu pour des raisons légales...).

J'ai donc plusieurs options; mais pour certaines, j'ignore si elles sont réalisables.

1) Faire télécharger les vidéos sous-titrées, mais je préfèrerais éviter cette solution

2) Ne fournir que les sous titres en SRT ou SSA, et faire installer au joueur le codec DirectVobSub/VSFilter... Sauf que, je ne pense pas qu'il puisse afficher les sous-titres lorsque l'on joue (en tout cas je n'ai pas réussi). De plus, vu les risques liés aux codecs (conflicts de codecs, etc...), le joueur risque de ne pas voir les sous-titres quand bien même ce codec serait installé...

2.5) Un peu comme la 2, mais en créant moi-même le plugin de sous-titrage, pour l'adapter au jeu. Sauf que je ne sais pas si je pourrai forcer le jeu à utiliser mon plugin...

3) Ne fournir que les sous-titres en SRT ou SSA, et faire un script qui sera exécuté sur l'ordinateur du joueur, et qui "incrustera" les sous-titres dans la vidéo, non pas juste en recopiant le contenu du fichier de sous-titres dans un chunk "txts" (car cela nécessiterait le codec DirectVobSub/VSFilter, et poserait donc le même problème que la 2) mais plutôt en effectuant le rendu de la vidéo et en la ré-encodant... Avec le problème de perte de qualité en plus...

4) Créer un programme qui s'attache au processus de Grandia 2 et qui détecte quand la vidéo est lancée, et affiche les sous-titres en overlay... Mais les overlays ne sont apparement pas très bien supportés sur certains configurations qui datent un peu (mais pourtant plus que suffisantes pour lancer Grandia 2).

5) En étudiant le format AVI, j'ai vu qu'on pouvait faire en sorte qu'un flux vidéo n'occupe pas tout l'espace de rendu. Vu que l'on peut mettre plusieurs flux dans un conteneur AVI, j'ai supposé que l'on pouvait mettre deux flux vidéo de taille différente, l'un étant l'exacte copie du flux vidéo d'origine (donc pas de problème de perte de qualité puisqu'il n'y a pas de réencodage), l'autre affichant les sous-titres (sous forme de flux vidéo, donc pas besoin de codec en plus). Cette solution m'intéresse particulièrement, mais je ne sais pas si la lecture simultanée de deux flux vidéos est possible (et il n'est pas aisé de réaliser en vitesse une vidéo "de test"), et même si elle l'est, il faut se soucier des performances... Si quelqu'un a des infos sur cette piste, je suis preneur.

Voilà à priori les solutions possibles, sachant qu'elles ne sont sans doute pas toutes réalisables. Si quelqu'un a une meilleure solution, qu'il n'hésite pas à m'en faire part.

Merci d'avance à tous ^^
- Projet en cours chez Terminus : traduction française de Grandia 2 PC
- Forum du projet : https://www.grandia2fr.ovh/phpBB3/

Avatar de l’utilisateur
Graou
SHIKAAAA
Messages : 819
Inscription : 31 août 2004, 20:50
Localisation : Sous un pont
Contact :

Re: Sous-titrage de vidéos, quelle solution mettre en oeuvre ?

Message non lu par Graou »

J'ai été confronté à un problème similaire il n'y a pas si longtemps que ça. La solution la plus élégante (de mon point de vue), et passablement la plus chiante à mettre en oeuvre, est de s'arranger pour que les sous-titres soient ajoutés à la volée sur ta vidéo. Bref ça revient à rajouter un filtre genre ceux que tu citent dans le graphe directshow de lecture des vidéos de ton exécutable. Ce qui implique de repérer le code de construction du graphe DirectShow de ton jeu et de le modifier de telle manière que tu puisses insérer un filtre supplémentaire (en supposant que ton jeu utilise DirectShow ce qui a des chances d'être le cas). Une bonne méthode pour ajouter ton propre code est de faire charger par le process du jeu une dll que tu as toi-même écrite et ensuite d'appeler les méthodes de cette même dll depuis le code du jeu. Ca permet de faire un minimum d'assembleur et de coder les nouvelles fonctionnalités dans un langage plus haut niveau. L'avantage de cette méthode est qu'elle permet de fournir des sous-titres en plusieurs langues avec le patch, et de choisir au runtime celui qui est utilisé.

Si tu te fous du côté multilangage, alors je te conseille d'oublier tout ce que je viens de dire et d'utiliser ta solution 3 : faire hardcoder les sous-titres sur les vidéos par un script.

P.S. En fait la solution 3 est tout aussi viable pour le multilangage à condition de sélectionner les sous-titres à utiliser à l'installation par exemple. Donc c'est un très bon compromis rendu/temps perdu!

Avatar de l’utilisateur
Dark Magus
Nouveau Floodeur
Messages : 43
Inscription : 20 mai 2006, 19:30
Localisation : Toulouse
Contact :

Re: Sous-titrage de vidéos, quelle solution mettre en oeuvre ?

Message non lu par Dark Magus »

Le problème de la solution 3, c'est que si jamais il nous vient en tête de modifier les sous-titres d'une vidéo, il faudra la vidéo d'origine... Bon, on peut toujours faire une sauvegarde.

Sinon je viens de chercher un peu plus sur la solution 5, j'ai réussi à faire un fichier AVI avec deux flux vidéo... Mais que ce soit Windows Media Player ou le jeu, le second flux est ignoré. Seul VLC m'affiche le second flux.

Pour en revenir à la solution avec un script, c'est en effet la plus simple à mettre en oeuvre, mais je me demandais quelle solution utiliser. AVISynth est-il une bonne solution ? Ou y a-t-il des solutions plus "transparentes", du genre en ligne de commande ?

La solution de la DLL quant à elle m'intéresse également, car je suis féru de exe-hacking (avec tout ce que j'ai déjà fait pour permettre la traduction de ce jeu : prise en charge des caractères accentué, cracking des algos de compression, regroupement des textes dans une nouvelle section de données, etc...). Ca m'intéresse d'autant plus que je n'ai jamais utilisé cette technique, et que je veux toujours en savoir plus ^^. Je pense que je vais approfondir cette piste (j'avais déjà, il y a quelques temps, examiné comment le jeu traitait les vidéos, et c'est bien du DirectShow). Je ne me rabattrai que sur la solution du script si je rencontre un os.

En tout cas merci bien pour les conseils ^^
- Projet en cours chez Terminus : traduction française de Grandia 2 PC
- Forum du projet : https://www.grandia2fr.ovh/phpBB3/

Avatar de l’utilisateur
Machin
Maître en Flood
Messages : 337
Inscription : 28 mai 2003, 16:25

Re: Sous-titrage de vidéos, quelle solution mettre en oeuvre ?

Message non lu par Machin »

Le HardSub me semble la solution la plus simple mais malheureusement la moins élégante. Après tu peux toujours te procurer les vidéos japonaises pour avoir les voix originales et mettre tes sous-titres en hardsub. La meilleur solution serait de réencode une premiere fois la video en AVI Lowless (Non Compresser) avec Virtual Dub ce qui te donnera des gros fichiers vidéos et ensuite les réencoder avec les sous-titres avec le codec qui est supportée par le jeu, l'idéal serait de garder un bitrate équivalent au départ.
Machin

Avatar de l’utilisateur
Jonath lé là
Il est là !
Messages : 2006
Inscription : 01 mars 2002, 16:53
Localisation : Nancy
Contact :

Re: Sous-titrage de vidéos, quelle solution mettre en oeuvre ?

Message non lu par Jonath lé là »

Oui pour le hardcodage. Tout simplement parce que c'est pas Direct Show sous PS2 et DC (enfin ça m'étonerait). Et autant faire d'une pierre trois coups. Surtout que les gens sous windows sont équipés comme des patates niveau codec, et que bonjour la SAV si tu leur donne une solution dépassant le double-clic. T'as qu'à mettre ça sur un réseau pair à pair.
Promouvoir et soutenir le logiciel libre

Avatar de l’utilisateur
shoros
Dieu Suprême du flood
Messages : 1091
Inscription : 23 déc. 2007, 21:57
Localisation : Rouen

Re: Sous-titrage de vidéos, quelle solution mettre en oeuvre ?

Message non lu par shoros »

Déjà tu vas galérer avec les utilisateurs finaux pour leur expliquer comment patcher (dernier bel exemple en date: xenogears), alors si en plus tu dois leur faire installer directvobsub autant te tirer une balle!

Sur DC ca doit etre du mpeg sofdec en toute logique, je me souviens que je pouvais lire les videos sur le pc mais je ne sais plus grâce à quel codec...

Avatar de l’utilisateur
Graou
SHIKAAAA
Messages : 819
Inscription : 31 août 2004, 20:50
Localisation : Sous un pont
Contact :

Re: Sous-titrage de vidéos, quelle solution mettre en oeuvre ?

Message non lu par Graou »

Il y a moyen de taper directement sur le filtre (que ce soit de sous-titres ou de décompression) dans le code, et donc de simplifier la démarche pour le pékin lambda en fournissant les filtres nécessaires avec le patch. Mais bon, Jonath a raison, si tu veux que ça resserve pour les autres versions du jeu, les sous-titres hardcodés, c'est très bien!

Avatar de l’utilisateur
Dark Magus
Nouveau Floodeur
Messages : 43
Inscription : 20 mai 2006, 19:30
Localisation : Toulouse
Contact :

Re: Sous-titrage de vidéos, quelle solution mettre en oeuvre ?

Message non lu par Dark Magus »

En fait, les deux solutions ne sont pas incompatibles. Tant que j'ai un fichier de sous-titres, je peux compter sur le filtre DirectVobSub/VSFilter pour la version PC, donc sans avoir à hardcoder les sous-titres dans les vidéos, et pour les versions DC et PS2, soit je hack pour afficher les sous-titre d'une façon similaire, soit, si je n'y parviens pas, je me rabats sur la solution du hardcoding.

Je viens donc de me lancer dans l'injection d'une DLL dans l'exécutable du jeu. Pour l'instant, ma DLL est chargé par le jeu et affiche un message. A présent je dois m'occuper de récupérer les différents objets DirectShow et de bidouiller le filter graph. Cela risque d'être très... intéressant ^^
- Projet en cours chez Terminus : traduction française de Grandia 2 PC
- Forum du projet : https://www.grandia2fr.ovh/phpBB3/

Avatar de l’utilisateur
Machin
Maître en Flood
Messages : 337
Inscription : 28 mai 2003, 16:25

Re: Sous-titrage de vidéos, quelle solution mettre en oeuvre ?

Message non lu par Machin »

Jonath lé là a écrit :Oui pour le hardcodage. Tout simplement parce que c'est pas Direct Show sous PS2 et DC (enfin ça m'étonerait). Et autant faire d'une pierre trois coups. Surtout que les gens sous windows sont équipés comme des patates niveau codec, et que bonjour la SAV si tu leur donne une solution dépassant le double-clic. T'as qu'à mettre ça sur un réseau pair à pair.
De toute maniere faut voir si le jeu arrivera a lancer un autre codec que celui d'origine. Y a quand meme peu de chance enfin peu de chance sans se prendre la tete. Mais bon la version PC de Grandia II a du être fait avec un codec exotique (Indeo32 ?) tandis que la version PS2 et DC a du être fait avec le codec qui est utilisé pour la plupart des jeux.
Machin

Avatar de l’utilisateur
cloud
Maître Suprême Floodeur
Messages : 475
Inscription : 29 janv. 2008, 00:07

Re: Sous-titrage de vidéos, quelle solution mettre en oeuvre ?

Message non lu par cloud »

Avec les vidéos de grandia 2 ça ne marche pas, mais avec ce log AVIAddXSubs on peut intégrer des sous-titres aux divx très rapidement, il suffit juste de mettre les fichiers srt et avi dans le même dossier et faire quelques cliques.
Peut-être qu'il y a moyen de rendre les vidéos de grandia compatible avec ce logiciel ou un truc dans le genre, mais mes connaissances en hacking sont nul, donc j'en sais rien.

j'essaye juste d'aider c'est tout ^^
Patch de traduction Française de Tales of Vesperia PS3 :
https://mega.nz/#F!QqZjwJIB!puHFECuTzrnLtPBsi9318A

Patch traduction Française Nine Hours Nine Persons Nine Doors NDS :
https://mega.nz/#F!E2J0gYBL!JrF2xLWi4FmqBXUPPtNVYw

Avatar de l’utilisateur
Dark Magus
Nouveau Floodeur
Messages : 43
Inscription : 20 mai 2006, 19:30
Localisation : Toulouse
Contact :

Re: Sous-titrage de vidéos, quelle solution mettre en oeuvre ?

Message non lu par Dark Magus »

Bonjour à tous ^^

Quelques petites infos sur l'avancement de cette partie de la traduction.

Je suis parvenu à créer une DLL, à la charger depuis le jeu, et à appeler des fonctions de cette DLL. A présent je travaille sur la partie graphique qui affiche effectivement les sous-titres. Pour l'instant (et à des fins de tests bien sûr), j'utilise un vulgaire TextOut sur le HDC récupéré d'une surface créée spécialement pour afficher les sous-titres, et le résultat est intéressant : j'arrive bien à afficher des sous-titres sur mes vidéos depuis le jeu. Il me reste à rendre cela beaucoup plus joli, à programmer le chargement des sous-titres depuis un fichier, et à gérer leur affichage en fonction de la position de lecture, mais je pense avoir déjà accompli le plus dur.

Merci encore pour m'avoir suggéré d'utiliser la technique de l'injection statique de DLL ^^
- Projet en cours chez Terminus : traduction française de Grandia 2 PC
- Forum du projet : https://www.grandia2fr.ovh/phpBB3/

Répondre