module inscription newsletter haut de page forum mobile

Rejeter la notice
Formation Raw C200 Tourner en Raw avec une C200
Notre formation vidéo est disponible !
>> Toutes les infos <<

Filtrage et désentrelacement VHS avec Avisynth en 2020 (capture lossless)

Discussion dans 'Transferts vidéo analogique vers numérique' créé par arnuche, 3 Avril 2020.

  1. arnuche

    Points Repaire:
    3 470
    Recos reçues:
    8
    Messages:
    1 262
    Appréciations:
    +1 / 9 / -1
    Bonjour,

    je numérise quelques vieilles K7 en lossless (Lagarith yuy2) et je voudrais un peu améliorer le rendu avec Avisynth mais je n'ai plus fait ça depuis des années, je suppose qu'il y a eu du neuf entre-temps côté filtres.
    J'ai des soucis avec le Huffyuv (qui en plus prend beaucoup de place) et le Ut Video n'est pas compatible avec XP -et ma carte PVR-150 ne marche bien qu'avec XP-, d'où le choix du Lagarith.

    Donc j'en appelle aux spécialistes d'Avisynth pour me guider ;)

    Là je viens de numériser une K7 Hi8 de qualité très correcte datant de 1998 via un câble S-video, il n'y a pas besoin de gros filtrage mais je voudrais améliorer la luminosité et enlever un léger bruit vidéo.
    Toute la K7 a été filmée en studio, donc sans lumière naturelle.

    Je vais probablement l'encoder de 2 manières :
    -une version dvd en mpeg-2 4/3 entrelacé
    -une version AVCHD en x264 720p50 en respectant le 4/3, donc en ajoutant des bandes noires sur les côtés.

    L'idée est de faire un 1er script sans désentrelacement et sans resize mais avec le filtrage en restant en yuy2.
    J'utiliserai cette version pour le dvd (sauf que je ferai bien sûr un autre petit script pour rajouter les bordures et convertir le yuy2 en yv12).

    Puis je partirai de cette version filtrée pour faire la 2ème, et là j'aurai besoin du désentrelacement et du resize.

    En gros le 1er script ressemblerait à ça ;
    Code:
    avisource(vid originale.avi)#720.576
    assumeTFF()
    crop(22,2,-18,-14)#680.560
    filtrage=débruitage/correction couleurs ...
    Le script pour le dvd ;
    Code:
    avisource(vid ré-encodée.avi)#680.560
    assumeTFF()
    ConvertToYV12(interlaced=true)
    addborders(20,8,20,8)#720.576
    Et pour le 720p50, plus besoin de filtrage mais on désentrelace et fait le resize ;
    Code:
    avisource(vid ré-encodée.avi)#680.560 entrelacé
    assumeTFF()
    QTGMC(...)#50p
    resize(932.720)#en pixels carrés
    ConvertToYV12()
    addborders(174,0,174,0)#1280.720
    Voici un extrait de 161 Mo en Lagarith yuy2 (j'ai viré l'audio parce qu'on entendait de la musique qui ne m'appartient pas) ;
    capture 2020 ext LAGA yuy2.avi - Google Drive

    J'ai fait exprès de prendre un passage où il y a du mouvement et des petites lumières, ça permet de bien tester la partie désentrelacement.

    C'est donc surtout pour ce qui concerne le filtrage et la partie QTGMC/resize que j'ai besoin d'aide.

    Voici une capture pour que vous ayez déjà un aperçu ;

    [​IMG]

    Merci d'avance :jap:
     
    • Je recommande ! Je recommande ! x 1
  2. THEMASTER

    Points Repaire:
    1 970
    Recos reçues:
    7
    Messages:
    921
    Appréciations:
    +4 / 3 / -0
    Il ne faut pas cropper avant de filtrer, toujours à la fin, quitte à filtrer des portions de la video que tu ne garderas pas. En tout cas c'est préférable et selon mon expérience.

    dans l'ordre c'est:
    1. source entrelacée (bien spécifier qu'elle est entrelacée si convertion YUV ou RGB et l'ordre des champs (assumetff ou bff)
    2. désentrelacement (Qtgmc -> en mode lossless de préférence, plus long ou autre)
    3. filtrage divers (de préférence: 1. niveaux,balance blancs ,curves couleurs / saturation , contraste 2. réduction du bruit Y/C) 3. nettetté (parfois avant la réduc bruit ça dépend)
    4. crop + addborders, si nécéssaire

    Tu auras un souci avec bcp de filtres qui ne marchent qu'en YV12 si tu t'entêtes à vouloir rester en YUY2.
    C'est pas impossible mais il va falloir trier / te priver de certains.


    Pour le resize perso j'utilise toujours du spline36 [ex. spline36(960.720)] en fin de script qui ne m'a jamais déçu mais il y a des techniques plus avancées (et lentes) , voir sur le forum doom9.
     
  3. joet73

    Points Repaire:
    3 530
    Recos reçues:
    20
    Messages:
    455
    Appréciations:
    +29 / 41 / -3
    Bonjour,
    Par habitude j'utilise le genre de script suivant avec un resize en 2 parties (info recuperee il y a longtemps sur Doom9)
    J'utilise Avisynth+, c'est un peu different avec Avisynth

    Code:
    SetFilterMTMode("DEFAULT_MT_MODE",2)
    SetMemoryMax(8192)
    AviSource("E:\Temp\film.avi", audio = false)
    ConvertToYV12(interlaced=true, matrix="PC.709")
    AssumeTFF()
    LanczosResize(1280,height)
    QTGMC(Preset="slow", FPSDivisor=1)
    LanczosResize(width,720)
    Prefetch(12)
     
  4. giroudf

    So So

    Points Repaire:
    13 500
    Recos reçues:
    263
    Messages:
    12 756
    Appréciations:
    +386 / 1 400 / -17
    et avec virtualdub, on s'arrache moins la tete...
     
  5. arnuche

    Points Repaire:
    3 470
    Recos reçues:
    8
    Messages:
    1 262
    Appréciations:
    +1 / 9 / -1
    Merci joet73 pour le script. Disons que là j'aurais aimé pousser un peu plus les choses, encore que cette K7 soit d'assez bonne qualité et ne nécessite peut-être pas énormément de filtrage.

    Ok, pourquoi au juste ?

    En fait il y a une autre technique que j'avais utilisée il y a des années pour des sources entrelacées avec le filtre JDL_UnfoldFieldsVertical(flip=true) (intégré à la suite de filtres jdl-interlace) qui met les 2 champs l'un au-dessus de l'autre qui permet de transformer de l'entrelacé en progressif sans désentrelacement, très astucieux.

    J'ouvrais ça dans Virtual Dub, je filtrais avec Neat puis je ré-entrelaçais avec JDL_FoldFieldsVertical(flip=true) .

    Ton point 3 m'intéresse particulièrement, c'est le plus complexe à mettre en œuvre.

    J'ai encore des scripts que tu avais donnés sur d'autres topics il y a des années, c'était assez poussé avec notamment les filtres ;
    ue_chroma = UToY
    YToUV(ue_chroma, ve_chroma)
    CCD
    ylevels
    tweak
    coloryuv
    ColorMill
    Neat video
    fft3dfilter
    ...

    Tu parlais aussi de l'importance de l'analyse avec HistogramRGBParade, HistogramCMYLevels, Histogram ...

    Bref, du costaud quoi :D

    Notamment dans ce topic de 2013 ;
    Quels filtres pour VHS en 2013 ? | Transferts vidéo analogique vers numérique

    C'est quand-même un gros avantage de pouvoir garder le 4:2:2, surtout pour le désentrelacement je pense.
    Est-ce que tu sous-entends que ces filtres ne marchent pas non plus en YV16, qui est l'équivalent "planar" du yuy2 ?

    En effet, sur doom9 j'ai déjà vu d'autres méthodes (j'ai retrouvé un script utilisant Dither_resize16).
     
    #5 arnuche, 4 Avril 2020
    Dernière édition: 4 Avril 2020
  6. arnuche

    Points Repaire:
    3 470
    Recos reçues:
    8
    Messages:
    1 262
    Appréciations:
    +1 / 9 / -1
    @ THEMASTER ;
    En voulant re-tester Neat via Avisynth, je bloque sur un détail ; il a besoin de rgb, et dans le script que tu m'avais passé il y a des années, il y a converttorgb32().
    Sauf qu'en lisant la doc du filtre convert, je vois qu'il vaut mieux spécifier l'espace de couleurs.
    Convert - Avisynth wiki
    Alors j'ai testé converttorgb32(matrix="PC.601") qui est apparemment le réglage conseillé pour ce cas-là (j'ai vu ça dans plusieurs topics), notamment là ;
    Autolevels and full black frames - Doom9's Forum

    L'image est plus claire que si je fais converttorgb32().
    Et si j'ouvre l'avi directement dans Virtual Dub, le niveau de noir a l'air d'être le même qu'en passant par Avisynth avec converttorgb32().
    Donc on pourrait se dire que ce dernier est le bon, sauf que Virtual Dub ne fait peut-être pas la conversion idéale quand il ouvre un avi et qu'il vaudrait mieux faire converttorgb32(matrix="PC.601") ?
    Suivi de ConvertToYV16(matrix="PC.601") après Neat.

    Qu'en penses-tu ?


    edit : apparemment il vaudrait mieux utiliser Rec601 pour une source SD (mais j'ai encore du mal à comprendre pourquoi).
    J'ai testé ce script pour comparer une conversion directe de yuy2 à yv16 à une autre qui passe par le rgb32 ;
    Code:
    a=avisource("K:\avi\capture 2020 ext LAGA yuy2.avi").assumeTFF().ConvertToYV16().histogram()
    b=avisource("K:\avi\capture 2020 ext LAGA yuy2.avi").assumeTFF().ConvertTorgb32().ConvertToYV16().histogram()
    StackHorizontal(a,b)
    Sur certaines images il y a une différence alors qu'il me semble qu'en toute logique le résultat devrait être le même puisque j'utilise le réglage par défaut (Rec601), le passage par le RGB n'est donc pas neutre.
    Et c'est pareil si je rajoute crop(24,2,-20,-14) derrière assumeTFF().
     
    #6 arnuche, 12 Avril 2020
    Dernière édition: 12 Avril 2020
  7. THEMASTER

    Points Repaire:
    1 970
    Recos reçues:
    7
    Messages:
    921
    Appréciations:
    +4 / 3 / -0
    J'utilises toujours (99% des cas) la matrice Rec601 pour une source standard (SD) si ça peut t'aider.

    Quand on est en Rec 601 ou 709 la luma est limitée entre 16-235 (le noir = 16 et 235 blanc).
    En matricez Pc on passe en 0-255 donc il y a un risque que l'on "bouche les noirs" et "crame les blancs". (noirs trop noirs / blancs trop blancs).
    Donc tout ce qui est Films, music video, tv sur support vhs, dvd, LD c'est du 16-235 en 601/709.
    Une des exceptions c'est les caméscopes (Hi-8 etc..) qui avait un plus grand gamut d'où l'utilité de la matrice pc.601/709

    Si ta source est entrelacée bien spécifier toujours l'entrelacement, sinon avisynth interprète comme si c'était du progressif par défaut:
    converttorgb32(matrix="rec601", interlaced=true)
    converttorYUY2(matrix="rec601", interlaced=true)


    Pour le crop c'est mieux à la fin surtout pour une source entrelacée car il faut cropper en MOD4 (la hauteur doit être un multiple de 4) (pour du YV12) sinon tu peux inverser l'ordre des champs et c'est la cata... Si tu sais ce que tu fais fonce..


    Plus d'infos ici: Crop - Avisynth wiki
     
  8. arnuche

    Points Repaire:
    3 470
    Recos reçues:
    8
    Messages:
    1 262
    Appréciations:
    +1 / 9 / -1
    Merci !

    Ah ben justement je suis en train de numériser des K7 Hi8 et Video8, pas évident de savoir ce que je dois faire, j'ai toujours peur de mal convertir l'espace de couleurs.

    D'après la doc ça n'a d'effet que s'il y a du YV12 dans la conversion ;
    Et le rec601 je ne l'avais pas mis puisque c'est le réglage par défaut du filtre convert.

    Toujours est-il que l'histogramme montre une différence entre ConvertToYV16() et
    ConvertTorgb32().ConvertToYV16() alors que je pense que ça devrait être pareil puisqu'on n'enlève rien et qu'on ne rajoute rien (pas de passage par du 4:2:0).
    À moins que la simple conversion fasse office de correction en limitant le gamut.
    Faudrait que je ré-essaye avec pc.601 au lieu de rec601 vu que cette vidéo vient d'une K7 Hi8.

    Oui, je fais toujours attention à ça, je croppe un multiple de 2 au minimum de chaque côté et un multiple de 4 en tout (donc par exemple 2 en haut et 6 en bas), la parité reste la même.

    À part ça j'ai continué mes recherches sur doom9 et j'ai trouvé le filtre Autolevels que j'ai testé de plusieurs manières et ce script donne de bons résultats ;
    Code:
    Autolevels(autogamma=true)
    Il a beaucoup éclairci l'image d'une de mes K7 filmée en intérieur et ça permet de re-découvrir des détails dans les zones sombres.
    Le développeur conseille fortement de cropper avant sinon ça fausse l'analyse.
    Je crois qu'il est censé se passer des filtres ylevels, histogram ou ColorYUV qui ne sont pas simples à utiliser. Par contre j'ai un doute sur tweak, ça vaut peut-être le coup de l'utiliser après.
     
  9. arnuche

    Points Repaire:
    3 470
    Recos reçues:
    8
    Messages:
    1 262
    Appréciations:
    +1 / 9 / -1
    @ THEMASTER ;
    si tu as une idée pour régler le problème suivant, ça m'aiderait grandement.;-)

    J'ai continué mes tests, notamment avec Qtgmc, sauf que je me suis rendu compte qu'il y a une sorte de chroma shift sur certains mouvements, ça se voit déjà sur l'original en séparant les champs ;

    [​IMG]
    Obtenu avec ce simple script ;
    Code:
    avisource("K:\avi\capture 2020 ext LAGA yuy2.avi")#720.576 yuy2
    assumeTFF()
    crop(24,2,-20,-14)#676.560
    separatefields()
    C'est encore plus visible après désentrelacement et upscale, on voit des lignes rouges autour de certains objets sur les images en mouvement rapide, exemple avec la bobine blanche en haut à droite ou le bord de la table brune en-dessous ;

    [​IMG]

    Ou les chiffres sur la table de mix ;

    [​IMG]

    Obtenu avec ce script appelé à évoluer (je devrai sans doute rajouter Neat avant Qtgmc) ;
    Code:
    SetMemoryMax(1024)
    SetFilterMTMode("DEFAULT_MT_MODE", 2)
    avisource("K:\avi\capture 2020 ext LAGA yuy2.avi")#720.576 yuy2
    assumeTFF()
    crop(24,2,-20,-14)#676.560
    Autolevels(autogamma=true)
    QTGMC(Preset="slow", EdiThreads=4, SourceMatch=3, Sharpness=0.8, TR2=2, Lossless=2)
    spline36resize(928,720)
    Prefetch(4)
     
  10. THEMASTER

    Points Repaire:
    1 970
    Recos reçues:
    7
    Messages:
    921
    Appréciations:
    +4 / 3 / -0
    Si tu as un sample de la video ( 10 sec max) c'est faisable...

    mais à priori je dirais que le crop est le problème
     
  11. arnuche

    Points Repaire:
    3 470
    Recos reçues:
    8
    Messages:
    1 262
    Appréciations:
    +1 / 9 / -1
    J'en avais mis un dans le premier post, sous les scripts, je remets le lien ici ;
    capture 2020 ext LAGA yuy2.avi - Google Drive
    J'ai volontairement choisi un passage difficile avec des mouvements rapides et des petites lumières.

    Ah bon, je suis curieux d'en savoir plus, pourtant j'ai enlevé un multiple de 4.
    Le souci est qu'il faut que je croppe pour Autolevels dont je ne peux déjà plus me passer, on voit bien son effet et on peut le constater aussi avec l'histogramme.
    À moins qu'il y ait moyen de procéder dans un autre ordre.

    edit : même sans crop, juste en faisant separatefields() on voit le souci (image 528 notamment).
     
  12. THEMASTER

    Points Repaire:
    1 970
    Recos reçues:
    7
    Messages:
    921
    Appréciations:
    +4 / 3 / -0
    C'est un problème d'espace colorimétrique; je suis en YV12 avec qtgmc pas de souci de lignes dans les mouvements. utilise converttoyv12(interlaced=true) avant qtgmc
     
  13. arnuche

    Points Repaire:
    3 470
    Recos reçues:
    8
    Messages:
    1 262
    Appréciations:
    +1 / 9 / -1
    Bon alors effectivement, si je mets converttoyv12(interlaced=true) avant separatefields() (sans même tester avec Qtgmc), ça a l'air d'enlever ces lignes rouges.
    Mais je ne pige pas du tout pourquoi puisque la capture a été faite en yuy2, donc une simple séparation des champs ne devrait pas poser de souci.
    Ou alors ma PVR-150 fait en réalité du 4:2:0 :perplexe:, bien que mes tests montrent qu'elle est censée capturer en 4:2:2 ; si je capture avec Virtual VCR sans codec, j'obtiens un fichier HCW2 4:2:2 (d'après MediaInfo).
    Mais j'ai retrouvé ça (j'avais ce lien depuis un moment et plus lu depuis des années) ;
    Capturing AVIs w/ PVR-150 - Doom9's Forum
    Donc en fait ce serait en réalité du 4:2:0 empaqueté en 4:2:2, très étrange.o_O

    Merci pour ton aide en tout cas.
     
  14. arnuche

    Points Repaire:
    3 470
    Recos reçues:
    8
    Messages:
    1 262
    Appréciations:
    +1 / 9 / -1
    Tu avais raison d'émettre des doutes aussi sur le crop, il posait également un problème de halo rouge.
    Mais si je le décale de 2 lignes alors ça va, donc ça c'est ok ;
    crop(24,0,-20,-16)
    ça non ;
    crop(24,2,-20,-14)
    bien que ce soit la même résolution.
    Mais si je convertis en yv16 (avec interlaced=true) avant le crop, alors les deux sont OK.

    J'ai essayé un script (filtres KNLMeansCL, VariableBlur, TTempSmooth) que tu avais donné dans un autre topic ;
    Peigne d'entrelacement à l'import de VHS | Transferts vidéo analogique vers numérique
    En tout cas la 1ère partie (je n'ai pas mis la fin avec le filtre CCD), mais il est d'une lenteur extrême : 0,019 fps sur mon pc :weird: (je vois ça avec AVSMeter), ce qui le rend inutilisable puisqu'il faut plus d'une minute pour traiter une image !

    J'imagine que c'est dû à leur codage assez ancien parce que Qtgmc fait des calculs très complexes aussi mais est nettement plus rapide (entre 10 et 15 fps selon les réglages).

    Tu n'aurais pas autre chose du même genre avec des filtres plus rapides ?
     
  15. ogt

    ogtx
    Conseiller Technique So

    Points Repaire:
    17 700
    Recos reçues:
    530
    Messages:
    22 982
    Appréciations:
    +657 / 1 287 / -39
    C'est bien de s'amuser avec des scripts laborieux, en ces temps de confinement ça occupe,
    mais je suis persuadé qu'un obtiendrait, en deux coup de cuillère à pot, un résultat aussi bon avec un bon logiciel de montage, sans se prendre le choux !
    mais bon courage quand même.

    Olivier
     

Partager cette page