Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forum DivX Video Ripp-it After Me Ri4m _ Filtres avisynth.... _ Avisynth Multithread

Écrit par : leon1789 17/08/2010 15:56

Bonjour

Quand nos travaillons une vidéo (avec avisynth, il va de soi !)
et stockons le résultat sur disque (avec le codec de notre choix),
il n'est pas rare de devoir attendre plusieurs dizaines de minutes (voire des heures)
que tous les calculs se fassent...

De nos jours, tout le monde possède un ordinateur dont le microprocesseur contient plusieurs coeurs
(tout le monde ou presque... je crains que SG1 utilise encore un pentium III ! rolleyes.gif )
Ces processeurs multi coeurs offrent la possibilité de faire bcp de calculs en parallèle.
Contrairement aux codecs audios, les codecs vidéos que nous avons l'habitude d'utiliser (divx, xvid, x264,...)
ont pris depuis longtemps le virage du multi-threading.

Mais il faut savoir que les versions standard d'Avisynth (comme celle existante dans Ri4m) est mono-thread !
Or il existe des versions modernes multi-thread d'Avisynth (AviSynth MT), et je viens d'en tester une...

Alors j'ai fait quelques tests sur mon PC ( i7 720 QM) avec virtualdub.
La video traitée est créée par avisynth, puis compressée avec un codec
(divx en mode meilleure qualité , xvid en configuration par défaut ou x264 en configuration par défaut)
en mode 1 pass à 800 Kbps.

Pour créer la vidéo avec avisynth, j'ai utilisé ce code :

Code

  a = version.trim(0,100)
  a = a.ShowFrameNumber
  a = a.bicubicResize(480,160)
  b = a.fadeIO(50)
  c = merge(a, a.turn180.reverse)
  a = stackvertical(a.fadeIn0(20),b,c.fadeOut0(20))
  a = a + a.turnLeft + a.turn180 + a.turnright
  a.loop(3)
  SoftSharpen


C'est un source avisynth qui demande pas mal de calcul par la présence de softsharpen (dernière ligne),
si bien que l'exécution du code avisynth est comparable (en temps de calcul) à la
compression de la vidéo réalisée par le codec lui-même.
(attention : les scripts avisynth que ri4m crée par défaut sont très légers en calcul,
sauf si vous utilisez HybridFuPP, ou plusieurs filtres proposés...)

Pour utiliser ce code avec Avisynth MT, il faut juste ajouter simplement en toute première ligne
Code
setMTmode(2,0)


Voici ci-dessous un tableau présentant les résultats que j'ai obtenu :
-- à gauche, je présente le codec de compression et le nombre de CPU (coeurs) réservés
pour exécuter la tâche.
-- en colonne, on voit les temps de calcul pour fabriquer la vidéo (avisynth) et la compresser (codec),
ainsi que le pourcentage d'utilisation du microprocesseur...
La première colonne correspond à l'usage d'Avisynth classique (comme dans Ri4m),
la seconde colonne correspond à l'usage d'Avisynth MT (Multi-Thread).




Que peut-on conclure ?

--) le pourcentage d'utilisation CPU ne reflète pas forcément la vitesse réelle de traitement (sur mon i7, cela est peut-être dû à l'hyperthreading, une caractéristique du processeur...)

--) vérification : on voit bien que Avisynth classique est mono tâche sur les calculs sans compression : le temps de calcul ne varie pas en fonction du nombre de CPU (disons coeurs) utilisés.

--) quand on a 2 CPU actifs et qu'on utilise xvid ou divx pour compresser, l'avantage d'avisynth MT est quasi nul sur l'avisynth classique !

--) très surprenant : le codec divx n'est pas du tout optimisé pour le calcul avec plus de 2 CPU. Pour obtenir les mêmes temps de calculs que x264 ou xvid, il faut limiter le process divx à 2 CPU ... ne pas lui donner les 4 existants sur ma machine, sinon le travail est ralenti !!!!

--) quel que soit le codec utilisé avec avisynth classique, l'avantage de 4 CPU sur 2 CPU est net mais pas si grand que ça.

--) En revanche, toujours avec 4 CPU, utiliser avisynth MT apporte un gain très important ! (ne pas oublier que le script utilisé est aussi gourmand en calcul que la compression par le codec...)
Le gain d'avisynth MT est tel que, si on utilise les codecs divx ou xvid, on divise par 2 le temps de calcul global quand on passe de 2 CPU à 4 CPU !

Écrit par : SG1 17/08/2010 16:39

Bonjour,

Bigre, le Léon, il a pas tout de cassé... Les neurones sont toujours là...

Citation
je crains que SG1 utilise encore à un pentium III !

yahoo3.gif T'es pas tombé très loin... C'est un Céléron 2.2 !

Citation
Alors j'ai fait quelques tests sur mon PC ( i7 760) avec virtualdub.

Ben oui, de suite, là... un I7 !!!
Tu veux pas que je te donne DeepBlue (Encore que même lui, il est dépassé) ?

clapclap.gif

@+

Écrit par : rol 17/08/2010 17:05

Waouh Leon, les résultats sont impressionnants yahoo1.gif

Écrit par : leon1789 17/08/2010 17:29

yahoo1.gif
Merci

Autant dire que je ne fais plus que du MT maintenant ! ...surtout quand je veux mettre au point un script avs.

Ce qui me choque le plus, c'est que le divx avec 4 coeurs est plus lent qu'avec 2 coeurs... (et ceci d'autant plus que le script avs est lourd)
Je ne comprends pas... mais c'est pourtant bien ce qu'il se produit sur mon binz !

Écrit par : leon1789 18/08/2010 09:35

Petit problème que j'ai oublié de signaler :
sur mon pc (je ne sais pas si c'est général), avisynth MT n'est pas compatible avec un traitement audio...
Je ne l'utilise donc que pour des scripts 100% videos.

Écrit par : leon1789 11/12/2010 15:01

Après plusieurs mois d'utilisation, j'ai constaté qu'il y a quelques problèmes de compatibilité avec Avisynth MT
(sur ma machine du moins, et en utilisant VirtualDub) :
problèmes avec les fonctions audios, ainsi que l'incrustation de sous-titres (causant des plantages durant le traitement),
et plus anecdotiquement, avec les options de debanding et deblocking de SoftSharpen (traitement vidéo incorrect) .

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)