Modérateurs: Modération Forum Home-Cinéma, Le Bureau de l’Association HCFR • Utilisateurs parcourant ce forum: Jigsaw et 32 invités

Tout ce qui concerne les logiciels lié au HC sur ordinateur (PC, Mac, Linux...)
Règles du forum
Avant de poster, merci de prendre connaissance des règles du forum : à lire avant de poster

PCHC avec Avisynth+ & pixel shaders

Message » 20 Avr 2022 21:47

Voici maintenant qq infos sur la mise en oeuvre d'un filtrage IIR numérique multi-bandes de type Linkwitz-Riley.

Dès l'instant où on est en multi-bandes, les choses se compliquent par rapport à un simple filtre 2 voies où on a juste besoin d'un LPF et d'un HPF qui se complémentent correctement. Pour un filtre 2 voies, il faut que la sommation des réponses de chaque filtre ait un spectre d'amplitude plat et un spectre de phase dont la variation non linéaire n'est pas ou quasi pas audible. C'est ce que permet un LR4 (coupure de -24 dB/octave) ou un LR8 (coupure de -48 dB/octave). Pour ceux qui ne le savent pas, un LR est constitué de 2 filtres de Butterworth successifs. Par exemple, un RL4 Passe-bas est constitué de 2 butterworth d'ordre 2 passe-bas qui coupent chacun avec une pente de -12 dB/octave.

Imaginons qu'on veuille maintenant faire un filtrage trois voies numérique.

L'approche Naïve qui consiste à enchaîner 2 filtrages LR successifs avec 2 fréquences de coupure différentes :

Code: Tout sélectionner
in -> HPF -> out1H -> HPF -> out2HH
   \               \
    \               \-> LPF -> out2HL   
     \
      \-> LPF -> out1L


ne fonctionne pas car si on somme les signaux out1L, out2HL et out2HH, on peut constater qu'on obtient un signal dont le spectre d'amplitude a des accidents au niveau des fréquences de coupures.

Les modules de filtrages VST multibandes qui sont correctement implémentés corrigent ce problème. C'est le cas par exemple du module VST CrossOver (x86) de RS-MET :
http://www.rs-met.com/freebies.html

ou du module VST ISOL8 (x86 et x64) de TBProAudio :
https://www.tbproaudio.de/products/isol8

Vous pouvez le vérifier en envoyant un bruit blanc en entrée. La somme des sorties correspondants à chaque bande doit alors avoir un spectre d'amplitude plat. On peut bien sûr utiliser ces modules tout fait. Mais on peut aussi avoir envie de le faire soi-même avec Usine (x64), notamment parce qu'ISOL8 consomme pas mal de ressources CPU dès qu'on a bcp de canaux d'entrée car il faut alors utiliser plusieurs modules VST. Une autre raison est qu'on n'a pas forcément besoin d'un filtre 5 bandes qui ajoute forcément de la complexité dans le codage interne du module ... Par ailleurs, on peut avoir envie d'utiliser des pentes différentes pour chaque filtre, ce qu'ISOL8 ne permet pas ...
Dernière édition par Emmanuel Piat le 21 Avr 2022 20:03, édité 5 fois.
Emmanuel Piat
Contributeur HCFR 2016
 
Messages: 10431
Inscription Forum: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • offline

Message » 20 Avr 2022 21:48

Un premier indice pour implémenter correctement les choses est donné dans la doc pdf de CrossOver :

A Linkwitz-Riley filter consists of two identical Butterworth (IIR) filters in series with their half-power frequency (-3.01 dB) adjusted to the desired crossover frequency. When summing the outputs of a Linkwitz-Riley pair, we don’t get our original signal back exactly, but at least the magnitude response of the sum-filter will be flat. That is: the sum of the filter pair yields an allpass filter. This is much better than having to live with strange behaviour in the magnitude response around the crossover frequency and that’s why Linkwitz-Riley filters are so popular in the context of analog crossover designs. Because of the series connection of two identical Butterworth filters each of which having a slope of some integer multiple of 6dB/oct, Linkwitz-Riley filters come with slopes of integer multiples of 12dB/oct. Because the Butterworth filters have a -3.01dB gain at the crossover frequency, the corresponding Linkwitz-Riley filter will have a -6.02dB gain there. Sometimes, Linkwitz-Riley filters are also called Butterworth-squared filters, because their magnitude response is that of a Butterworth filter squared (putting two identical filters in series yields squaring of the magnitude response).

