Comparaison deux mkv en images

Modérateur : Modérateurs

Darkshaka
Messages : 6
Enregistré le : mar. 06 déc., 2011 9:57

Comparaison deux mkv en images

Message 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 :)
Avatar du membre
Subbat
Administrateur
Administrateur
Messages : 8836
Enregistré le : jeu. 11 déc., 2008 20:12
Localisation : Quelque part... dans le centre de la France...

Message 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"...
Avatar du membre
leon1789
Messages : 775
Enregistré le : dim. 26 août, 2007 14:09
Contact :

Message 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)
Darkshaka
Messages : 6
Enregistré le : mar. 06 déc., 2011 9:57

Message 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 ;)
Avatar du membre
Subbat
Administrateur
Administrateur
Messages : 8836
Enregistré le : jeu. 11 déc., 2008 20:12
Localisation : Quelque part... dans le centre de la France...

Message par Subbat »

Ok, je comprends...

Pour le reste, je laisse la place aux autres...
Avatar du membre
leon1789
Messages : 775
Enregistré le : dim. 26 août, 2007 14:09
Contact :

Message 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.
Avatar du membre
Underground78
Administrateur
Administrateur
Messages : 11272
Enregistré le : mar. 06 févr., 2007 21:54
Localisation : France
Contact :

Message 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")
Darkshaka
Messages : 6
Enregistré le : mar. 06 déc., 2011 9:57

Message 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 !
Avatar du membre
elcascador972
Messages : 408
Enregistré le : sam. 14 mai, 2011 0:18
Localisation : 14° 46' 57'' Nord / 60° 59' 37'' Ouest

Message 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:
Quand le sage montre la lune, le fou regarde le doigt
Avatar du membre
Underground78
Administrateur
Administrateur
Messages : 11272
Enregistré le : mar. 06 févr., 2007 21:54
Localisation : France
Contact :

Message 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.
Avatar du membre
elcascador972
Messages : 408
Enregistré le : sam. 14 mai, 2011 0:18
Localisation : 14° 46' 57'' Nord / 60° 59' 37'' Ouest

Message 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:
Quand le sage montre la lune, le fou regarde le doigt
Avatar du membre
Underground78
Administrateur
Administrateur
Messages : 11272
Enregistré le : mar. 06 févr., 2007 21:54
Localisation : France
Contact :

Message 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.
Avatar du membre
elcascador972
Messages : 408
Enregistré le : sam. 14 mai, 2011 0:18
Localisation : 14° 46' 57'' Nord / 60° 59' 37'' Ouest

Message par elcascador972 »

Je testerai tout ça tranquillement ce WE. Merci pour les explications !
Quand le sage montre la lune, le fou regarde le doigt
Darkshaka
Messages : 6
Enregistré le : mar. 06 déc., 2011 9:57

Message 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 ?
Avatar du membre
elcascador972
Messages : 408
Enregistré le : sam. 14 mai, 2011 0:18
Localisation : 14° 46' 57'' Nord / 60° 59' 37'' Ouest

Message 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 !
Modifié en dernier par elcascador972 le mar. 13 déc., 2011 20:43, modifié 1 fois.
Quand le sage montre la lune, le fou regarde le doigt
Avatar du membre
Underground78
Administrateur
Administrateur
Messages : 11272
Enregistré le : mar. 06 févr., 2007 21:54
Localisation : France
Contact :

Message par Underground78 »

Essaie false avec un F majuscule juste pour être sûr.
Darkshaka
Messages : 6
Enregistré le : mar. 06 déc., 2011 9:57

Message 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 ;)
Avatar du membre
leon1789
Messages : 775
Enregistré le : dim. 26 août, 2007 14:09
Contact :

Message 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 !
Avatar du membre
Underground78
Administrateur
Administrateur
Messages : 11272
Enregistré le : mar. 06 févr., 2007 21:54
Localisation : France
Contact :

Message par Underground78 »

C'est audio=false je pense.
Darkshaka
Messages : 6
Enregistré le : mar. 06 déc., 2011 9:57

Message 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 ;)
Avatar du membre
Underground78
Administrateur
Administrateur
Messages : 11272
Enregistré le : mar. 06 févr., 2007 21:54
Localisation : France
Contact :

Message par Underground78 »

Si tu ne veux qu'une vidéo, tu peux enlever la ligne "StackVertical(Video)".
Avatar du membre
pepsilite
The Grinch
The Grinch
Messages : 23287
Enregistré le : sam. 03 févr., 2007 19:13
Localisation : Chez moi le plus possible ...

Message 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 ...
06/01/2020 m4ng v6 est disponible au téléchargement en version finale : m4ng v6
Avatar du membre
elcascador972
Messages : 408
Enregistré le : sam. 14 mai, 2011 0:18
Localisation : 14° 46' 57'' Nord / 60° 59' 37'' Ouest

Message 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 !
Quand le sage montre la lune, le fou regarde le doigt
Avatar du membre
pepsilite
The Grinch
The Grinch
Messages : 23287
Enregistré le : sam. 03 févr., 2007 19:13
Localisation : Chez moi le plus possible ...

Message 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...
06/01/2020 m4ng v6 est disponible au téléchargement en version finale : m4ng v6
Avatar du membre
elcascador972
Messages : 408
Enregistré le : sam. 14 mai, 2011 0:18
Localisation : 14° 46' 57'' Nord / 60° 59' 37'' Ouest

Message 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...
Quand le sage montre la lune, le fou regarde le doigt
Répondre