module inscription newsletter haut de page forum mobile

Rejeter la notice

Nouvelle Formation Prise de son : les inscriptions sont ouvertes !
Maîtrisez la qualité de vos prises de son avec notre formation théorique et pratique de 3 jours ! Du 14 au 16 mai 2024 à Paris.

[Résolu] J'aimerais pouvoir utiliser le filtre de redimensionnement Jinc

Discussion dans 'Les formats' créé par SuperLumberjack, 14 Mai 2016.

Tags:
  1. SuperLumberjack

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    251
    Appréciations:
    +0 / 0 / -0
    Pas de souci ! Ça peut arriver ! :laugh: Oui, j'avais mis les miniatures, car j'ai pensé que les images seraient trop grandes. Mais finalement, vu que ça s'adapte à la page, j'ai édité le message et mis les versions complètes :good:

    Sinon, je t'assure qu'il y a bien une différence entre un simple Bicubic et mon script ;) J'ai essayé pas mal de choses, et à chaque fois c'était différent. Après, si on compare des captures d'écran côte à côte, là effectivement, on peut avoir l'impression qu'il n'y a pas tellement de différences. Et pourtant il y en a, que l'on perçoit justement mieux en mouvement, d'où les vidéos.

    C'est justement pour cela que je me suis fatigué à faire tout ça, car c'est en mouvement que j'obtiens ou non quelque chose qui peut me rappeler les sensations d'époque :)

    Après, le gros avantage de Media Player Classic, avec MadVR notamment, c'est le filtre anti-ringing. J'aimerais bien trouver quelque chose de comparable avec AviSynth :rolleyes:

    A part ça, je précise tout de même que je n'ai absolument pas touché aux couleurs de la vidéo d'origine. C'est bizarre que tu constates une différence à ce niveau là :perplexe:

    Je te souhaite un bon rétablissement sinon ;)
     
  2. Alcoriza

    So

    Points Repaire:
    8 200
    Recos reçues:
    97
    Messages:
    5 202
    Appréciations:
    +291 / 696 / -5
    De même, bon rétablissement Olivier.

    Et pour info, ton resize en haut et deux resize différents de AFTER FX en bas :

    [​IMG]

    Si vraiment il faut se coller à l'écran et compter les pixels, je préfère le 3ème qui est plus doux.
     
    #182 Alcoriza, 19 Avril 2018
    Dernière édition: 19 Avril 2018
  3. SuperLumberjack

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    251
    Appréciations:
    +0 / 0 / -0
    Comme quoi, c'est une question de goût ! :D

    Personnellement, je trouve qu'il y a plus de ringing sur ton 1er filtre, et le 2ème est un chouilla trop doux o_O

    Après, je ne dis pas que ce n'est pas bon ;) Mais tout l'intérêt de la chose était justement de faire quelque chose qui me plait :laugh:


    Et sinon, t'en penses quoi au fait de ce qu'ils m'ont proposé sur le forum Doom9 ? C'est moi ou c'est un peu spécial par moment ? :D

    I want to upscale a Super Nes video in HD - Page 6 - Doom9's Forum
     
  4. Alcoriza

    So

    Points Repaire:
    8 200
    Recos reçues:
    97
    Messages:
    5 202
    Appréciations:
    +291 / 696 / -5
    Bah comme tu l'as dit, c'est plus du tout objectif, c'est juste une question de goût, donc à toi de voir.
     
  5. SuperLumberjack

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    251
    Appréciations:
    +0 / 0 / -0
    Yep ! :)

    Là par contre, j'ai abandonné toute logique, et j'ai essayé de faire quelque chose qui pouvait vraiment me convenir. T'as raison, ça n'a plus de sens de faire passer tout cela pour quelque chose d'objectif ! :laugh: Le truc, c'est que j'aime bien quand il y a une logique ! :D Mais là, ce n'est plus trop possible...

    J'ai fait un dernier script et ça me plait et fini basta ! :good:
     
  6. SuperLumberjack

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    251
    Appréciations:
    +0 / 0 / -0
    Re-hello ! :)

    Je sais que je suis un peu fada, mais en fait je suis complétement reparti de zéro et là je pense que j'ai enfin obtenu ce qui me plait ! :laugh:

    Pour tout dire, mon but depuis le début, n'étais pas uniquement de pouvoir upscaler des vidéos de jeux Super Nintendo. Je voulais trouver une espèce de formule qui pourrait convenir à d'autres types de vidéos basse définitions datant de l'époque des écrans CRT, donc avec du 320x240, du 640x480 et du 640x360 aussi. Voila pourquoi je me suis autant embêté ! :o

    Et là j'ai trouvé un truc qui pour moi marche ! Je vous donnerai les détails après avoir dormi :D

    En fait, cette fois-ci, j'ai laissé tombé les vidéos de jeux Super Nintendo et suis parti de la vidéo d'intro de "Legacy of Kain: Defiance" qui est en 640x480, mais qui surtout a été faite avec le moteur du jeu (mais pas en temps réel évidemment, puisque c'est une vidéo). Donc mon but, c'était d'arriver à quelque chose qui me rappelle vraiment le look en cours de jeu, vu que comme dit, c'était à base du moteur de celui-ci.

    Je trouve que je suis arrivé à un résultat plutôt bon, ou en tout cas qui me plait moi. Et puis j'ai aussi compris définitivement les limites qu'il y a à redimensionner des vidéos basse définition, peu importe les filtres que l'on utile. Donc j'ai fait avec ce que j'avais, tout en ne visant pas l'impossible ! :laugh:

    Bref, après j'ai retranscri la limite du script que j'avais fait pour cette vidéo en 640x480 aux vidéos de jeux Super Nintendo, et je trouve que ça fonctionne ;-)

    Bon, après vous me direz, toujours pas de grosses différences par rapport à avant...

    Mais perso je dis, c'est plutôt dans le ressenti en mouvement que tout ce joue ! Et là, je trouve à chaque fois que les quelques petites différences subtiles changent pas mal ce type de sensations. Ça peut changer un peu au niveau du défilement des différents plan, de la sensation de légèreté ou de lourdeur, de fluidité, etc.

    Donc voici mes scripts :


    Script pour jeux avec aspect ratio 4/3 :


    AviSource()
    Spline16Resize(2048, 1792)
    GaussResize(5120, 3840, p=50)
    BicubicResize(2820, 2160)

    Original

    [​IMG]

    Upscalé en 2160p

    Donkey Kong Country 3 - Magic (AR 4-3).png


    Script pour jeux avec aspect ratio 8/7 :

    AviSource()
    Spline16Resize(2048, 1792)
    GaussResize(5120, 3840, p=50)
    BicubicResize(2468, 2160)

    Original

    [​IMG]

    Upscalé en 2160p

    Mr. Nutz - Magic (AR 8-7).png


    J'ai aussi refait la vidéo (donc le lien vers l'autre est mort), car je trouve que symboliquement c'est pas mal de se dire que : the game is over ! :D



    Je ne pense pas en tout cas que je ferai d'autres scripts, car ce serait tourner en rond et tenter d'atteindre quelque chose d'impossible, donc voilà, je vais rester pragmatique ! :)
     
  7. SuperLumberjack

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    251
    Appréciations:
    +0 / 0 / -0
    Hello les z'amis ! :hello:

    Je voulais juste vous montrer avec quelle vidéo j'avais travailler à la base, car comme dit, je voulais un genre de formule qui puisse convenir avec tout type de contenu basse définition allant de la résolution 256x224 jusqu'à 640x480. Au-delà par contre, ça a moins d'intérêt en revanche.

    Donc voilà, vous comprenez peut-être un peu mieux ma démarche maintenant, d'essayer de trouver quelque chose de cohérent et de logique ! :idea:

    Je suis donc parti de la vidéo du jeu "Legacy of Kain: Defiance" qui est vraiment un bon modèle, car comme dit, elle a été faite à partir du moteur du jeu, donc je peux comparer avec des captures in-game, et en plus, elle présente une légèrement déformation à l'origine ;-) En effet, elle est légèrement écrasée verticalement, si on compare avec l'aspect ratio de l'image en cours de jeu. Le but est par conséquent de rétablir le bon ratio d'image, sans que cela se voit de trop, en plus de redimensionner l'image en 2160p et être le plus proche de l'aspect en cours de jeu.

    La résolution d'origine est de 640x480, mais la vidéo présente des bandes noires en haut et bas que j'ai coupé pour le 16/9. La résolution après suppression des bandes noires est de 640x320. Pour être au bon aspect ratio, elle aurait dû être de 640x360. Voici ce que ça donne :


    Original LoK Defiance

    [​IMG]

    LoK Defiance upscalé en 2160p

    [​IMG]

    Je trouve en tout cas que c'est pas mal ! :-) Il n'y a pas de perte de définition par rapport à l'original, et je trouve que c'est assez similaire à ce que c'est en cours de jeu comme on peut le voir ci-dessous. Après, des mods de textures ont apparemment aussi été utilisés pour améliorer l'affichage en 2160p, donc c'est clairement normal que ce soit plus sharpé in-game. Voici le lien du site où on été postées ces captures : Epic Shots – Legacy of Kain: Defiance | PC Master Race Latinoamérica - De Pey & Dark-Gio

    LoK Defiance 2160p en cours de jeu

    [​IMG]


    Original LoK Defiance


    [​IMG]

    LoK Defiance upscalé en 2160p

    [​IMG]

    Ici on voit aussi clairement la correction de l'aspect ratio, notamment lorsque l'on observe les tonneaux. Vous pourrez constater combien c'était incorrect au départ avec la capture in-game.

    LoK Defiance 2160p en cours de jeu

    [​IMG]


    Voici le script que j'ai utilisé et qui m'a donc servi de base pour tout le reste :

    AviSource()
    Crop(0, 80, 0, -80)
    Spline16Resize(2560, 1280)
    GaussResize(10240, 2880, p=50)
    BicubicResize(3840, 2160)



    Pour vous expliquer rapidement, j'ai donc commencé par cropper les bandes noires, puis j'ai multiplié la résolution de 640x320 par 4 avec le Spline16Resize.

    (Note : Pour éviter de s'embrouiller, on va dire que lorsque je multiplie une résolution par 2 par exemple, c'est la résolution horizontale par 2 et la résolution verticale par 2, pas la résolution globale qui elle sera multipliée par 4.)

    Ensuite, c'est là que j'ai corrigé l'apect ratio avec le GaussResize. Si je multiplie la résolution horizontale par 4 au lieu de 2 comme je le fais avec la résolution verticale, c'est tout simplement parce que je pars d'une vidéo 4:3 pour la passer en 16:9, car pour une vidéo de résolution 640x480 qui doit rester en 4:3, je mets ça :

    AviSource()
    Spline16Resize(2560, 1920)
    GaussResize(5120, 3840, p=50)
    BicubicResize(2880, 2160)


    Dans ce cas là, je multiplie simplement la résolution horizontale et verticale par 2.

    Or en 16:9, on passe de 2880 à 3840 en résolution horizontale. C'est pourquoi je multiplie encore une fois la résolution horizontale, pour gagner un peu en précision et parce que je trouve que c'est mieux visuellement. De plus, on garde un rapport au niveau des résolution qui est assez semblable.

    Car si je prends la vidéo ci-dessous en 16:9, j'ai ça comme rapport entre la résolution du GaussResize et la résolution finale avec le Bicubic :

    (10240x2880)/(3840x2160) = 3,55

    Ce qui reste assez proche du rapport pour la vidéo en 4:3 :

    (5120x3840)/(2880x2160) = 3,16


    Voili voilou ! Je crois que j'ai fait le tour ! :laugh:
     
    #187 SuperLumberjack, 22 Avril 2018
    Dernière édition: 22 Avril 2018
  8. SuperLumberjack

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    251
    Appréciations:
    +0 / 0 / -0
    Hello les gens ! :hello:

    Je viens avec du nouveau ;-)


    Voici mes nouveaux scripts :laugh::

    Jeux Super Nes en 8:7 :

    (Note : Vous pouvez voir l'image originale dans le coin gauche en bas, en comparaison de l'image 2160p. Sinon, je remarque un truc assez étrange sous Firefox. Ces 2 images sortent plus rougeâtres, alors qu'en les téléchargeant elles sont normales. Pas trop grave, mais je précise si jamais ça vous choque ! o_O En revanche, pas de soucis avec les autres images postées j'ai l'impression.)

    Mr. Nutz - Original & 2160p.png


    AviSource()
    Spline16Resize(512, 448)
    nnedi3_rpow2(rfactor=2, nsize=0, nns=2, qual=1, etype=0, pscrn=3, threads=0, opt=0, fapprox=0)

    GaussResize2(4936, 4320, px=50, py=50)
    BicubicResize(2468, 2160)
    return Last

    ##################################
    function GaussResize2(clip C, int target_width, int target_height,
    \ float "src_left", float "src_top", float "src_width", float "src_height",
    \ float "px", float "py")
    {
    px = Default(px, 30.0)
    py = Default(py, px)
    R = C.GaussResize(target_width, C.Height,
    \ src_left, 0, src_width, 0, px)
    \ .GaussResize(target_width, target_height,
    \ 0, src_top, 0, src_height, py)
    return R
    }



    Jeux Super Nes en 4:3 :

    Killer Instinct - Original & 2160p.png


    AviSource()
    Spline16Resize(512, 448)
    nnedi3_rpow2(rfactor=2, nsize=0, nns=2, qual=1, etype=0, pscrn=3, threads=0, opt=0, fapprox=0)

    GaussResize2(5640, 4320, px=50, py=50)
    BicubicResize(2820, 2160)
    return Last

    ##################################
    function GaussResize2(clip C, int target_width, int target_height,
    \ float "src_left", float "src_top", float "src_width", float "src_height",
    \ float "px", float "py")
    {
    px = Default(px, 30.0)
    py = Default(py, px)
    R = C.GaussResize(target_width, C.Height,
    \ src_left, 0, src_width, 0, px)
    \ .GaussResize(target_width, target_height,
    \ 0, src_top, 0, src_height, py)
    return R
    }



    Et une vidéo :good::

     
    #188 SuperLumberjack, 18 Mai 2018
    Dernière édition: 18 Mai 2018
  9. SuperLumberjack

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    251
    Appréciations:
    +0 / 0 / -0
    Je précise juste que cette partie là... :

    GaussResize2(5640, 4320, px=50, py=50)
    BicubicResize(2820, 2160)
    return Last

    ##################################
    function GaussResize2(clip C, int target_width, int target_height,
    \ float "src_left", float "src_top", float "src_width", float "src_height",
    \ float "px", float "py")
    {
    px = Default(px, 30.0)
    py = Default(py, px)
    R = C.GaussResize(target_width, C.Height,
    \ src_left, 0, src_width, 0, px)
    \ .GaussResize(target_width, target_height,
    \ 0, src_top, 0, src_height, py)
    return R
    }



    ... pourrait simplement être remplacée par ça :

    GaussResize(5640, 4320, p=50)
    BicubicResize(2820, 2160)



    Mais lorsque j'avais testé pas mal de choses, j'avais demandé sur le forum Doom9 s'il était possible de faire varier le "p" du GaussResize indépendamment pour la résolution verticale et la résolution horizontale. Et comme il y a des oufs sur ce forum, c'était easy pour le gars qui m'a sorti ça :laugh:

    Bref, j'ai décidé de le garder, car j'ai pensé que ça pourrait toujours m’être utile plus tard ! :-)

    Si jamais vous voulez suivre la discussion, c'est ici : I want to upscale a Super Nes video in HD - Page 12 - Doom9's Forum
     
  10. SuperLumberjack

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    251
    Appréciations:
    +0 / 0 / -0
    D'autres captures :good::

    01 - Killer Instinct.png

    02 - Killer Instinct.png

    03 - Donkey Kong Country.png

    04 - Donkey Kong Country 3.png

    05 - Mr. Nutz.png

    06 - Mr. Nutz.png

    07 - Super Mario World.png

    08 - Super Mario Bros. 3.png


    Qu'en pensez-vous ? :)
     
    #190 SuperLumberjack, 18 Mai 2018
    Dernière édition: 18 Mai 2018
  11. arnuche

    Points Repaire:
    3 470
    Recos reçues:
    8
    Messages:
    1 270
    Appréciations:
    +1 / 9 / -1
    Que t'es un grand malade :D
    C'est un compliment ;)

    Tu devrais expliquer (brièvement si possible) l'utilité de chaque resize et pourquoi il y en a 3.:-)
     
  12. SuperLumberjack

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    251
    Appréciations:
    +0 / 0 / -0
    Ben merci pour le compliment arnuche ! :-) On ne pouvait pas me faire plus beau compliment ! :D

    Pour expliquer brièvement ;) :

    - Je commence par multiplier la résolution de la source par 2 (en réalité c'est par 4, mais on va dire 2 pour simplifier, donc 2 fois horizontalement et 2 fois verticalement) avec le Spline16Resize. Je préfère le Spline16 au Spline36 ou Spline64, car il engendre moins de ringing je trouve, et il reste assez doux finalement.

    - Ensuite, je multiplie encore la résolution par 2 (enfin par 4, mais tu me suis :laugh:) avec le Nnedi3. Ça permet de donner un aspect un peu plus propre à l'image je trouve. J'ai mis "pscrn=3", car je trouve que c'est avec ce chiffre que ça ressemblait le plus à ce que c'était à l'origine, tout en donnant l'impression de combler un peu le vide que devraient en réalité apporter les scanlines sur un écran CRT. Ça bouche un peu par de l'information on va dire :-) D'ailleurs, c'était ça un peu mon but, avoir un rendu aussi propre que sur écran CRT, mais sans les scanlines. Et puis à l'époque, je ne me souvenais pas non plus que l'on collait le nez à l'écran, donc bon... :D Ce n'est évidemment pas parfait, mais on retrouve un peu de relief !

    - Ensuite, j'ai utilisé le GaussResize (ou plutôt la version améliorée, vu que l'on peut régler le paramètre "p" horizontalement et verticalement) pour arriver à une résolution qui est 2 fois celle de sortie. C'est à ce moment là aussi que je change l'aspect ratio, pour passer parfois du 8:7 au 4:3 (en réalité, c'est plutôt un rapport 585:448). Je trouve ce filtre très bon, pour étirer, corriger l'aspect ratio, en gros triturer l'image quoi :o Ça ne se voit pas trop contrairement à d'autres filtres de redimensionnement. Ce filtre n'engendre pas non plus de ringing.

    - Et puis à la fin, je finis par réduire à la résolution finale avec le Bicubic :-) J'ai toujours trouvé que c'est le filtre le plus naturel pour réduire une image.


    Voilà ! :good:

    Petite précision : Il ne faut jamais ajouter un filtre après le "return Last". Pour ceux qui ne le sauraient pas, cela sert à marquer la fin du programme ;-) Ce qu'il y a après les "#", il ne faut pas y toucher. C'est ce qui définit la fonction "GaussResize2".


    Je copie juste le script pour les vidéos en aspect ratio 8:7, pour éviter d'avoir à remonter toute la page :jap::


    AviSource()
    Spline16Resize(512, 448)
    nnedi3_rpow2(rfactor=2, nsize=0, nns=2, qual=1, etype=0, pscrn=3, threads=0, opt=0, fapprox=0)

    GaussResize2(4936, 4320, px=50, py=50)
    BicubicResize(2468, 2160)
    return Last

    ##################################
    function GaussResize2(clip C, int target_width, int target_height,
    \ float "src_left", float "src_top", float "src_width", float "src_height",
    \ float "px", float "py")
    {
    px = Default(px, 30.0)
    py = Default(py, px)
    R = C.GaussResize(target_width, C.Height,
    \ src_left, 0, src_width, 0, px)
    \ .GaussResize(target_width, target_height,
    \ 0, src_top, 0, src_height, py)
    return R
    }
     
  13. arnuche

    Points Repaire:
    3 470
    Recos reçues:
    8
    Messages:
    1 270
    Appréciations:
    +1 / 9 / -1
    Ok donc ça c'était bref o_O:D
    Et je suppose que ça donne mieux que si tu n'utilises qu'un seul resize.
     
  14. joet73

    Points Repaire:
    3 880
    Recos reçues:
    20
    Messages:
    492
    Appréciations:
    +41 / 58 / -3
    bonjour,
    J'integrerais des variables dans le script pour le rendre plus versatile.
    Il ne te reste plus qu'a creer un dll pour avisynth apres tout ce travail :D
     
  15. SuperLumberjack

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    251
    Appréciations:
    +0 / 0 / -0
    Oui, je ne peux pas faire plus court ! :laugh:

    Je ne dirais pas que c'est mieux qu'avec un seul resize. On va dire que ça me convient mieux plutôt ;-) La vérité, c'est que j'ai commencé par le plus simple au tout début, mais que je n'étais jamais entièrement satisfait. C'est pour cela que j'ai essayé d'en combiner plusieurs, car ils ont tous leurs avantages et leurs points faibles ;-) Après, je ne dis pas que ça restera mon dernier script, tu le sais bien :D

    Hello :)

    Quoi comme genre de variables ? C'est de l'humour je suppose :laugh::good:
    Je ne sais malheureusement pas comment créer un dll o_O
     

Partager cette page