More than two bands:
One approach to split a signal into more than 2 bands is to use a bank of parallel bandpass-filters (and a lowpass and highpass for the bottommost and topmost bands). Here, however, we will discuss another approach: we take the lowpass- and/or highpass output of a 2-way crossover and split that signal further. When doing this with Linkwitz/Riley filters, we unfortunateley loose the desirable property that the sum of the output-channels sums flat - adding up the bands will not yield an allpass filter anymore. Consider the case where we first split the original signal into a low and high band. Adding these two bands produces an allpass filter, as explained before. Now we further split the low band into low-low and low-high. Adding low-low, low-high and high is now not allpass anymore because low-low + low-high does not equal our low-signal from the first splitter-stage. Instead, the addition of low-low and low-high is itself an allpass filtered version of the low-signal from the first splitter stage. In order to make our overall sum flat again, we have to compensate this allpass filtering by applying the exact same allpass filter to our high band as well. Similarly, we would have to insert a compensation allpass on the low band, if we had split the high band further. And when we split both bands further, we need compensation allpasses on both branches. ... and this is exactly what this CrossOver plugin does.
Dernière édition par Emmanuel Piat le 20 Avr 2022 23:00, édité 1 fois.
Emmanuel Piat
Contributeur HCFR 2016
 
Messages: 10431
Inscription Forum: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • offline

Message » 20 Avr 2022 21:49

Bon, c'est pas d'une limpidité extraordinaire, mais on en déduit qu'il va falloir rajouter un filtre passe-tout dans la branche du bas de mon petit schéma au-dessus. Autrement dit, il va falloir filtrer out1L avec un passe-tout (All-Pass Filter) pour obtenir un nouveau signal out2LL :

Code: Tout sélectionner
in -> HPF -> out1H -> HPF -> out2HH
   \               \
    \               \-> LPF -> out2HL   
     \
      \-> LPF -> out1L -> APF -> out2LL


La raison de ce traitement qui peut paraître étonnant est très bien expliquée ici :

https://www.modernmetalproduction.com/l ... rocessing/
Schéma associé téléchargeable : https://docs.google.com/drawings/d/1IhM ... =677&h=133

Pour fabriquer un passe-tout (APF), on peut combiner un LPF et HPF de type LR et sommer leur sortie, ce qui donne :

Code: Tout sélectionner
in -> HPF -> out1H -> HPF -> out2HH
   \               \
    \               \-> LPF -> out2HL   
     \
      \-> LPF -> out1L ---> HPF ---> + -> out2LL
                       \            /
                        \-> LPF -> /   


Dans le lien précédent, on voit aussi qu'il faut injecter un inverseur à un endroit donné. En fait la présence ou pas de cet inverseur va déprendre de l'ordre des filtres butterworth utilisés. Si en plus on utilise des filtres d'ordres différents pour chaque coupure (par exemple un RL6 et un RL8), la logique associée à la présence ou l'absence des inverseurs se complique un peu. Mais l'essentiel est là et on peut maintenant implémenter l'approche sous Usine pour faire un filtrage 3 bandes.
Dernière édition par Emmanuel Piat le 21 Avr 2022 7:33, édité 3 fois.
Emmanuel Piat
Contributeur HCFR 2016
 
Messages: 10431
Inscription Forum: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • offline

Message » 20 Avr 2022 21:51

Si on utilise les modules RL4 tout fait d'Usine, c'est très simple (et il n'y a pas besoin d'ajouter d'inverseur). La source à gauche est ici un générateur de bruit blanc (monovoie) :

Image

Sur le schéma; j'ai sommé les sorties des 4 filtres pour vérifier que la somme a un spectre d'amplitude plat. En pratique, on prendra évidemment, la sortie de chaque bande. La bande out2LL sera la somme des 2 filtres du bas.
Emmanuel Piat
Contributeur HCFR 2016
 
Messages: 10431
Inscription Forum: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • offline

Message » 20 Avr 2022 21:57

Si on veut qqchose d'entièrement paramétrable (XOver 1, XOver2, ordre1, ordre2) comme ds le VST CrossOver, il faut utiliser des filtres Butterworth en série, ce qui fait un cablage un peu plus compliqué mais la logique reste la même avec en plus des inverseurs qu'il faut schinter ou pas selon les ordres qui ont été choisis pour les filtres butterworth :

Image

Quoi qu'il en soit, une personne motivée parviendra sans difficulté à ses fins avec les infos que j'ai fourni car elle a désormais tous les éléments en main. Pour vérifier que tout est ok, il faut monitorer la réponse en fréquence de la somme des bandes et aussi de chaque bande individuellement (ici je le fais avec le VST x64 gratuit de Blue Cat dont j'ai donné le lien + haut).
Dernière édition par Emmanuel Piat le 20 Avr 2022 22:38, édité 3 fois.
Emmanuel Piat
Contributeur HCFR 2016
 
Messages: 10431
Inscription Forum: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • offline

Message » 20 Avr 2022 22:01

Bonsoir Emmanuel,

Emmanuel Piat a écrit:Voici maintenant qq infos sur la mise en oeuvre d'un filtrage IIR numérique multi-bandes de type Linkwitz-Riley.

Dès l'instant où on est en multi-bandes, les choses se compliquent par rapport à un simple filtre 2 voies où on a juste besoin d'un LPF et d'un HPF qui se complémentent correctement. Pour un filtre 2 voies, il faut que la sommation des réponses de chaque filtre ait un spectre d'amplitude plat et un spectre de phase dont la variation non linéaire n'est pas ou quasi pas audible. C'est ce que permet un LR4 (coupure de -24 dB/octave), voir un LR8 (coupure de -48 dB/octave). Pour ceux qui ne le savent pas, un LR est constitué de 2 filtres de Butterworth successifs. Par exemple, un RL4 Passe-bas est constitué de 2 butterworth d'ordre 2 passe-bas qui coupent chacun avec une pente de -12 dB/octave.

J'ai l'impression que tu confonds filtre électrique et filtre acoustique dans le cadre d'une mise au point d'enceinte, non ?

Car si le soft/plugin/module ne permet que de faire du LR4 ou LR8 pour faire la mise au point, il sera très difficile d'avoir de bons résultats :-?
Esscobar
 
Messages: 8422
Inscription Forum: 27 Sep 2016 18:10
Localisation: 86 - Châtellerault
  • offline

Message » 20 Avr 2022 22:16

L'influence de la salle est ici passée sous silence et je suppose que tous les HP avec leur charge associée (au maxi : SUB / BOOMER /WOOFER / MEDIUM / AIGU) ont des centres acoustiques correctement calés temporellement (retard) et avec une réponse en phase et une réponse de même amplitude.

Dans ce cas le filtrage, qu'il soit numérique, analogique actif ou analogique passif n'a qu'un seul objectif : faire parvenir à chaque HP la bande de fréquence qu'il doit reproduire sachant que le tout doit être "plat". L'avantage de le faire numériquement, c'est qu'on fait ce qu'on veut et qu'il n'y a pas de pb de vieillissement ou de dérive ds le temps.

Si l'hypothèse écrite au dessus n'est pas vérifiée, il faut en plus ajouter sur les sorties des bandes du filtrage numérique : (i) des délais et (ii) des éventuelles inversions de phase. Les différences de niveaux sont en général gérées au niveau des amplis de chaque HP (si 1 ampli par HP comme ds les moniteurs)

Concernant la correction de salle, c'est une autre histoire. L'approche la plus simple consiste à rajouter des EQ (FIR ou IIR) en amont ou en aval du filtrage numérique (selon qu'on veut égaliser l''ensemble ou chaque voie en particulier).
Dernière édition par Emmanuel Piat le 21 Avr 2022 7:44, édité 10 fois.
Emmanuel Piat
Contributeur HCFR 2016
 
Messages: 10431
Inscription Forum: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • offline

Message » 20 Avr 2022 22:21

Par exemple dans mon cas j'ai des moniteurs 3 voies filtrés activement.

Je pars du principe que le fabriquant a fait son boulot correctement et je ne retouche pas ce filtrage. Je considère donc mon moniteur comme un tout (c-à-d une sorte d' "HP virtuel" large bande) dont je veux compléter la réponse vers les basses fréquences en utilisant un boomer supplémentaire pour le bas grave + le sub pour l'extrême grave (infra).

J'ai donc besoin d'un filtre numérique 3 bandes :
- une pour le moniteur,
- une pour le boomer,
- une pour le sub.

Pour le boomer et le sub il n'y aura pas de filtre électrique (actif ou passif). Tout est fait en numérique.
Emmanuel Piat
Contributeur HCFR 2016
 
Messages: 10431
Inscription Forum: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • offline

Message » 21 Avr 2022 19:43

J'ai implémenté un réglage des pentes ds Usine qui s'inspire de celui du VST CrossOver de RS-MET : grâce aux boutons dec / inc on peut maintenant sélectionner la pente des filtres LR entre 12 dB/oct et 96 dB/oct (par pas de 12 dB/oct). La pente sélectionnée s'affiche au dessus des boutons.

Image
Emmanuel Piat
Contributeur HCFR 2016
 
Messages: 10431
Inscription Forum: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • offline

Message » 21 Avr 2022 22:25

Emmanuel Piat a écrit:Par exemple dans mon cas j'ai des moniteurs 3 voies filtrés activement.

Je pars du principe que le fabriquant a fait son boulot correctement et je ne retouche pas ce filtrage. Je considère donc mon moniteur comme un tout (c-à-d une sorte d' "HP virtuel" large bande) dont je veux compléter la réponse vers les basses fréquences en utilisant un boomer supplémentaire pour le bas grave + le sub pour l'extrême grave (infra).

J'ai donc besoin d'un filtre numérique 3 bandes :
- une pour le moniteur,
- une pour le boomer,
- une pour le sub.

Pour le boomer et le sub il n'y aura pas de filtre électrique (actif ou passif). Tout est fait en numérique.

Ah ok ton cas est particulier, et effectivement, tu peux plus facilement te contenter de filtre électrique qui te donneront directement la bonne réponse acoustique ;)

Car sinon il faut mesure pour appliquer les bon choix topologique et fréquentielle pour obtenir les bonnes courbes cibles acoustiques LR24 :

http://www.justdiyit.com/methode-mise-a ... actif-iir/

Dans cet exemple autant le LR24 sur le woofer à la fréquence désirée a permis d'obtenir le LR24 acoustique désirée, autant sur le tweeter il a fallu appliquer un BUT12 pour obtenir le LR24 acoustique :wink: .
Esscobar
 
Messages: 8422
Inscription Forum: 27 Sep 2016 18:10
Localisation: 86 - Châtellerault
  • offline

Message » 22 Avr 2022 0:19

Oui bien sûr :wink: . Les éléments qui se cumulent successivement ds la réponse en fréq sont :

1) Le filtrage numérique ds le PC qui va induire :

- la courbe de réponse du filtrage PC "amplitude vs freq" : en général on la choisit plate.
- la courbe de réponse du filtrage PC "déphasage vs fréq" : on peut la mesurer en loopback logiciel avec des soft comme REW ou ARTA, ce qui permet de savoir comment on déphase d'emblée en sortie du PC.

2) S'il est présent le filtrage de l'enceinte (qui peut être analogique actif/passif, ou numérique sur les moniteurs avec DSP intégré) qui va ensuite induire :

- la courbe de réponse du filtrage enceinte "amplitude vs freq"
- la courbe de réponse du filtrage enceinte "déphasage vs fréq"

4) la réponse naturelle des HP+charge qui va ensuite induire :

- la courbe de réponse de l'enceinte reliée au PC en champ libre "amplitude vs freq"
- la courbe de réponse de l'enceinte reliée au PC en champ libre "déphasage vs fréq"

5) le couplage avec la salle qui va ensuite induire :

- la courbe de réponse finale "amplitude vs freq"
- la courbe de réponse finale "déphasage vs fréq"

En fonction de cette réponse finale, on peut alors ajouter des éléments correcteurs sur l'amplitude (EQ numérique etc.) ou sur la phase (RePhase) avant 1) ou entre 1) et 2) ... On peut aussi viser une courbe de réponse cible en amplitude. Tout ça nécessite de comprendre ce qu'on fait lorsqu'on décide d'agir sur 1) 2) 3) 4) 5) ... Il faut y aller étape par étape, tout en faisant des choix.
Emmanuel Piat
Contributeur HCFR 2016
 
Messages: 10431
Inscription Forum: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • offline

Message » 22 Avr 2022 0:21

Et il faut aussi éviter l'ésotérisme ... :mdr:
Emmanuel Piat
Contributeur HCFR 2016
 
Messages: 10431
Inscription Forum: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • offline

Message » 22 Avr 2022 11:48

Alors voici pour l'instant les modifications sur le scripts que j'utiliserai :

Code: Tout sélectionner
####################################################
# Avisynth Filter Script for x86/x64 HTPC decoding #
####################################################
# Avisynth Filter is made by CrendKing:            #
# https://github.com/CrendKing/avisynth_filter     #
####################################################

# x86 & x64 ffavisynth.dll and ffavisynth.avsi autoload script must be present
# in plugins+ & plugins64+ directories of aviSynth+ in order to use ffdshowSWScaler()

# MT Configuration
SetFilterMTMode("AvsFilterSource",3)
SetFilterMTMode("MT_MULTI_INSTANCE",3) # second parameter can be 2 or 3

# Source of aviSynth Filter
AvsFilterSource()

# Show info on input frames
#Info()

HTPCVideoProcessing(boostAcutance = 65,      /* to boost acutance (BRD HD only): 125 | 65 | 25 | 0     */
 \                  boostTM = true,         /* to boost tone mapping (BRD UHD only)                   */
 \                  cropPreset = 0,         /* 0 (no crop) | 1 (1.85:1) | 2 (2.35:1) | 3 (1.33:1) | 4 (manual vertical) | 5 (manual horizontal)   */
 \                  cropOffset = 0,      /* additive offset for fine adjustment of cropping limits */
 \                  cropBorderHW = 0,      /* for manual adjustment of cropping limits               */
 \                  cropShowLine = false,   /* to visualize top and bottom cropping limits            */
 \                  mire = false,         /* to display a geometric pattern                         */
 \                  OSD = false   /* to display information about current post-processing   */
 \)

# Preset adjustment to Show Y' Histogram:
# for mkv or cropped video set preset = -1 and borderHeight = 15 else for Blu-ray HD or UHD:
# 1.85:1 ratio => set preset = 1
# 2.35:1 ratio => set preset = 2
# 1.33:1 ratio => set preset = 3
# and adjust with positive or negative offset.
# showline = true to visualize with red lines the top and bottom limits of the area taken
#            into account to compute the histogram (should be a little inside the picture)
# UHD = true if UHD frame, else false

#HistogramY(preset=2, offset=15, borderHeight=15, UHD=false, showline=true)

# Show info on output frames
#Info()

Prefetch(5) # if not 6C/12T, remplace 13 by the number of threads available + 1.

Ici j'ai surtout introduit de nouveau preset pour le cropping

