Identifier les "lags" et les supprimer

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour

dans certains jeux vidéos il y arrive qu'il y ait des "freeze" c'est à dire que l'image se bloque pendant X secondes

imaginons que j'enregistre le gameplay du jeu, j'aurai donc une vidéo (qui est une séquence d'images)

le problème c'est qu'à cause de ces "lags", certaines images seront "bloquées"

le meilleur exemple est sans doute PES https://www.youtube.com/watch?v=7CQA53NyMVs

entre 1:13 et 1:14 on a un très bel exemple, presque 1 seconde de la même image

on a donc un format comme celui-ci :

  • milliseconde 1 - image 1
  • milliseconde 2 - image 2
  • milliseconde 3 - image 3 (début du "lag")
  • milliseconde 4 - image 3
  • milliseconde 5 - image 3
  • milliseconde 6 - image 3
  • milliseconde 7 - image 4 (fin du "lag")

j'ai mis milliseconde mais c'est en fonction du FPS

je me demandais s'il était possible d'identifier ces doublons et de les supprimer dynamiquement, en C# ou avec n'importe quel autre langage (le principe sera le même je pense)

j'imagine qu'il faut séparer chaque image d'un fichier vidéo puis les "comparer" avec celles qui lui sont adjacentes mais je ne vois pas trop comment.

si vous avez des pistes à suivre ou des conseils n'hésitez pas.

Merci !

+0 -0
Staff

Bah n'importe quel lib de traitement video (ex openCv) te permettra de faire ça facilement.

En théorie tu pourrai utiliser directement l'encodage (algo de compression) pour détecter ça. Les formats basé sur le MPEG encodent complètement une image sur N (N=8 en général) et entre chaque image ils ne codent que les différences. J'imagines donc que les frames de différences seront dans ton cas vide, donc facile à détecter.

Mais traiter les formats de compressions directement n'est pas forcément le plus simple. Comparer image a image est surement plus facile. Cependant attention a ne pas faire qu'une comparaison simple : les artefacts de compressions peuvent produire de légères différences colorimétriques. Une différence par zone avec un seuil est peut probablement fonctionner.

+0 -0
Staff

Hum le truc est que le C# est pas vraiment adapté à ça. La seule façon d'avoir un code a peu prêt efficace en C# pour ça est, soit, que tu utilse une lib dédié (OpenCv a peut être un Binding), soit de faire une fonction de traitement "unsafe" où tu manipule directement les pointeurs.

La première solution est clairement la meilleur. Techniquement avec OpenCv tu peux directement ouvrir une vidéo et faire la suivante sans passer par une extraction sous forme d'image.

Mais encore une fois, attention. La comparaison ne sera pas simple. Ce n'est jamais simple de comparer deux images d'une vidéo. Il y a plusieurs phénomènes qui font que deux images te semblent identique mais informatiquement ne le sont pas ou au contraire qu'un mouvement dans l'image génère des différences faibles. Il y a un réglage à faire non négligeable.

+0 -0
Auteur du sujet

j'avais fait la deuxième par soucis de performance :D

Mais encore une fois, attention. La comparaison ne sera pas simple. Ce n'est jamais simple de comparer deux images d'une vidéo. Il y a plusieurs phénomènes qui font que deux images te semblent identique mais informatiquement ne le sont pas ou au contraire qu'un mouvement dans l'image génère des différences faibles. Il y a un réglage à faire non négligeable.

c'est justement mon problème… ça ne supprime quasiment aucune image !

je suis en train d'essayer de comparer pixel par pixel afin d'obtenir une différence en pourcentage (en dessous de X% je considère que c'est identique)

le problème est que ça prend presque 5 minutes pour 50 images, alors que dans une vidéo complète de 5-6 minutes il va y en avoir des milliers !

une solution serait peut-être de réduire la taille de l'image et/ou de la faire passer en gris comme le suggérait le premier répondant

je posterai mon code si je trouve quelque chose qui fonctionne, d'ici-là merci de votre aide !

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte