Page 1 sur 2

Comparaison deux mkv en images

Posté : mar. 06 déc., 2011 10:35
par Darkshaka
Bonjour à tous,

Fan d'anime depuis très longtemps, je ne cesse de chercher la meilleure qualité pour les séries que je préfère.

Malheureusement, c'est souvent un casse-tête chinois compte tenu des différents codecs / résolutions / qualités d'encodage de chaque version.

Il y a de cela quelques années, j'avais trouvé un script avisynth qui permettait de comparer deux encodages différents en mettant une image en dessous de l'autre. On cliquait sur le fichier avisynth et ce dernier générait un nombre d'images défini pour les deux encodages, seulement depuis je l'ai perdu.

Ce que je cherche aujourd'hui s'en rapproche un peu : j'aimerais pouvoir comparer deux mkv en images à la frame près afin de voir lequel des deux a la meilleure qualité. Je sais comment le faire à la mano mais j'aimerais avoir une méthode automatique...

Est-ce que vous auriez un exemple de script à me fournir pour réaliser cela ?
Ou même une méthode qui me donne le même résultat sans avoir à passer par avisynth ?

Merci d'avance pour votre coup de main :)

Posté : mar. 06 déc., 2011 10:42
par Subbat
Salut Darkshaka, et :welc sur le forum...

Je n'ai pas la solution... Par contre, je ne comprend pas ce que tu entends par "mano' et "automatique"...

Posté : mar. 06 déc., 2011 11:07
par leon1789
Pour comparer deux vidéos V1 et V2, l'une sous l'autre :

Code : Tout sélectionner

V1 = ...
V2 = ...
return StackVertical(V1, V2)

Posté : mar. 06 déc., 2011 11:35
par Darkshaka
Salut Subbat,

Quand je dis à la "mano" je veux dire que je lisais la vidéo 1 avec vlc, je faisais pause à une certaine frame et je faisais un screenshot, même chose pour la vidéo 2, un peu barbant quand tu veux comparer plusieurs scènes différentes...

Pour la méthode "automatique", il me semble que leon a vu juste, c'était une formule du genre stackvertical.
En gros les trois petits points sont les endroits où l'on va chercher les vidéos sur le pc ? Et comment faire pour définir le nombre d'images, le nombre de frames à sauter pour la prochaine image ?

Il faut que je me remette dans les scripts avs, cela fait au moins 3 ans que je n'y ai pas touché.
Pour que ce soit clair, il faut que j'ouvre la vidéo 1 avec m4ng et que j'édite le document texte en avs pour rajouter la vidéo 2 avec l'exemple de leon ?

Je suis pas chez moi donc je ne peux pas tester tout de suite...

Merci pour vos réponses rapides en tout cas ;)

Posté : mar. 06 déc., 2011 11:40
par Subbat
Ok, je comprends...

Pour le reste, je laisse la place aux autres...

Posté : mar. 06 déc., 2011 18:17
par leon1789
Darkshaka a écrit : En gros les trois petits points sont les endroits où l'on va chercher les vidéos sur le pc ?
oui, c'est bien ça.
Darkshaka a écrit : Pour que ce soit clair, il faut que j'ouvre la vidéo 1 avec m4ng et que j'édite le document texte en avs pour rajouter la vidéo 2 avec l'exemple de leon ?
oui, c'est bien ça.
Darkshaka a écrit : Et comment faire pour définir le nombre d'images, le nombre de frames à sauter pour la prochaine image ?
heu, là je ne comprends pas.

Posté : mar. 06 déc., 2011 18:18
par Underground78
Quelque chose comme ça doit pouvoir faire l'affaire :

Code : Tout sélectionner

# Source vidéo 1
v1 =DirectShowSource("X:\XXXXXX\1.mkv", false).Subtitle("vidéo 1").Trim(debut,fin)

# Source vidéo 2
v2 = DirectShowSource("X:\XXXXXX\2.mkv", false).Subtitle("vidéo 2").Trim(debut,fin)

StackVertical(v1, v2)
SelectEvery(intervalle, 0)
ConvertToRGB24()
ImageWriter(file="X:\XXXXXX\", type="png")

Posté : mer. 07 déc., 2011 17:32
par Darkshaka
Merci Underground, me semble que c'est ça ;)

Leon quand je parlais des intervalles et des frames, je voulais parler des trimm (début, fin) en fait.

C'est à dire le choix de la séquence à utiliser pour la génération d'images.

Je vais tester ça rapidos pour voir ce que ça donne.

Merci à vous tous !

Posté : mer. 07 déc., 2011 21:20
par elcascador972
Bonsoir !
La solution que donne Undergound78 au post de Darkshaka m'intéresse pour pouvoir comparer 2 vidéos l'une sous l'autre en même temps sur le même écran de PC mais...le code donné se place où exactement ? Et comment parvenir à ce "ou" ? Faut il en plaçant le code entrer le chemin des 2 vidéos dans le texte du code à la place des "XX" (je suppose que oui :hop: ) ? Bref, une explication détaillée m'intéresse fortement ! Merci par avance ! :d:

Posté : mer. 07 déc., 2011 21:50
par Underground78
Mon script exporte des images des deux vidéos superposées à intervalle régulier, je sais pas si c'est exactement ce que tu veux.

Sinon oui, il faut remplacer les chemins par ceux réels et régler les paramètres début et fin pour les deux vidéos (exprimés en nombre de trames), pareil pour l'intervalle qui est à remplacer aussi par un nombre de trames.

Posté : jeu. 08 déc., 2011 12:05
par elcascador972
Underground78 a écrit :Mon script exporte des images des deux vidéos superposées à intervalle régulier, je sais pas si c'est exactement ce que tu veux.
J'avais mal compris...je pensais qu'il permettait (via la prévisualisation de m4ng) de visionner 2 vidéos "l'une sous l'autre" pour pouvoir comparer la qualité de 2 encodages d'une même vidéo réalisés avec des codecs / paramètres différents. Mais la solution d'exporter des images prises à intervalle régulier me convient bien, à défaut du reste. Donc déjà merci !
Underground78 a écrit :Sinon oui, il faut remplacer les chemins par ceux réels et régler les paramètres début et fin pour les deux vidéos (exprimés en nombre de trames), pareil pour l'intervalle qui est à remplacer aussi par un nombre de trames.
Si je comprends bien, les "trames" sont le numéro des images de début et fin : en clair j'indique par ce moyen là la portion de vidéo sur laquelle je veux que les images soient extraites ? Bon, "l'intervalle" c'est l'intervalle d'extraction des images depuis les vidéos, ça j'ai bien compris. Reste que ce script...je le mets où ? Je pensais ouvrir m4ng, charger la vidéo 1, éditer le script AVIsynth, copier-coller ton script dedans mais ou ?Bref, autant je me débrouille pas trop mal pour utiliser m4ng, autant là je suis limite dépassé :roll:

Posté : jeu. 08 déc., 2011 19:09
par Underground78
elcascador972 a écrit :
Underground78 a écrit :Mon script exporte des images des deux vidéos superposées à intervalle régulier, je sais pas si c'est exactement ce que tu veux.
J'avais mal compris...je pensais qu'il permettait (via la prévisualisation de m4ng) de visionner 2 vidéos "l'une sous l'autre" pour pouvoir comparer la qualité de 2 encodages d'une même vidéo réalisés avec des codecs / paramètres différents. Mais la solution d'exporter des images prises à intervalle régulier me convient bien, à défaut du reste. Donc déjà merci !
Ah bah tu peux, il suffit de reprendre le premier script proposé par Léon.
elcascador972 a écrit :
Underground78 a écrit :Sinon oui, il faut remplacer les chemins par ceux réels et régler les paramètres début et fin pour les deux vidéos (exprimés en nombre de trames), pareil pour l'intervalle qui est à remplacer aussi par un nombre de trames.
Si je comprends bien, les "trames" sont le numéro des images de début et fin : en clair j'indique par ce moyen là la portion de vidéo sur laquelle je veux que les images soient extraites ? Bon, "l'intervalle" c'est l'intervalle d'extraction des images depuis les vidéos, ça j'ai bien compris. Reste que ce script...je le mets où ? Je pensais ouvrir m4ng, charger la vidéo 1, éditer le script AVIsynth, copier-coller ton script dedans mais ou ?Bref, autant je me débrouille pas trop mal pour utiliser m4ng, autant là je suis limite dépassé :roll:
Trame est ici synonyme d'image donc c'est bien le numéro des images (tu peux faire les conversions en multipliant le temps par le framerate ou en divisant le numéro de trame par le framerate).
Si tu veux juste comparer deux vidéos, pas la peine de passer par m4ng, tu crées un fichier .avs, tu mets le script dedans et tu mets les chemins qu'il faut puis tu ouvres dans ton lecteur classique.

Posté : jeu. 08 déc., 2011 23:17
par elcascador972
Je testerai tout ça tranquillement ce WE. Merci pour les explications !

Posté : mar. 13 déc., 2011 20:12
par Darkshaka
Hello,

J'ai testé le script avec deux vidéos et j'ai un message d'erreur :
invalid arguments to function "DirectShowSource"

(G:\ANIMES FILM\STEAMBOY\comparaison.avs, line 2).

Voici le contenu du script :

Code : Tout sélectionner

# Source vidéo 1
v1 =DirectShowSource("G:\ANIMES FILM\STEAMBOY\WSA.mkv", false).Subtitle("vidéo 1").Trim(debut,fin)

# Source vidéo 2
v2 = DirectShowSource("G:\ANIMES FILM\STEAMBOY\THORA.mkv", false).Subtitle("vidéo 2").Trim(debut,fin)

StackVertical(v1, v2)
SelectEvery(intervalle, 0)
ConvertToRGB24()
ImageWriter(file="G:\ANIMES FILM\STEAMBOY\", type="png")
Une idée de pourquoi cela ne marche pas ?

Posté : mar. 13 déc., 2011 20:21
par elcascador972
Je ne suis pas sûr mais je pense qu'il faut préciser, dans les parenthèses de DirectShowSource, après le chemin de la vidéo, quelquechose qui doit être du genre [, fps=23.976000] (c'est un exemple de valeur, il faut prendre celui de la vidéo). Je pense aussi que les valeurs de Trim dans les parenthèses en lieu et place de "début" et "fin" doivent être remplacées par des chiffres (numéros des frames de départ et de fin) mais évidemment, je laisse les experts confirmer !

Posté : mar. 13 déc., 2011 20:43
par Underground78
Essaie false avec un F majuscule juste pour être sûr.

Posté : mar. 13 déc., 2011 20:54
par Darkshaka
Re,

J'ai essayé avec les modifs mais toujours en erreur :

Code : Tout sélectionner

# Source vidéo 1
v1 =DirectShowSource("G:\ANIMES FILM\STEAMBOY\WSA.mkv", fps=23.976000, False).Subtitle("vidéo 1").Trim(0,10000)

# Source vidéo 2
v2 = DirectShowSource("G:\ANIMES FILM\STEAMBOY\THORA.mkv", fps=23.976000, False).Subtitle("vidéo 2").Trim(0,10000)

StackVertical(v1, v2)
SelectEvery(intervalle, 0)
ConvertToRGB24()
ImageWriter(file="G:\ANIMES FILM\STEAMBOY\", type="png")
Est-ce que cela peut venir de ma config pc ?
j'ai installé le dernier pack cccp et mpc hc + vlc la dernière version.

Merci ;)

Posté : mar. 13 déc., 2011 20:55
par leon1789
Underground78 a écrit :Essaie false avec un F majuscule juste pour être sûr.
non, ce n'est pas ça car avisynth assimile majuscules et minuscules.

en revanche, il faut préciser quel booléen de directshowsource on veut mettre à false (le second argument par défaut de directshowsource n'est pas un booléen, mais fps). Si on ne sait pas de quel booléen il s'agit, alors il n'y a qu'à effacer false !

Posté : mar. 13 déc., 2011 21:11
par Underground78
C'est audio=false je pense.

Posté : mar. 13 déc., 2011 22:49
par Darkshaka
C'est bon ça marche grâce à quelques retouches, merci pour les pistes !

Voici le code qui marche chez moi pour ceux qui en ont besoin :

Code : Tout sélectionner

# Source vidéo 1
v1 =DirectShowSource("G:\ANIMES FILM\STEAMBOY\WSA.mkv", fps=23.976000, audio=False).Subtitle("WSA").Trim(0,100000)

# Source vidéo 2
v2 = DirectShowSource("G:\ANIMES FILM\STEAMBOY\THORA.mkv", fps=23.976000, audio=False).Subtitle("THORA").Trim(0,100000)

StackVertical(v1, v2)
SelectEvery(last, 300, 0)
ConvertToRGB24()
ImageWriter(file="G:\ANIMES FILM\STEAMBOY\", type="png")

Par contre, lorsque j'essaie de comparer les deux images l'une sur l'autre, les mauvais angles de vision de mon écran m'empêche d'avoir une bonne comparaison.
Comment faire pour faire des images pour une seule vidéo ? Je pensais utliser ensuite ce site pour avoir une meilleure comparaison.

J'ai essayé ce script mais visiblement il y a un truc qui cloche dans le stackvertical. Une idée de la syntaxe à adopter dans le cas d'une seule vidéo ?

Code : Tout sélectionner

# Source vidéo 1
Video=DirectShowSource("G:\ANIMES FILM\STEAMBOY\WSA.mkv", fps=23.976000, audio=False).Subtitle("WSA").Trim(0,100000)

StackVertical(Video)
SelectEvery(last, 300, 0)
ConvertToRGB24(Video)
ImageWriter(file="G:\ANIMES FILM\STEAMBOY\", type="png")
Désolé pour pour les nombreux allers retours mais on y est presque et j'arrête de vous embêter ;)

Posté : mar. 13 déc., 2011 23:40
par Underground78
Si tu ne veux qu'une vidéo, tu peux enlever la ligne "StackVertical(Video)".

Posté : mer. 14 déc., 2011 0:16
par pepsilite
Le stackvertical est pour aligner 2 vidéos en hauteur, si tu n'en définis qu'une, il n'aime pas, c'est sûr ...

Posté : mer. 14 déc., 2011 0:29
par elcascador972
Je respecte l'objectif de Darkshaka mais si le but est de comparer 2 vidéos, pourquoi ne pas le faire "directement" en les lisant et non à partir d'images extraites ? Car grâce au post de Darkshaka, à l'intervention de Léon1789 puis Underground78 sur ce même post puis in fine Pepsilite sur un post perso, ce WE est né ce script :

[lightbox]http://img576.imageshack.us/img576/2858/scripypepsi.jpg[/lightbox]

Il permet de comparer en temps réel (en les lisant simultanément sur le même écran devrais je dire) 2 moitiés (gauche en l'occurrence) de 2 vidéos différentes pour peu que la résolution (l = largeur de trame et H = hauteur de trame) soit identique aux 2 vidéos. Enfin, c'est juste une proposition :glups: .

Par exemple, une illustration de la différence pour un débit de 400 kbps et 2 passes entre Xvid et x264cli (réglage "DXVA Standard Def" + slow + films") ci-dessous, réalisée avec le script (et évidemment une capture d'écran !)

[lightbox]http://img820.imageshack.us/img820/6971/colonnes.jpg[/lightbox]

La partie gauche est en XVid et la droite en X264 : regarder le détail des colonnes et le chameau en arrière plan...no comment !

Posté : mer. 14 déc., 2011 2:33
par pepsilite
Ben ouais, la momie est plus belle en x264 ...
Sauf que là, les deux images ne sont pas prises au même endroit dans la vidéo...

Posté : mer. 14 déc., 2011 2:58
par elcascador972
pepsilite a écrit :Ben ouais, la momie est plus belle en x264 ...
Effectivement, c'est La Momie... Monsieur est cinéphile ou alors tu as un truc... car reconnaitre le film en 1 image sur plus de 150 000 (me souvient plus du nombre exact), je dis "respect" :rital: .
pepsilite a écrit :Sauf que là, les deux images ne sont pas prises au même endroit dans la vidéo...
Je sais bien mais je n'ai pas l'explication. Ou plutôt, le fait est que, curieusement, en faisant quelques avances rapides sur le lecteur Windows lorsque les 2 vidéos sont lues via le script, il se produit un micro décalage qu'on voit sur la capture d'ecran :roll: . Pourtant, le débit est identique à l'encodage et le fps aussi...c'est peut-être du à Windows Vista ?

J'imagine qu'avec le script d'Underground78 qui extrait l'image de chaque vidéo au numéro près à un intervale déterminé, je n'aurai sans doute pas eu ce décalage...