Code: Tout sélectionner
function HTPCVideoProcessing(clip clp,
 \     int "boostAcutance",     /* to boost acutance (BRD HD only): 125 | 65 | 25 | 0     */
 \     bool "boostTM",          /* to boost tone mapping (BRD UHD only)                   */
 \     int "cropPreset",        /* 0 (no crop) | 1 (1.85:1) | 2 (2.35:1) | 3 (1.333:1) | 4 (manual vertical) | 5 (manual horizontal)  /
 \     int "cropOffset",        /* additive offset for fine adjustment of cropping limits */
 \     int " cropBorderHW",     /* for manual adjustment of cropping limits               */
 \     bool "cropShowLine",     /* to visualize top and bottom cropping limits            */
 \     bool "mire",             /* to display a geometric pattern                         */
 \     bool "OSD")              /* to display information about current post-processing   */
{
   boostAcutance = default( boostAcutance, 0)
   boostTM = default( boostTM, false)
   cropPreset = default( cropPreset,0)
   cropOffset = default( cropOffset,0)
   cropBorderHW = default(  cropBorderHW, 200)
   cropShowLine = default( cropShowLine,false)
   mire = default(mire, false)
   OSD = default(OSD, false)

   # SD, HD or UHD source?
   if (clp.width <= 3840 || clp.height <= 2160 {  # UHD YUV420P10 (or more) source like BRD UHD
             #############################################

   # Remark: avisynth Filter version 1.3.1 converts all P10/12 sources in P16
   # using zero padding. This gives a correct tone mapping under MPC VR

   mire ? Mire4K(clp,pattern = "C:\Program Files (x86)\AviSynth+\plugins64+\reso4K.png") : clp
   cropPreset == 0 && cropOffset ==0 ? last :
 \ VertHorzCrop(preset=cropPreset,offset=cropOffset,borderHW=cropBorderHW,type="UHD",showline=cropShowLine)

   # Image preprocessing to boost the TM (1.114 seems a good gain value and 1.12 a maximal value)
   boostTM ? Levels(4096, 1.0, 60160, 4096, 60160*1.114, false, false) : last
 
   NaturalSharpen4K(LSFstr=18.25,usHQstr=0.18)
   
   } else if (clp.width <= 1920 || clp.height <= 1080 && clp.IsYV12) { # FHD YV12 8bpp source like BRD
                                                  ##############################

   mire ? Mire2K(clp,pattern = "C:\Program Files (x86)\AviSynth+\plugins64+\reso2K.png") : clp
   cropPreset == 0 && cropOffset ==0 ? last :
 \ VertHorzCrop(preset=cropPreset,offset=cropOffset,borderHW=cropBorderHW,type="FHD",showline=cropShowLine)
 
   NaturalSharpen2K(LSFstr=21.25,usHQstr=0.23)
   boostAcutance > 0 ? ffdshowSWScaler(lsharp=boostAcutance,csharp=0) : last
   
   } else if (clp.width <= 1280 || clp.height < 720 && clp.IsYV12) {  # HD YV12 8bpp
                                          ##############################

   mire ? Mire2K(clp,pattern = "C:\Program Files (x86)\AviSynth+\plugins64+\reso2K.png") : clp
   cropPreset == 0 && cropOffset ==0 ? last :
 \ VertHorzCrop(preset=cropPreset,offsetver=cropOffset,borderHW=cropBorderHW,type="HD",showline=cropShowLine)
   NaturalSharpen2K(LSFstr=21.25,usHQstr=0.23)
   boostAcutance > 0 ? ffdshowSWScaler(lsharp=boostAcutance,csharp=0) : last 
   
   } else {  # SD YV12 8bpp source like DVD
                                          ##############################

   mire ? Mire2K(clp,pattern = "C:\Program Files (x86)\AviSynth+\plugins64+\reso2K.png") : clp
   BlackmanResize(taps=4,clp.height*16/9,clp.height) # frame Desanamorphosis
   boostAcutance > 0 ? ffdshowSWScaler(lsharp=boostAcutance,csharp=0) : last
   convertToRGB32(matrix = "Rec601",interlaced=false,chromaresample = "blackman")
   
   OSD ?
 \ Subtitle(String(clp.height < 720 ? "SD source processing" :
 \          clp.height <= 1080 ? "HD source processing" :
 \                               "UHD source processing")
 \ + "\nOutput frame: " + String(last.width) +"x"+ String(last.height)
 \ + "\nPixel format: " +String(last.pixelType)
 \ + "\nCropping: " + String(cropPreset != 0)
 \ + "\nBoostAccutance: " + String(clp.width <= 1920 ? boostAcutance : "none")
 \ + "\nBoost tone mapping: " + String(clp.width > 1920 ? boostTM : "none")
 \ , lsp = 0, x = last.width-210, y = 30, last_frame = 96, text_color=color_white) : last

   return last
}

Pour gérer 4 profils de définition différents : UHD, FHD, HD et SD

Bon il faudra adapter le script pour le traitement en HD (720p), car là il est identique au FHD (1080p). Et je gère la reconnaissance des sources 4/3.

Code: Tout sélectionner
# Crop the black borders of a FHD or UHD Blu-ray disc

# if defined, preset specifies a predefined value for the image ratio

# preset = 0: no preset and borderHW is taken into account
# preset = 1: borderHW set for a 1.85:1 format movie
# preset = 2: borderHW set for a 2.35:1 format movie
# preset = 3: borderHW set for a 1.333:1 format movie
# preset = 4: borderHW manual crop vertical
# preset = 5: borderHW manual crop horizontal

# borderHW: if defined, gives the top and bottom black borders height or width that will be cropped.
# offset: value added to borderHW to define the number of lines to crop.
# Usefull if ratio is used with a movie that don't exactly respect the predefined format.
# UHD: set to true if UHD Blu-ray disk, false if FHD
# showline: set to true to visualize the crop limits with a red line (cropping not achieved in this case)

function VertHorzCrop(clip clp, int "preset", int "offset", int "borderHW", string "type", bool "showline")
{
   preset = default(preset, 4)
   type = default(type, "FHD")
   ss = type=="UHD" ? 2 : type=="FHD" ? 1 : type=="HD" ? 0.67 : "SD"
   offset = default(offset, 0)
   showline = default( showline, false)
   borderHW = default( borderHW, 0)
   
   borderHW = preset>=4 ? offset : preset==1 ? offset+22*ss : preset==2 ? offset+132*ss : preset==3 ? offset+240*ss : borderHW
   borderHW = (borderHW < 0 || borderHW > clp.height/2 || borderHW > clp.width/2) ? 0 : borderHW/2*2

   if (borderHW > 0 && preset == 1 || preset == 2) {
      Crop(clp,0,borderHW,0,-borderHW)
      showline ? Eval("""
      last.AddBorders(0,2*ss,0,2*ss,$800000)
      borderHW > 0 ? Overlay(clp,last,x=0,y=(borderHW-2)*ss,mode="blend") : last
      """) : last
   } else if (borderHW > 0 && preset == 3) {
      Crop(clp,borderHW,0,-borderHW,0)
      showline ? Eval("""
      last.AddBorders(2*ss,0,2*ss,$800000,0)
      borderHW > 0 ? Overlay(clp,last,x=0,y=(borderHW-2)*ss,mode="blend") : last
      """) : last
   } else if (borderHW > 0 && preset == 4) {
      Crop(clp,0,borderHW,0,-borderHW)
      showline ? Eval("""
      last.AddBorders(0,2*ss,0,2*ss,$800000)
      borderHW > 0 ? Overlay(clp,last,x=0,y=(borderHW-2)*ss,mode="blend") : last
      """) : last
   }
   } else {
      Crop(clp,borderHW,0,-borderHW,0)
      showline ? Eval("""
      last.AddBorders(2*ss,0,2*ss,0,$800000)
      borderHW > 0 ? Overlay(clp,last,x=0,y=(borderHW-2)*ss,mode="blend") : last
      """) : last
   }
   return last
}

Une gestion un poil différente du rognage, car je n'introduis pas l'offset ou le rognage manuel dans le coef multiplicateur du "ss", estimant que lorsque l'on fait manuellement, nous savons le format de la source et qu'on désire rogner précisément.
Esscobar
 
Messages: 8422
Inscription Forum: 27 Sep 2016 18:10
Localisation: 86 - Châtellerault
  • offline

Message » 22 Avr 2022 16:31

Je suis passé à la beta 220405 d'Usine (voir Release-notes.txt pour le détail des modifs ds chaque release).

Avec le driver actuel de la SERAPH8 MKII (v4.34), il y a une erreur ds l'initialisation d'un des modes WDM et la beta d'Usine affiche une fenêtre popup appelée TRACE pour le signaler. En regardant le fichier log de la version que j'utilisais avant, je me suis rendu compte que l'erreur était déjà là mais qu'Usine ne la signalait pas ...

Du coup, j'ai modifié ma macro AUTOIT qui lance automatiquement le BMS. La fenêtre popup que j'affichais avant n'y est plus (elle n'est plus nécessaire) et je force la fermeture de la fenêtre TRACE. C'est évidemment spécifique au fait que j'utilise une SERAPH8.

Code: Tout sélectionner
#include <MsgBoxConstants.au3>
AutoItSetOption ("MouseCoordMode", 2 )
Run("D:\Documents\PCHC\Usine Win 5.2.220405\Usine.exe","D:\Documents\PCHC\Usine Win 5.2.220405")
Sleep(2500)
WinWaitActive("Usine", "", 3)
$sText = WinGetTitle("Usine")
WinClose ("TRACE")
WinActivate($sText, "")
MouseMove (250,92,0)
MouseClick("left")
Sleep(150)
Send("Bass Managment LR complete.wkp{ENTER}")
$hWnd = WinWaitActive($sText, "", 10)
WinSetState($hWnd, "", @SW_MINIMIZE)
Emmanuel Piat
Contributeur HCFR 2016
 
Messages: 10431
Inscription Forum: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • offline

Message » 22 Avr 2022 17:29

Coté réglage de l'onglet Audio/ASIO de la Beta Usine :

buffer size : 512
usine block size : 128

Et Windows donne la priorité aux programmes et pas les services d'arrière-plan.
Emmanuel Piat
Contributeur HCFR 2016
 
Messages: 10431
Inscription Forum: 10 Oct 2000 2:00
Localisation: Besançon, FRANCE
  • offline


Retourner vers Logiciel PC Home-cinéma

 
  • Articles en relation
    Dernier message